BR112016015918B1 - Suporte de camada base não-hevc em extensões de muticamada de hevc - Google Patents

Suporte de camada base não-hevc em extensões de muticamada de hevc Download PDF

Info

Publication number
BR112016015918B1
BR112016015918B1 BR112016015918-7A BR112016015918A BR112016015918B1 BR 112016015918 B1 BR112016015918 B1 BR 112016015918B1 BR 112016015918 A BR112016015918 A BR 112016015918A BR 112016015918 B1 BR112016015918 B1 BR 112016015918B1
Authority
BR
Brazil
Prior art keywords
video
base layer
image
layer
decoded
Prior art date
Application number
BR112016015918-7A
Other languages
English (en)
Other versions
BR112016015918A2 (pt
Inventor
Ye-Kui Wang
Original Assignee
Qualcomm Incorporated
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Priority claimed from US14/590,924 external-priority patent/US9826232B2/en
Application filed by Qualcomm Incorporated filed Critical Qualcomm Incorporated
Publication of BR112016015918A2 publication Critical patent/BR112016015918A2/pt
Publication of BR112016015918B1 publication Critical patent/BR112016015918B1/pt

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/30Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using hierarchical techniques, e.g. scalability
    • H04N19/33Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using hierarchical techniques, e.g. scalability in the spatial domain
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/50Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding
    • H04N19/59Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding involving spatial sub-sampling or interpolation, e.g. alteration of picture size or resolution

Abstract

SUPORTE DE CAMADA-BASE DE NÃO HEVC EM EXTENSÕES DE MUTICAMADAS DE HEVC. Trata-se de um aparelho configurado para decodificar informações de vídeo que inclui uma memória e um processador em comunicação com a memória. A memória é configurada para armazenar informações de vídeo associadas a um fluxo de bits. O aparelho inclui adicionalmente um processador em comunicação com a memória, sendo que o processador é configurado para determinar que uma camada de referência não está incluída no fluxo de bits. O processo é adicionalmente configurado para receber, de uma fonte externa, uma figuração de camada-base decodificada associada a uma unidade de acesso, para armazenar a figuração de camada-base decodificada em uma memória. O processador é adicionalmente configurado para decodificar figurações associadas à unidade de acesso com base na figuração de camada-base decodificada armazenada e subsequente à decodificação das figurações associadas à unidade de acesso, esvaziar a figuração de camada-base decodificada da memória.

Description

CAMPO DA TÉCNICA
[0001] Esta revelação refere-se ao campo de codificação e compactação de vídeo, particularmente à codificação de vídeo escalonável (SVC), codificação de vídeo multivista (MVC) ou codificação de vídeo tridimensional (3D).
ANTECEDENTES
[0002] As capacidades do vídeo digital podem ser incorporadas em uma ampla faixa de dispositivos, que incluem televisões digitais, sistemas de difusão direta digital, sistemas de difusão sem fio, assistentes pessoais digitais (PDAs), computadores do tipo laptop ou desktop, câmeras digitais, dispositivos de gravação digital, reprodutores de mídia digital, dispositivos de jogos de vídeo, consoles de videogame, telefones celulares ou de rádio via satélite, dispositivos de teleconferência por vídeo, e semelhantes. As técnicas de compactação de vídeo de implantação de dispositivos de vídeo digitais, como aquelas descritas nos padrões definidos por MPEG-2, MPEG-4, ITU-T H.263, ITU-T H.264/MPEG-4, Parte 10, Codificação Vídeo Avançada (AVC), o padrão de Codificação de Vídeo de Alta Eficiência (HVEC) atualmente sob desenvolvimento e extensões de tais padrões. Os dispositivos de vídeo podem transmitir, receber, codificar, decodificar e/ou armazenar informações de vídeo digital de modo mais eficiente ao implantar tais técnicas de codificação de vídeo.
[0003] As técnicas de compactação de vídeo realizam predição espacial (intraimagem) e/ou predição temporal (interimagem) para reduzir ou remover a redundância inerente em sequências de vídeo. Para a codificação de vídeo baseada em bloco, uma fatia de vídeo (por exemplo, um quadro de vídeo, uma porção de um quadro de vídeo, etc.) pode ser dividida em blocos de vídeo, que também podem ser referidos como treeblocks, unidades de codificação (CUs) e/ou nós de codificação. Os blocos de vídeo em uma fatia intracodificada (I) de uma imagem são codificados com o uso de predição espacial em relação às amostras de referência em blocos vizinhos na mesma imagem. Os blocos de vídeo em uma fatia intercodificada (P ou B) de uma imagem podem usar predição espacial em relação às amostras de referência em blocos vizinhos na mesma imagem ou predição temporal em relação às amostras de referência em outras imagens de referência. As imagens podem ser referidas como os quadros, e as imagens de referência podem ser referidas como quadros de referência.
[0004] A predição espacial ou temporal resulta em um bloco preditivo para um bloco a ser codificado. Os dados residuais representam diferenças de pixel entre o bloco original a ser codificado e o bloco preditivo. Um bloco intercriptografado é codificado de acordo com um vetor de movimento que aponta para um bloco de amostras de referência que forma o bloco preditivo, e os dados residuais que indicam a diferença entre o bloco codificado e o bloco preditivo. Um bloco intracriptografado é codificado de acordo com um modo intracodificação e com os dados residuais. Para a compactação adicional, os dados residuais podem ser transformados a partir do domínio de pixel em um domínio de transformada, resultando em coeficientes de transformada residuais, que podem, então, ser quantizados. Os coeficientes de transformada quantizados, inicialmente dispostos em uma matriz bidirecional, podem ser varridos a fim de produzir um vetor unidimensional de coeficientes de transformada, e a codificação por entropia pode ser aplicada para obter ainda mais compactação.
SUMÁRIO
[0005] A codificação de vídeo escalonável (SVC) se refere à codificação de vídeo na qual uma camada base (BL), às vezes, referida como uma camada de referência (RL), e uma ou mais camadas de intensificação escalonável (ELs) são usadas. Na SVC, a BL pode transportar dados de vídeo com um nível de qualidade base. As uma ou mais ELs podem transportar dados de vídeo adicionais para suportar, por exemplo, níveis espaciais, temporais e/ou de sinal para ruído (SNR) mais elevados. As ELs podem ser definidas em relação a uma camada previamente decodificada. Por exemplo, uma camada de fundo pode servir como uma BL, enquanto uma camada de topo pode servir como uma EL. As camadas intermediárias podem servir tanto como ELs ou RLs, ou ambas. Por exemplo, uma camada no meio pode ser uma EL para as camadas abaixo da mesma, como a BL ou quaisquer ELs intervenientes e, ao mesmo tempo, servem como uma RL para uma ou mais ELs acima da mesma. Semelhantemente, na extensão Multivista ou 3D do padrão HEVC, pode haver múltiplas vistas, e as informações de uma vista podem ser utilizadas para criptografar (por exemplo, codificar ou decodificar) as informações de uma outra vista (por exemplo, estimativa de movimento, predição de vetor de movimento e/ou outras redundâncias).
[0006] Em SVC, um bloco atual na EL pode ser criptografado (por exemplo, codificado ou decodificado) com o uso das informações derivadas de uma RL. Por exemplo, um bloco atual na EL pode ser codificado com o uso das informações (por exemplo, informações de textura ou informações de movimento) de um bloco colocalizado na RL (o termo “colocalizado” conforme usado na presente revelação pode se referir a um bloco em uma outra camada que corresponde à mesma imagem que o bloco atual, por exemplo, o bloco que está sendo atualmente codificado). Em algumas implantações, a possibilidade de uma RL específica ser usada para codificar uma EL pode ser sinalizada como um sinalizador ou elemento de sintaxe. Se o sinalizador ou o elemento de sintaxe indicar que a RL específica é usada para criptografar a EL, um outro sinalizador ou elemento de sintaxe pode ser adicionalmente sinalizado para indicar quais tipos de informações na imagem de referência específica são usadas para criptografar a EL, como, por exemplo: informações de textura (pixel), informações de movimento ou ambas.
[0007] Em determinados casos, uma porção das informações na RL pode não estar disponível para uso na codificação da EL. Por exemplo, em algumas implantações, se a RL for codificada com o uso de um codec de não-HEVC, as informações de movimento da RL podem não estar disponíveis para um codec de HEVC para criptografar a EL. Em tal caso, a EL ainda pode ser codificada com o uso das informações de textura da RL, mas as informações de movimento da RL não podem ser usadas para criptografar a EL.
[0008] Através da exploração dessa dependência da disponibilidade de determinados tipos de informações na RL sobre o tipo de codec usado para criptografar a RL, alguma parte do processamento que é realizado para determinar quais tipos de informações são derivados da RL pode ser omitida (por exemplo, se as informações estiverem indisponíveis, não há necessidade de verificar se essas informações são usadas para criptografar a EL), resultando, então, na eficiência de codificação aprimorada e/ou complexidade computacional reduzida.
[0009] Os sistemas, métodos e dispositivos desta revelação têm, cada um, diversos aspectos inovadores, nenhum dos quais é responsável apenas pelos atributos desejáveis revelados no presente documento.
[0010] Em um aspecto, a presente revelação descreve um método de decodificação de informações de vídeo. O método inclui determinar se essa camada de referência não está incluída em um fluxo de bits. O método inclui adicionalmente receber, de uma fonte externa, uma imagem de camada base decodificada associada a uma unidade de acesso, armazenar a imagem de camada base decodificada em uma memória, decodificar imagens associadas à unidade de acesso com base na imagem de camada base decodificada armazenada, e, subsequente à decodificação das imagens associadas à unidade de acesso, esvaziar a imagem de camada base decodificada da memória.
[0011] Em alguns aspectos, pode-se codificar de acordo com um codec de não-HEVC (Codificação de Vídeo de Alta Eficiência) e/ou de acordo com um codec de Codificação de Vídeo Avançada (AVC). A determinação da possibilidade de a camada de referência estar incluída no fluxo de bits pode incluir determinar se a camada de referência está incluída no fluxo de bits com base em um valor incluído em um dentre um conjunto de parâmetros de vídeo, um conjunto de parâmetros de sequência, um conjunto de parâmetros de imagem ou um conjunto de parâmetros de adaptação.
[0012] A fonte externa pode incluir um segundo decodificador, que pode ser configurado para decodificar uma camada base de AVC. Em alguns aspectos, uma, e apenas uma, imagem de camada base decodificada pode ser associada à unidade de acesso. A memória pode incluir um buffer de imagem subdecodificada. A memória pode ter um tamanho suficiente para armazenar uma e apenas uma imagem de camada base decodificada. O armazenamento da imagem de camada base decodificada pode compreender adicionalmente fornecer uma indicação de que a imagem de camada base decodificada é utilizável para referência a longo prazo. A codificação de informações de vídeo pode incluir pelo menos um dentre codificação e decodificação de informações de vídeo.
[0013] Um aspecto da presente revelação fornece um aparelho configurado para decodificar informações de vídeo. O aparelho inclui uma memória configurada para armazenar informações de vídeo associadas a um fluxo de bits. O aparelho inclui adicionalmente um processador em comunicação com a memória. O processador é configurado para determinar que uma camada de referência não está incluída no fluxo de bits. O processador é adicionalmente configurado para receber, de uma fonte externa, uma imagem de camada base decodificada associada a uma unidade de acesso, armazenar a imagem de camada base decodificada em uma memória, decodificar imagens associadas à unidade de acesso com base na imagem de camada base decodificada armazenada, e, subsequente à decodificação das imagens associadas à unidade de acesso, esvaziar a imagem de camada base decodificada da memória.
[0014] Em um aspecto, revela-se um meio legível por computador não transitório. O meio inclui o código que, quando executado, faz com que um aparelho realize um processo. O processo inclui determinar que uma camada de referência não está incluída em um fluxo de bits. O processo inclui receber, de uma fonte externa, uma imagem de camada base decodificada associada a uma unidade de acesso e armazenar a imagem de camada base decodificada em uma memória. O processo inclui adicionalmente decodificar imagens associadas à unidade de acesso com base na imagem de camada base decodificada armazenada e subsequente à decodificação das imagens associadas à unidade de acesso, esvaziar a imagem de camada base decodificada da memória.
[0015] Um aspecto da presente revelação fornece um dispositivo de codificação de vídeo configurado para decodificar informações de vídeo. O dispositivo inclui meios para determinar se essa camada de referência não está incluída em um fluxo de bits. O dispositivo inclui adicionalmente meios para receber, de uma fonte externa, uma imagem de camada base decodificada associada a uma unidade de acesso, meios para armazenar a imagem de camada base decodificada em uma memória, meios para decodificar imagens associadas à unidade de acesso com base na imagem de camada base decodificada armazenada, e, meios para esvaziar a imagem de camada base decodificada da memória subsequente à decodificação das imagens associadas à unidade de acesso.
BREVE DESCRIÇÃO DOS DESENHOS
[0016] A Figura 1A é um diagrama de blocos que ilustra um sistema de codificação e decodificação de vídeo exemplificativo que pode utilizar técnicas de acordo com os aspectos descritos nesta revelação.
[0017] A Figura 1B é um diagrama de blocos que ilustra um outro sistema de codificação e decodificação de vídeo exemplificativo que pode realizar técnicas de acordo com os aspectos descritos nesta revelação.
[0018] A Figura 2 A é um diagrama de blocos que ilustra um exemplo de um codificador de vídeo que pode implantar técnicas de acordo com os aspectos descritos nesta revelação.
[0019] A Figura 2B é um diagrama de blocos que ilustra um exemplo de um codificador de vídeo que pode implantar técnicas de acordo com os aspectos descritos nesta revelação.
[0020] A Figura 3A é um diagrama de blocos que ilustra um exemplo de um decodificador de vídeo que pode implantar técnicas de acordo com os aspectos descritos nesta revelação.
[0021] A Figura 3B é um diagrama de blocos que ilustra um exemplo de um decodificador de vídeo que pode implantar técnicas de acordo com os aspectos descritos nesta revelação.
[0022] A Figura 4 ilustra um fluxograma que ilustra um método de codificar informações de vídeo, de acordo com uma modalidade da presente revelação.
[0023] A Figura 5 ilustra um fluxograma que ilustra um método de codificar informações de vídeo, de acordo com uma modalidade da presente revelação.
[0024] A Figura 6 ilustra um fluxograma que ilustra um método de codificar informações de vídeo, de acordo com uma modalidade da presente revelação.
[0025] A Figura 7 ilustra um fluxograma que ilustra um método de codificar informações de vídeo, de acordo com uma outra modalidade da presente revelação.
DESCRIÇÃO DETALHADA
[0026] Determinadas modalidades descritas no presente documento se referem a predição intercamada para codificação de vídeo escalonável no contexto de codecs de vídeo avançados, como HEVC (Codificação de Vídeo de Alta Eficiência). Mais especificamente, a presente revelação se refere a sistemas e métodos para o desempenho aprimorado de predição intercamada em codificação de vídeo multicamada.
[0027] Na descrição abaixo, as técnicas de H.264/AVC relacionadas a determinadas modalidades são descritas; o padrão HEVC e as técnicas relacionadas também são discutidas. Embora determinadas modalidades sejam descritas no presente documento no contexto dos padrões HEVC e/ou H.264, uma pessoa de habilidade comum na técnica pode observar que os sistemas e métodos revelados no presente documento podem ser aplicáveis a qualquer padrão de codificação de vídeo adequada. Por exemplo, as modalidades reveladas no presente documento podem ser aplicáveis a um ou mais dos padrões a seguir: ITU-T H.261, ISO/IEC MPEG-1 Visual, ITU-T H.262 ou ISO/IEC MPEG-2 Visual, ITU-T H.263, ISO/IEC MPEG-4 Visual e ITU-T H.264 (também conhecido como ISO/IEC MPEG-4 AVC), incluindo suas extensões de Codificação de Vídeo Escalonável (SVC) e Codificação de Vídeo Multivista (MVC).
[0028] A HEVC segue, em geral, a estrutura de padrões de codificação de vídeo anteriores em muitos sentidos. A unidade de predição em HEVC é diferente daquela em determinados padrões anteriores de codificação de vídeo (por exemplo, macrobloco). De fato, o conceito de macrobloco não existe em HEVC conforme compreendido em determinados padrões de codificação de vídeo anteriores. Macrobloco é substituído por uma estrutura hierárquica com base em um esquema de quadtree, que pode fornecer alta flexibilidade, dentre outros benefícios possíveis. Por exemplo, no esquema de HEVC, três tipos de blocos, Unidade de Codificação (CU), Unidade de Predição (PU) e Unidade de Transformada (TU), são definidas. A CU pode se referir à unidade básica de divisão de região. A CU pode ser considerada análoga ao conceito de macrobloco, mas isso não se restringe ao tamanho máximo e pode permitir a divisão recursiva em CUs de quatro tamanhos iguais para aprimorar a adaptividade de conteúdo. PU pode ser considerada a unidade básica inter/intrapredição e a mesma pode conter múltiplas divisões de formato arbitrário em uma única PU para codificar eficazmente padrões de imagem irregulares. A TU pode ser considerada a unidade básica de transformada. A mesma pode ser definida independentemente da PU; no entanto, seu tamanho pode ser limitado à CU à qual a TU pertence. Essa separação da estrutura de bloco em três conceitos diferentes pode permitir que cada uma seja otimizada de acordo com seu papel, que pode resultar na eficiência de codificação aprimorada.
[0029] Para fins de ilustração apenas, as determinadas modalidades reveladas no presente documento são descritas com exemplos que incluem apenas duas camadas (por exemplo, uma camada inferior como a camada base, e uma camada superior como a camada de intensificação). Deve-se compreender que tais exemplos podem ser aplicáveis às conimagens que incluem múltiplas camadas-base e/ou camadas de intensificação. Além disso, para facilitar a explicação, a revelação a seguir inclui os termos “quadros” ou “blocos” com referência a determinadas modalidades. No entanto, esses termos não significam que sejam limitantes. Por exemplo, as técnicas descritas abaixo podem ser usadas com quaisquer unidades de vídeo adequadas, como blocos (por exemplo, CU, PU, TU, macroblocos, etc.), fatias, quadros, etc.
PADRÕES DE CODIFICAÇÃO DE VÍDEO
[0030] Uma imagem digital, como uma imagem de vídeo, uma imagem de TV, uma imagem estática ou uma imagem gerada por um gravador de vídeo ou um computador, pode consistir em pixels ou amostras dispostas em linhas horizontais e verticais. O número de pixels em uma única imagem é tipicamente dezenas de centenas. Cada pixel contém tipicamente informações de luminância e crominância. Sem compactação, a quantidade de informações a serem conduzidas de um codificador de imagem para um decodificador de imagem é tão grande que torna a transmissão de imagem em tempo real impossível. Para reduzir a quantidade de informações a serem transmitidas, inúmeros métodos de compactação diferentes, como padrões JPEG, MPEG e H.263, foram desenvolvidos.
[0031] Os padrões de codificação de vídeo incluem ITU-T H.261, ISO/IEC MPEG-1 Visual, ITU-T H.262 ou ISO/IEC MPEG-2 Visual, ITU-T H.263, ISO/IEC MPEG-4 Visual e ITU-T H.264, incluindo suas extensões SVC e MVC.
[0032] Além disso, um novo padrão de codificação de vídeo, ou seja, Codificação de Vídeo de Alta Eficiência (HEVC), está sendo desenvolvido pelo Time Colaborativo Conjunto em Codificação de Vídeo (JCT-VC) do ITU-T Grupo de Especialistas em Codificação de Vídeo (VCEG) e Grupo de Especialistas em Imagem em Movimento ISO/IEC (MPEG). A citação total para o HEVC Draft 10 é o documento JCTVC-L1003, Bross et al, “High Efficiency Video Coding (HEVC) Text Specification Draft 10”, Time Colaborativo Conjunto em Codificação de Vídeo (JCT-VC) de ITU-T SGI 6 WP3 e ISO/IEC JTC1/SC29/WG11, 12° Encontro: Genebra, Suíça, 14 de janeiro de 2013 a 23 de janeiro de 2013. A extensão multivista para HEVC, ou seja, MV-HEVC, e a extensão escalonável para HEVC, chamada SHVC, também são desenvolvidas pelo 3V (Time Colaborativo Conjunto em Desenvolvimento de Extensão de Codificação de Vídeo em 3D ITU-T/ISO/IEC) e JCT-VC, respectivamente.
[0033] Vários aspectos dos sistemas, aparelhos, e métodos inovadores são descritos mais completamente mais adiante no presente documento com referência aos desenhos anexos. Esta revelação pode, no entanto, ser incorporada de muitas formas diferentes e não deve ser interpretada como limitada a qualquer estrutura ou função específica apresentada ao longo desta revelação. Ao invés disso, esses aspectos são fornecidos de modo que essa revelação seja meticulosa e completa, e irá conduzir totalmente o escopo da revelação àqueles versados na técnica. Com base nos ensinamentos no presente documento, um versado na técnica deve observar que o escopo da revelação é destinado a cobrir quaisquer aspectos dos sistemas, aparelhos e métodos inovadores revelados no presente documento, independente de estarem implantados independentemente ou combinados com qualquer outro aspecto da revelação. Por exemplo, um aparelho pode ser implantado ou um método pode ser praticado com o uso de qualquer número dos aspectos estabelecidos no presente documento. Além disso, o escopo da presente revelação é destinado a cobrir tal aparelho ou método que é praticado com o uso de outra estrutura, funcionalidade ou estrutura e funcionalidade adicionalmente ou além dos vários aspectos da presente revelação estabelecidos no presente documento. Deve-se compreender que qualquer aspecto revelado no presente documento pode ser incorporado por um ou mais elementos de uma reivindicação.
[0034] Embora os aspectos específicos sejam descritos no presente documento, muitas variações e permutações desses aspectos estão dentro do escopo da revelação. Embora alguns benefícios e algumas vantagens dos aspectos preferenciais sejam mencionados, o escopo da revelação não se destina a ser limitado aos benefícios, usos ou objetivos específicos. Ao invés disso, os aspectos da revelação são destinados a serem amplamente aplicáveis às diferentes tecnologias sem fio, conimagens de sistema, redes e protocolos de transmissão, alguns dos quais são ilustrados por meio de exemplo nas Figuras e na descrição a seguir dos aspectos preferenciais. A descrição detalhada e os desenhos são meramente ilustrativos da revelação em vez de limitantes, sendo que o escopo da revelação é definido pelas reivindicações anexas e os equivalentes das mesmas.
[0035] Os desenhos anexos ilustram exemplos. Os elementos indicados pelas referências numéricas nos desenhos anexos correspondem aos elementos indicados pelas referências numéricas semelhantes na descrição a seguir. Nesta revelação, os elementos que têm nomes que iniciam com palavras originais (por exemplo, “primeiro”, “segundo”, “terceiro”, e assim em diante) não implicam necessariamente no fato de que os elementos têm uma ordem específica. Em vez disso, tais palavra referentes a ordinais são meramente usadas para se referir aos diferentes elementos de um mesmo tipo ou tipo semelhante.
SISTEMA DE CODIFICAÇÃO DE VÍDEO
[0036] A Figura 1A é um diagrama de blocos que ilustra um sistema de codificação de vídeo 10 exemplificativo que pode utilizar técnicas de acordo com os aspectos descritos nesta revelação. Conforme usado descrito no presente documento, o termo “criptógrafo de vídeo” se refere, genericamente, tanto a codificadores de vídeo quanto a decodificadores de vídeo. Nesta revelação, os termos “codificação de vídeo” ou “codificação” podem se referir genericamente à codificação de vídeo e à decodificação de vídeo. Além de codificadores de vídeo e decodificadores de vídeo, os aspectos descritos no presente pedido pode ser se estendem a outros dispositivos relacionados como transcriptadores (por exemplo, dispositivos que podem decodificar um fluxo de bits e recodificar um outro fluxo de bits) e middleboxes (por exemplo, dispositivos que podem modificar, transformar e/ou, de outro modo, manipular um fluxo de bits).
[0037] Conforme mostrado na Figura 1A, o sistema de codificação de vídeo 10 inclui um módulo de origem 12 que gera dados de vídeo codificados a serem decodificados em um tempo mais anterior por um módulo de destino 14. No exemplo da Figura 1A, o módulo de origem 12 e o módulo de destino 14 são dispositivos separados - especificamente, o módulo de origem 12 é parte de um dispositivo de fonte, e o módulo de destino 14 é parte de um dispositivo de destino. Nota-se, no entanto, que os módulos fonte e destino 12, 14 podem estar ou fazer parte do mesmo dispositivo, conforme mostrado no exemplo da Figura 1B.
[0038] Com referência mais uma vez à Figura 1A, o módulo de origem 12 e o módulo de destino 14 pode compreender qualquer um dentre uma ampla faixa de dispositivos, incluindo computadores do tipo desktop, computadores do tipo notebook (por exemplo, laptop), computadores do tipo tablet, decodificadores de sinais, fones de telefones como os denominados telefones “inteligentes”, os denominados pads “inteligentes”, televisões, câmeras, dispositivos de exibição, reprodutores de mídia digital, consoles de videogame, dispositivo de fluxo de vídeo ou semelhantes. Em alguns casos, o módulo de origem 12 e o módulo de destino 14 podem ser equipados para a comunicação sem fio.
[0039] O módulo de destino 14 pode receber os dados de vídeo codificados a serem codificados por meio de um enlace 16. O enlace 16 pode compreender qualquer tipo de meio ou dispositivo com capacidade de mover os dados de vídeo codificados do módulo de origem 12 para o módulo de destino 14. No exemplo da Figura 1A, o enlace 16 pode compreender um meio de comunicação para possibilitar que o módulo de origem 12 transmita dados de vídeo codificados diretamente para o módulo de destino 14 em tempo real. Os dados de vídeo codificados podem ser modulados de acordo com um padrão de comunicação, como um protocolo de comunicação sem fio, e transmitidos para o módulo de destino 14. O meio de comunicação pode compreender qualquer meio de comunicação sem fio ou com fio, como um espectro de radiofrequência (RF) ou uma ou mais linhas de transmissão física. O meio de comunicação pode formar parte de uma rede baseada em pacote, como uma rede de área local, uma rede de área ampla ou uma rede global como a Internet. O meio de comunicação pode incluir roteadores, comutadores, estações-base ou qualquer outro equipamento que possa ser útil para facilitar a comunicação do módulo de origem 12 para o módulo de destino 14.
[0040] Alternativamente, os dados codificados podem ser emitidos a partir de uma interface de saída 22 para um dispositivo de armazenamento 31 opcional. Semelhantemente, os dados codificados podem ser acessados a partir do dispositivo de armazenamento 31 por uma interface de entrada 28. O dispositivo de armazenamento 31 pode incluir qualquer uma dentre uma variedade de mídia de armazenamento de dados distribuída ou localmente acessada como um disco rígido, memória flash, memória volátil ou não volátil ou qualquer outra mídia de armazenamento digital adequada para armazenar dados de vídeo codificados. Em um exemplo adicional, o dispositivo de armazenamento 31 pode corresponder a um servidor de arquivos ou um outro dispositivo de armazenamento intermediário que possa reter o vídeo codificado gerado pelo módulo de origem 12. O módulo de destino 14 pode acessar dados de vídeo armazenados do dispositivo de armazenamento 31 por meio de fluxo ou download. O servidor de arquivos pode ser qualquer tipo de servidor com capacidade de armazenar dados de vídeo codificados e transmitir esses dados de vídeo codificados para o módulo de destino 14. Os servidores de arquivos exemplificativos incluem um servidor web (por exemplo, para um site da web), um servidor FTP, dispositivos de armazenamento fixado em rede (NAS) ou uma unidade de disco local. O módulo de destino 14 pode acessar os dados de vídeo codificados através de qualquer conexão de dados padrão, incluindo uma conexão de Internet. Esse pode incluir um canal sem fio (por exemplo, uma conexão de Wi-Fi), uma conexão com fio (por exemplo, DSL, modem a cabo, etc.), ou uma combinação de ambos que seja adequada para acessar dados de vídeo codificados armazenados em um servidor de arquivos. A transmissão de dados de vídeo codificados a partir do dispositivo de armazenamento 31 pode ser uma transmissão por fluxo, uma transmissão por download ou uma combinação de ambos.
[0041] As técnicas desta revelação não se limitam a aplicações ou conimagens sem fio. As técnicas podem ser aplicadas à codificação de vídeo em relação à qualquer uma dentre uma variedade de aplicações de multimídia, como difusões por televisão aberta, transmissões por televisão a cabo, transmissões por televisão via satélite, transmissões de vídeo por fluxo, por exemplo, por meio da Internet (por exemplo, fluxo adaptativo dinâmico através de HTTP (DASH), etc.), codificação de vídeo digital para armazenamento em um meio de armazenamento de dados, decodificação de vídeo digital armazenado em um meio de armazenamento de dados ou outras aplicações. Em alguns exemplos, o sistema de codificação de vídeo 10 pode ser configurado para suportar a transmissão de vídeo unidirecional ou bidirecional para suportar aplicações como fluxo de vídeo, reprodução de vídeo, difusão de vídeo, e/ou telefonia por vídeo.
[0042] No exemplo da Figura 1A, o módulo de origem 12 inclui uma fonte de vídeo 18, codificador de vídeo 20 e uma interface de saída 22. Em alguns casos, a interface de saída 22 pode incluir um modulador/demodulador (modem) e/ou um transmissor. No módulo de origem 12, a fonte de vídeo 18 pode incluir uma fonte como um dispositivo de captura de vídeo, por exemplo, uma câmera de vídeo, um arquivo de vídeo que contém vídeo previamente capturado, uma interface de alimentação de vídeo para receber vídeo de um provedor de conteúdo de vídeo, e/ou um sistema gráfico de computador para gerar dados gráficos de computador como a fonte vídeo, ou uma combinação de tais fontes. Como um exemplo, se a fonte de vídeo 18 for uma câmera de vídeo, o módulo de origem 12 e o módulo de destino 14 podem formar os denominados telefones com câmera ou telefones com vídeo, conforme ilustrado no exemplo da Figura 1B. No entanto, as técnicas descritas nesta revelação podem ser aplicáveis à codificação de vídeo em geral, e podem ser aplicadas às aplicações sem fio e/ou com fio.
[0043] O vídeo capturado, pré-capturado ou gerado por computador pode ser codificado pelo codificador de vídeo 20. Os dados de vídeo codificados podem ser transmitidos diretamente para o módulo de destino 14 por meio da interface de saída 22 do módulo de origem 12. Os dados de vídeo codificados também podem (ou alternativamente) ser armazenados no dispositivo de armazenamento 31 para o acesso posterior pelo módulo de destino 14 ou outros dispositivos, para decodificação e/ou reprodução. O codificador de vídeo 20 ilustrado na Figura 1A e 1B pode compreender o codificador de vídeo 20 ilustrado na Figura 2A, o codificador de vídeo 23 ilustrado na Figura 2B, ou qualquer outro codificador de vídeo descrito no presente documento.
[0044] No exemplo da Figura 1A, o módulo de destino 14 inclui uma interface de entrada 28, um decodificador de vídeo 30, e um dispositivo de exibição 32. Em alguns casos, a interface de entrada 28 pode incluir um receptor e/ou um modem. A interface de entrada 28 do módulo de destino 14 pode receber os dados de vídeo codificados através do enlace 16. Os dados de vídeo codificados comunicados através do enlace 16, ou fornecidos no dispositivo de armazenamento 31, podem incluir uma variedade de elementos de sintaxe gerados pelo codificador de vídeo 20 para uso por um decodificador de vídeo, como o decodificador de vídeo 30, na decodificação dos dados de vídeo. Tais elementos de sintaxe podem ser incluídos com os dados de vídeo codificados transmitidos em um meio de comunicação, armazenados em um meio de armazenamento, ou armazenados em um servidor de arquivos. O decodificador de vídeo 30 ilustrado na Figura 1A e 1B pode compreender o decodificador de vídeo 30 ilustrado na Figura 3 A, o decodificador de vídeo 33 ilustrado na Figura 3B, ou qualquer outro decodificador de vídeo descrito no presente documento.
[0045] O dispositivo de exibição 32 pode ser integrado com o módulo de destino 14 ou externo ao mesmo. Em alguns exemplos, o módulo de destino 14 pode incluir um dispositivo de exibição integrado e também pode ser configurado para fazer interface com um dispositivo de exibição externo. Em outros exemplos, o módulo de destino 14 pode ser um dispositivo de exibição. Em geral, o dispositivo de exibição 32 exibe os dados de vídeo decodificados para um usuário, e pode compreender qualquer um dentre uma variedade de dispositivos de exibição como um monitor de cristal líquido (LCD), um monitor de plasma, um monitor de diodo emissor de luz orgânico (OLED) ou um outro tipo de dispositivo de exibição.
[0046] Em aspectos relacionados, a Figura 1B mostra um sistema de codificação de vídeo e decodificação 10' exemplificativo em que os módulos de fonte e destino 12, 14 estão em um dispositivo ou fazem parte de um dispositivo ou dispositivo de usuário 11. O dispositivo 11 pode ser um fone de telefone, como um telefone "inteligente" ou semelhantes. O dispositivo 11 pode incluir um módulo de controlador/processador 13 opcional em comunicação operativa com os módulos de fonte e destino 12, 14. O sistema 10' da Figura 1B pode incluir adicionalmente uma unidade de processamento de vídeo 21 entre o codificador de vídeo 20 e a interface de saída 22. Em algumas implantações, a unidade de processamento de vídeo 21 é uma unidade separada, conforme ilustrado na Figura 1B; no entanto, em outras implantações, a unidade de processamento de vídeo 21 pode ser implantada como uma porção do codificador de vídeo 20 e/ou do módulo de processador/controlador 13. O sistema 10' da Figura 1B, e componentes dos mesmos, são, de outro modo, semelhantes ao sistema 10 da Figura 1A, e componentes dos mesmos.
[0047] O codificador de vídeo 20 e o decodificador de vídeo 30 podem operar de acordo com um padrão de compactação de vídeo, como o padrão HEVC presentemente sob desenvolvimento, e pode se adequar a um Modelo de Teste de HEVC (HM). Alternativamente, o codificador de vídeo 20 e o decodificador de vídeo 30 podem operar de acordo com outros padrões proprietários e industriais, como o padrão ITU-T H.264, alternativamente referido como MPEG- 4, Parte 10, Codificação de Vídeo Avançada (AVC) ou extensões de tais padrões. As técnicas desta revelação, no entanto, não se limitam a qualquer padrão de codificação específico. Outros exemplos de padrões de compactação de vídeo incluem MPEG-2 e ITU-T H.263.
[0048] Embora não mostrado nos exemplos das Figuras 1A e 1B, o codificador de vídeo 20 e o decodificador de vídeo 30 podem, cada um, ser integrados com um codificador e decodificador de áudio, e pode incluir unidades de MUX- DEMUX adequadas, ou outro hardware e software, para manusear a codificação tanto de áudio quanto de vídeo em um fluxo de dados comum ou fluxos de dados separados. Caso se aplique, em alguns exemplos, as unidades de MUX-DEMUX podem se adequar ao protocolo de multiplexador ITU H.223, ou outros protocolos como o protocolo de datagrama de usuário (UDP).
[0049] O codificador de vídeo 20 e o decodificador de vídeo 30 podem, cada um, ser implantados como qualquer um dentre uma variedade de conjunto de circuitos de codificador adequado, como um ou mais microprocessadores, processadores de sinal digital (DSPs), circuitos integrados para aplicação específica (ASICs), matrizes de portas programáveis em campo (FPGAs), lógica discreta, software, hardware, firmware ou quaisquer combinações dos mesmos. Quando as técnicas forem implantadas parcialmente em software, um dispositivo pode armazenar instruções para o software em um meio legível por computador não transitório adequado e pode executar as instruções em hardware com o uso de um ou mais processadores para realizar as técnicas desta revelação. Cada um dentre o codificador de vídeo 20 e o decodificador de vídeo 30 pode estar incluído em um ou mais codificadores ou decodificadores, qualquer um dos quais pode ser integrado como parte de um codificador/decodificador combinado (CODEC) em um respectivo dispositivo.
PROCESSO DE CODIFICAÇÃO DE VÍDEO
[0050] Conforme mencionado brevemente acima, o codificador de vídeo 20 codifica os dados de vídeo. Os dados de vídeo podem compreender uma ou mais imagens. Cada uma das imagens é uma imagem estática que forma parte de um vídeo. Em alguns exemplos, uma imagem pode ser referida como um “quadro” de vídeo. Quando o codificador de vídeo 20 codifica os dados de vídeo, o codificador de vídeo 20 pode gerar um fluxo de bits. O fluxo de bits pode incluir uma sequência de bits que forma uma representação codificada dos dados de vídeo. O fluxo de bits pode incluir imagens codificadas e dados associados. Uma imagem codificada é uma representação codificada de uma imagem.
[0051] Para gerar o fluxo de bits, o codificador de vídeo 20 pode realizar operações de codificação em cada imagem nos dados de vídeo. Quando o codificador de vídeo 20 realiza operações de codificação nas imagens, o codificador de vídeo 20 pode gerar uma série de imagens codificadas e dados associados. Os dados associados podem incluir um conjunto de parâmetros de vídeo (VPS), um conjunto de parâmetros de sequência (SPS), um conjunto de parâmetros de imagem (PPS), um conjunto de parâmetros de adaptação (APS) e outras estruturas de sintaxe. Um SPS pode conter parâmetros aplicáveis a zero ou mais sequências de imagens. Um PPS pode conter parâmetros aplicáveis a zero ou mais imagens. Um APS pode conter parâmetros aplicáveis a zero ou mais imagens. Os parâmetros em um APS podem ser parâmetros que sejam mais prováveis à alteração do que os parâmetros em um PPS.
[0052] Para gerar uma imagem codificada, o codificador de vídeo 20 pode dividir uma imagem em blocos de vídeo igualmente dimensionados. Um bloco de vídeo pode ser uma matriz bidirecional de amostras. Cada um dos blocos de vídeo está associado a um treeblock. Em alguns exemplos, um treeblock pode ser referido como uma unidade de codificação maior (LCU). Os treeblocks de HEVC podem ser amplamente análogos aos macroblocos de padrões anteriores, como H.264/AVC. No entanto, um treeblock não é necessariamente limitado a um tamanho específico e pode incluir uma ou mais CUs. O codificador de vídeo 20 pode usar a partição de quadtree para dividir os blocos de vídeo de treeblocks em blocos de vídeo associados às CUs, daí o nome “treeblocks”.
[0053] Em alguns exemplos, o codificador de vídeo 20 pode dividir uma imagem em uma pluralidade de fatias. Cada uma das fatias pode incluir um número inteiro de CUs. Em algumas ocasiões, uma fatia compreende um número inteiro de treeblocks. Em outras ocasiões, um limite de uma fatia pode estar dentro de um treeblock.
[0054] Como parte da realização de uma operação de codificação em uma imagem, o codificador de vídeo 20 pode realizar operações de codificação em cada fatia da imagem. Quando o codificador de vídeo 20 realizar uma operação de codificação em uma fatia, o codificador de vídeo 20 pode gerar dados codificados associados à fatia. Os dados codificados associados à fatia podem ser referidos como uma “fatia codificada”.
[0055] Para gerar uma fatia codificada, o codificador de vídeo 20 pode realizar operações de codificação em cada treeblock em uma fatia. Quando o codificador de vídeo 20 realizar uma operação de codificação em um treeblock, o codificador de vídeo 20 pode gerar um treeblock criptografado. O treeblock criptografado pode compreender dados que representam uma versão codificada do treeblock.
[0056] Quando o codificador de vídeo 20 gerar uma fatia codificada, o codificador de vídeo 20 pode realizar operações de codificação (por exemplo, codificar) nos treeblocks na fatia de acordo com uma ordem de varredura. Por exemplo, o codificador de vídeo 20 pode codificar os treeblocks da fatia em uma ordem que prossiga da esquerda para a direita através de uma fileira mais superior de treeblocks na fatia, então, da esquerda para a direita através de uma próxima fileira inferior de treeblocks, e assim em diante, até que o codificador de vídeo 20 tenha codificado cada um dos treeblocks na fatia.
[0057] Como resultado da codificação dos treeblocks de acordo com a ordem de varredura, os treeblocks acima e para a esquerda de um dado treeblock podem ter sido codificados, mas os treeblocks abaixo e para a direita do dado treeblock podem não ter sido codificados. Consequentemente, o codificador de vídeo 20 pode ter a capacidade de acessar informações geradas pela codificação de treeblocks acima e para a esquerda do dado treeblock quando se codifica o dado treeblock. No entanto, o codificador de vídeo 20 pode não ter a capacidade de acessar informações geradas pela codificação de treeblocks abaixo e para a direita do dado treeblock quando se codifica o dado treeblock.
[0058] Para gerar um treeblock criptografado, o codificador de vídeo 20 pode realizar recursivamente a partição de quadtree no bloco de vídeo do treeblock para dividir o bloco de vídeo em blocos de vídeo possivelmente menores. Cada um dos blocos de vídeo menores pode ser associado a uma CU diferente. Por exemplo, o codificador de vídeo 20 pode dividir o bloco de vídeo de um treeblock em quatro sub-blocos igualmente dimensionados, pode dividir um ou mais dos sub-blocos em quatro sub-sub-blocos igualmente dimensionados, e assim em diante. Uma CU dividida pode ser uma CU cujo bloco de vídeo é dividido em blocos de vídeo associados a outras CUs. Uma CU não dividida pode ser uma CU cujo bloco de vídeo não é dividido em blocos de vídeo associados a outras CUs.
[0059] Um ou mais elementos de sintaxe no fluxo de bits podem indicar um número máximo de vezes que o codificador de vídeo 20 pode dividir o bloco de vídeo de um treeblock. Um bloco de vídeo de uma CU pode ter formato quadrado. O tamanho do bloco de vídeo de uma CU (por exemplo, o tamanho da CU) pode variar de 8 x 8 pixels até o tamanho de um bloco de vídeo de um treeblock (por exemplo, o tamanho do treeblock) com um máximo de 64 x 64 pixels ou maior.
[0060] O codificador de vídeo 20 pode realizar operações de codificação (por exemplo, codificar) em cada CU de um treeblock de acordo com uma ordem de varredura z. Em outras palavras, o codificador de vídeo 20 pode codificar uma CU superior esquerda, uma CU superior direita, uma CU inferior esquerda e, então, uma CU inferior direita, nessa ordem. Quando o codificador de vídeo 20 realizar uma operação de codificação em uma CU dividida, o codificador de vídeo 20 pode codificar CUs associadas aos sub-blocos do bloco de vídeo da CU dividida de acordo com a ordem de varredura z. Em outras palavras, o codificador de vídeo 20 pode codificar uma CU associada a um sub-bloco superior esquerdo, uma CU associada a um sub-bloco superior direito, uma CU associada a um sub-bloco inferior esquerdo e, então, uma CU associada a um sub-bloco inferior direito, nessa ordem.
[0061] Como resultado da codificação das CUs de um treeblock de acordo com uma ordem de varredura z, as CUs acima, acima e para a esquerda, acima e para a direita, esquerdas, e abaixo e para a esquerda de uma dada CU podem ter sido codificadas. As CUs abaixo e para a direita da dada CU ainda não foram codificadas. Consequentemente, o codificador de vídeo 20 pode ter capacidade de acessar informações geradas pela codificação de algumas CUs que são vizinhas à dada CU quando se codifica a dada CU. No entanto, o codificador de vídeo 20 pode não ter capacidade de acessar informações geradas pela codificação de outras CUs que são vizinhas à dada CU quando se codifica a dada CU.
[0062] Quando o codificador de vídeo 20 codificada uma CU não dividida, o codificador de vídeo 20 pode gerar uma ou mais PUs para a CU. Cada uma das PUs da CU pode ser associada a um bloco de vídeo diferente no bloco de vídeo da CU. O codificador de vídeo 20 pode gerar um bloco de vídeo predito para cada PU da CU. O bloco de vídeo predito de uma PU pode ser um bloco de amostras. O codificador de vídeo 20 pode usar a intrapredição ou a interpredição para gerar o bloco de vídeo predito para uma PU.
[0063] Quando o codificador de vídeo 20 usar a intrapredição para gerar o bloco de vídeo predito de uma PU, o codificador de vídeo 20 pode gerar o bloco de vídeo predito da PU com base nas amostras decodificadas da imagem associada à PU. Se o codificador de vídeo 20 usar a intrapredição para gerar blocos de vídeo preditos das PUs de uma CU, a CU é uma CU intrapredita. Quando o codificador de vídeo 20 usar a interpredição para gerar o bloco de vídeo predito da PU, o codificador de vídeo 20 pode gerar o bloco de vídeo predito da PU com base nas amostras decodificadas de uma ou mais imagens associadas à PU. Se o codificador de vídeo 20 usar a interpredição para gerar blocos de vídeo preditos das PUs de uma CU, a CU é uma CU interpredita.
[0064] Ademais, quando o codificador de vídeo 20 usar a interpredição para gerar um bloco de vídeo predito para uma PU, o codificador de vídeo 20 pode gerar informações de movimento para a PU. As informações de movimento para uma PU podem indicar um ou mais blocos de referência da PU. Cada bloco de referência da PU pode ser um bloco de vídeo em uma imagem de referência. A imagem de referência pode ser uma imagem além da imagem associada à PU. Em alguns exemplos, um bloco de referência de uma PU também pode ser referido como a “amostra de referência” da PU. O codificador de vídeo 20 pode gerar o bloco de vídeo predito para a PU com base nos blocos de referência da PU.
[0065] Após o codificador de vídeo 20 gerar blocos de vídeo preditos para uma ou mais PUs de uma CU, o codificador de vídeo 20 pode gerar dados residuais para a CU com base nos blocos de vídeo preditos para as PUs da CU. Os dados residuais para a CU podem indicar diferenças entre amostras nos blocos de vídeo preditos para as PUs da CU e o bloco de vídeo original da CU.
[0066] Ademais, como parte da realização de uma operação de codificação em uma CU não dividida, o codificador de vídeo 20 pode realizar a partição de quadtree recursiva nos dados residuais da CU para a partição dos dados residuais da CU em um ou mais blocos dos dados residuais (por exemplo, blocos de vídeo residuais) associados às TUs da CU. Cada TU de uma CU pode ser associada a um bloco de vídeo residual diferente.
[0067] O codificador de vídeo 20 pode aplicar uma ou mais transformadas aos blocos de vídeo residuais associados às TUs para gerar blocos de coeficiente de transformada (por exemplo, blocos de coeficientes de transformada) associados às TUs. Conceitualmente, um bloco de coeficiente de transformada pode ser uma matriz bidimensional (2D) de coeficientes de transformada.
[0068] Após gerar um bloco de coeficiente de transformada, o codificador de vídeo 20 pode realizar um processo de quantização no bloco de coeficiente de transformada. A quantização se refere, em geral, a um processo no qual os coeficientes de transformada são quantizados para reduzir possivelmente a quantidade de dados usados para representar os coeficientes de transformada, fornecendo mais compactação. O processo de quantização pode reduzir a profundidade de bit associada a alguns ou todos os coeficientes de transformada. Por exemplo, um coeficiente de transformada de bit n pode ser arredondado para baixo para um coeficiente de transformada de bit m durante a quantização, em que n é maior que m.
[0069] O codificador de vídeo 20 pode associar cada CU a um valor de parâmetro de quantização (QP). O valor de QP associado a uma CU pode determinar como o codificador de vídeo 20 quantiza os blocos de coeficiente de transformada associados à CU. O codificador de vídeo 20 pode ajustar o grau de quantização aplicado aos blocos de coeficiente de transformada associados a uma CU ajustando-se o valor de QP associado à CU.
[0070] Após o codificador de vídeo 20 quantizar um bloco de coeficiente de transformada, o codificador de vídeo 20 pode gerar conjuntos de elementos de sintaxe que representam os coeficientes de transformada no bloco de coeficiente de transformada quantizado. O codificador de vídeo 20 pode aplicar operações de codificação por entropia, como operações de Codificação Aritmética Binária Adaptativa (CABAC), a alguns desses elementos de sintaxe. Outras técnicas de codificação por entropia como codificação de comprimento variável adaptativa a conteúdo (CAVLC), codificação de entropia de partição de intervalo de probabilidade (PIPE) ou outra codificação aritmética binária também poderia ser usada.
[0071] O fluxo de bits gerado pelo codificador de vídeo 20 pode incluir uma série de unidades de Camada de Abstração de Rede (NAL). Cada uma dentre as unidades de NAL pode ser uma estrutura de sintaxe que contém uma indicação de um tipo de dados na unidade de NAL e bytes que contêm os dados. Por exemplo, uma unidade de NAL pode conter dados que representam um conjunto de parâmetros de vídeo, um conjunto de parâmetros de sequência, um conjunto de parâmetros de imagem, uma fatia codificada, informações de intensificação complementar (SEI), um delimitador de unidade de acesso, dados de preenchimento ou um outro tipo de dados. Os dados em uma unidade de NAL podem incluir várias estruturas de sintaxe.
[0072] O decodificador de vídeo 30 pode receber o fluxo de bits gerado pelo codificador de vídeo 20. O fluxo de bits pode incluir uma representação codificada dos dados de vídeo codificados pelo codificador de vídeo 20. Quando o decodificador de vídeo 30 receber o fluxo de bits, o decodificador de vídeo 30 pode realizar uma operação de análise no fluxo de bits. Quando o decodificador de vídeo 30 realizar a operação de análise, o decodificador de vídeo 30 pode extrair elementos de sintaxe do fluxo de bits. O decodificador de vídeo 30 pode reconstruir as imagens dos dados de vídeo com base nos elementos de sintaxe extraídos do fluxo de bits. O processo para reconstruir os dados de vídeo com base nos elementos de sintaxe pode ser recíproco, em geral, para o processo realizado pelo codificador de vídeo 20 para gerar os elementos de sintaxe.
[0073] Após o decodificador de vídeo 30 extrair os elementos de sintaxe associados a uma CU, o decodificador de vídeo 30 pode gerar blocos de vídeo preditos para as PUs da CU com base nos elementos de sintaxe. Além disso, o decodificador de vídeo 30 pode inverter os blocos de coeficiente de transformada de quantização associados às TUs da CU. O decodificador de vídeo 30 pode realizar transformadas inversas nos blocos de coeficiente de transformada para reconstruir blocos de vídeo residuais associados às TUs da CU. Após gerar os blocos de vídeo preditos e reconstruir os blocos de vídeo residuais, o decodificador de vídeo 30 pode reconstruir o bloco de vídeo da CU com base nos blocos de vídeo preditos e nos blocos de vídeo residuais. Desse modo, o decodificador de vídeo 30 pode reconstruir os blocos de vídeo das CUs com base nos elementos de sintaxe no fluxo de bits.
CODIFICADOR DE VÍDEO
[0074] A Figura 2A é um diagrama de blocos que ilustra um exemplo de um codificador de vídeo que pode implantar técnicas de acordo com os aspectos descritos nesta revelação. O codificador de vídeo 20 pode ser configurado para processar uma única camada de um quadro de vídeo, como para HEVC. Adicionalmente, o codificador de vídeo 20 pode ser configurado para realizar qualquer uma ou todas as técnicas desta revelação. Como um exemplo, a unidade de processamento de predição 100 pode ser configurada para realizar qualquer uma ou todas as técnicas descritas nesta revelação. Em uma outra modalidade, o codificador de vídeo 20 inclui uma unidade de predição intercamada 128 opcional que é configurada para realizar qualquer uma ou todas as técnicas descritas nesta revelação. Em outras modalidades, a predição intercamada pode ser realizada pela unidade de processamento de predição 100 (por exemplo, unidade de interpredição 121 e/ou unidade de intrapredição 126), em cujo caso a unidade de predição intercamada 128 pode ser omitida. No entanto, os aspectos desta revelação não são limitantes. Em alguns exemplos, as técnicas descritas nesta revelação podem ser compartilhadas dentre os vários componentes do codificador de vídeo 20. Em alguns exemplos, adicional ou alternativamente, um processador (não mostrado) pode ser configurado para realizar qualquer uma ou todas as técnicas descritas nesta revelação.
[0075] Para fins de explicação, esta revelação descreve o codificador de vídeo 20 no contexto de codificação HEVC. No entanto, as técnicas desta revelação podem ser aplicáveis aos outros padrões ou métodos de codificação. O exemplo retratado na Figura 2A é para um codec de única camada. No entanto, conforme será descrito adicionalmente em relação à Figura 2B, alguns ou todos dentre os codificadores de vídeo 20 podem ser duplicados para o processamento de um codec multicamada.
[0076] O codificador de vídeo 20 pode realizar a intra e a intercodificação de blocos de vídeo nas fatias de vídeo. A intracodificação conta com uma predição espacial para reduzir ou remover a redundância espacial no vídeo em um dado quadro de vídeo ou imagem. A intercodificação conta com a predição temporal para reduzir ou remover a redundância temporal em vídeo nos quadros ou imagens adjacentes de uma sequência de vídeo. O Intramodo (I modo) pode se referir a qualquer um dentre diversos modos de codificação com base espacial. Os Intermodos, como predição unidirecional (modo P) ou predição bidirecional (modo B), podem se referir a qualquer um dentre os diversos modos de codificação com base temporal.
[0077] No exemplo da Figura 2A, o codificador de vídeo 20 inclui uma pluralidade de componentes funcionais. Os componentes funcionais do codificador de vídeo 20 incluem uma unidade de processamento de predição 100, uma unidade de geração residual 102, uma unidade de processamento de transformada 104, uma unidade de quantização 106, uma unidade de quantização inversa 108, uma unidade de transformada inversa 110, uma unidade de reconstrução 112, uma unidade de filtro 113, um buffer de imagem decodificada 114 e uma unidade de codificação por entropia 116. A unidade de processamento por predição 100 inclui uma unidade de interpredição 121, uma unidade de estimativa de movimento 122, uma unidade de compensação de movimento 124, uma unidade de intrapredição 126 e uma unidade de predição intercamada 128. Em outros exemplos, o codificador de vídeo 20 pode incluir mais, menos ou diferentes componentes funcionais. Ademais, a unidade de estimativa de movimento 122 e a unidade de compensação de movimento 124 podem ser altamente integradas, mas são representadas no exemplo da Figura 2A separadamente para fins de explicação.
[0078] O codificador de vídeo 20 pode receber dados de vídeo. O codificador de vídeo 20 pode receber os dados de vídeo de várias fontes. Por exemplo, o codificador de vídeo 20 pode receber os dados de vídeo da fonte de vídeo 18 (por exemplo, mostrada na Figura 1A ou 1B) ou uma outra fonte. Os dados de vídeo podem representar uma série de imagens. Para codificar os dados de vídeo, o codificador de vídeo 20 pode realizar uma operação de codificação em cada uma das imagens. Como parte da realização da operação de codificação em uma imagem, o codificador de vídeo 20 pode realizar operações de codificação em cada fatia da imagem. Como parte da realização de uma operação de codificação em uma fatia, o codificador de vídeo 20 pode realizar operações de codificação em treeblocks na fatia.
[0079] Como parte da realização de uma operação de codificação em um treeblock, a unidade de processamento de predição 100 pode realizar a partição de quadtree no bloco de vídeo do treeblock para dividir o bloco de vídeo em blocos de vídeo progressivamente menores. Cada um dos blocos de vídeo menores pode ser associado a uma CU diferente. Por exemplo, a unidade de processamento por predição 100 pode dividir um bloco de vídeo de um treeblock em quatro sub- blocos igualmente dimensionados, pode dividir um ou mais dos sub-blocos em quatro sub-sub-blocos igualmente dimensionados, e assim em diante.
[0080] Os tamanhos dos blocos de vídeo associados às CUs podem variar de 8 x 8 amostras até o tamanho do treeblock com um máximo de 64 x 64 amostras ou maior. Nesta revelação, “N x N” e “N por N” pode ser usado intercambiavelmente para se referir às dimensões da amostra de um bloco de vídeo em termos de dimensões vertical e horizontal, por exemplo, amostras de 16 x 16 ou amostras de 16 por 16. Em geral, um bloco de vídeo de 16 x 16 em dezesseis amostras em uma direção vertical (y = 16) e dezesseis amostras em uma direção horizontal (x = 16). Igualmente, um bloco de N x N tem, em gera, N amostras em uma direção vertical e N amostras em uma direção horizontal, em que N representa um valor de número inteiro não negativo.
[0081] Ademais, como parte da realização da operação de codificação em um treeblock, a unidade de processamento de predição 100 pode gerar uma estrutura de dados de quadtree hierárquica para o treeblock. Por exemplo, um treeblock pode corresponder a um nó raiz da estrutura de dados de quadtree. Se a unidade de processamento de predição 100 dividir o bloco de vídeo do treeblock em quatro sub- blocos, o nó raiz tem quatro nós filhos na estrutura de dados de quadtree. Cada um dos nós filhos corresponde a uma CU associada a um dos sub-blocos. Se a unidade de processamento de predição 100 dividir um dos sub-blocos em quatro sub-sub- blocos, o nó que corresponde à CU associada ao sub-bloco pode ter quatro nós filhos, cada um dos quais corresponde a uma CU associada a um dos sub-sub-blocos.
[0082] Cada nó da estrutura de dados de quadtree pode conter dados de sintaxe (por exemplo, elementos de sintaxe) para o treeblock correspondente ou CU. Por exemplo, um nó no quadtree pode incluir um sinalizador de separação que indica se o bloco de vídeo da CU que corresponde ao nó é dividido (por exemplo, separado) em quatro sub-blocos. Os elementos de sintaxe para uma CU podem ser definidos recursivamente, e podem depender da possibilidade de o bloco de vídeo da CU ser separado em sub-blocos. Uma CU cujo bloco de vídeo não é dividido pode corresponder a um nó folha na estrutura de dados de quadtree. Um treeblock criptografado pode incluir dados com base na estrutura de dados de quadtree para um treeblock correspondente.
[0083] O codificador de vídeo 20 pode realizar operações de codificação em cada CU não dividida de um treeblock. Quando o codificador de vídeo 20 realizar uma operação de codificação em uma CU não dividida, o codificador de vídeo 20 gera dados que representam uma representação codificada da CU não dividida.
[0084] Como parte da realização de uma operação de codificação em uma CU, a unidade de processamento de predição 100 pode dividir o bloco de vídeo da CU dentre uma ou mais PUs da CU. O codificador de vídeo 20 e o decodificador de vídeo 30 podem suportar vários tamanhos de PU. Supondo- se que o tamanho de uma CU específica seja 2N x 2N, o codificador de vídeo 20 e o decodificador de vídeo 30 podem suportar os tamanhos de PU de 2Nx2N ou xN, e interpredição em tamanhos simétricos de PU de 2Nx2N, 2NxN, Nx2N, xN, 2NxnU, nLx2N, nRx2N, ou semelhantes. O codificador de vídeo 20 e o decodificador de vídeo 30 também podem suportar a partição simétrica para tamanhos de PU de 2NxnU, 2NxnD, nLx2N e nRx2N. Em alguns exemplos, a unidade de processamento de predição 100 pode realizar a partição geométrica para dividir o bloco de vídeo de uma CU dentre PUs da CU ao longo de um limite que não encontra os lados do bloco de vídeo da CU nos ângulos retos.
[0085] A unidade de interpredição 121 pode realizar a interpredição em cada PU da CU. A interpredição pode fornecer compactação temporal. Para realizar a interpredição em uma PU, a unidade de estimativa de movimento 122 pode gerar informações de movimento para a PU. A unidade de compensação de movimento 124 pode gerar um bloco de vídeo predito para a PU com base nas informações de movimento e amostras decodificadas das imagens além da imagem associada à CU (por exemplo, imagens de referência). Nesta revelação, um bloco de vídeo predito gerado por unidade de compensação de movimento 124 pode ser referido como um interbloco de vídeo predito.
[0086] As fatias podem ser fatias I, fatias P ou fatias B. A unidade de estimativa de movimento 122 e a unidade de compensação de movimento 124 podem realizar diferentes operações para uma PU de uma CU dependendo da possibilidade de a PU estar em uma fatia I, uma fatia P ou uma fatia B. Em uma fatia I, todas as PUs são intrapreditas. Por isso, se a PU estiver em uma fatia I, a unidade de estimativa de movimento 122 e a unidade de compensação de movimento 124 não realizam a interpredição na PU.
[0087] Se a PU estiver em uma fatia P, a imagem que contém a PU é associada a uma lista de imagens de referência referida como “lista 0”. Cada uma das imagens de referência na lista 0 contém amostras que podem ser usadas para a interpredição de outras imagens. Quando a unidade de estimativa de movimento 122 realizar a operação de estimativa de movimento em relação a uma PU em uma fatia P, a unidade de estimativa de movimento 122 pode buscar as imagens de referência na lista 0 para um bloco de referência para a PU. O bloco de referência da PU pode ser um conjunto de amostras, por exemplo, um bloco de amostras, que corresponde mais proximamente às amostras no bloco de vídeo da PU. A unidade de estimativa de movimento 122 pode usar uma variedade de métricas para determinar o quão proximamente um conjunto de amostras em uma imagem de referência corresponde às amostras no bloco de vídeo de uma PU. Por exemplo, a unidade de estimativa de movimento 122 pode determinar o quão proximamente um conjunto de amostras em uma imagem de referência corresponde às amostras no bloco de vídeo de uma PU pela soma da diferença absoluta (SAD), soma da diferença quadrada (SSD), ou outras métricas de diferença.
[0088] Após identificar um bloco de referência de uma PU em uma fatia P, a unidade de estimativa de movimento 122 pode gerar um índice de referência que indica a imagem de referência na lista 0 que contém o bloco de referência e um vetor de movimento que indica um deslocamento espacial entre a PU e o bloco de referência. Em vários exemplos, a unidade de estimativa de movimento 122 pode gerar vetores de movimento para graus variantes de precisão. Por exemplo, a unidade de estimativa de movimento 122 pode gerar vetores de movimento na precisão de um quarto de amostra, precisão de um oitavo de amostra ou outra precisão de amostra fracional. No caso de precisão de amostra fracional, os valores de bloco de referência podem ser interpolados a partir de valores de amostra de posição de número inteiro na imagem de referência. A unidade de estimativa de movimento 122 pode produzir o índice de referência e o vetor de movimento como as informações de movimento da PU. A unidade de compensação de movimento 124 pode gerar um bloco de vídeo predito da PU com base no bloco de referência identificado pelas informações de movimento da PU.
[0089] Se a PU estiver em uma fatia B, a imagem que contém a PU pode estar associada a duas listas de imagens de referência referidas como “lista 0” e “lista 1”. Em alguns exemplos, uma imagem que contém uma fatia B pode estar associada a uma combinação de listas que é uma combinação da lista 0 e da lista 1.
[0090] Ademais, se a PU estiver em uma fatia B, a unidade de estimativa de movimento 122 pode realizar a predição unidirecional ou a predição bidirecional para a PU. Quando a unidade de estimativa de movimento 122 realizar a predição unidirecional para a PU, a unidade de estimativa de movimento 122 pode buscar as imagens de referência da lista 0 ou da lista 1 para um bloco de referência para a PU. A unidade de estimativa de movimento 122 pode, então, gerar um índice de referência que indica a imagem de referência na lista 0 ou lista 1 que contém o bloco de referência e um vetor de movimento que indica um deslocamento espacial entre a PU e o bloco de referência. A unidade de estimativa de movimento 122 pode produzir o índice de referência, um indicador de direção de predição e o vetor de movimento como as informações de movimento da PU. O indicador de direção de predição pode indicar se o índice de referência indica uma imagem de referência na lista 0 ou lista 1. A unidade de compensação de movimento 124 pode gerar o bloco de vídeo predito da PU com base no bloco de referência indicado pelas informações de movimento da PU.
[0091] Quando a unidade de estimativa de movimento 122 realizar a predição bidirecional para uma PU, a unidade de estimativa de movimento 122 pode buscar as imagens de referência na lista 0 para um bloco de referência para a PU e também pode buscar as imagens de referência na lista 1 para um outro bloco de referência para a PU. A unidade de estimativa de movimento 122 pode, então, gerar índices de referência que indicam as imagens de referência na lista 0 e na lista 1 que contêm os blocos de referência e vetores de movimento que indicam deslocamentos espaciais entre o bloco de referência e a PU. A unidade de estimativa de movimento 122 pode produzir os índices de referência e os vetores de movimento da PU como as informações de movimento da PU. A unidade de compensação de movimento 124 pode gerar o bloco de vídeo predito da PU com base nos blocos de referência indicados pelas informações de movimento da PU.
[0092] Em algumas ocasiões, a unidade de estimativa de movimento 122 não emite um conjunto total de informações de movimento para uma PU para a unidade de codificação por entropia 116. Em vez disso, a unidade de estimativa de movimento 122 pode sinalizar as informações de movimento de uma PU com referência às informações de movimento de uma outra PU. Por exemplo, a unidade de estimativa de movimento 122 pode determinar que as informações de movimento da PU são suficientemente semelhantes às informações de movimento de uma PU vizinha. Nesse exemplo, a unidade de estimativa de movimento 122 pode indicar, em uma estrutura de sintaxe associada à PU, um valor que indica para o decodificador de vídeo 30 que a PU tem as mesmas informações de movimento que a PU vizinha. Em um outro exemplo, a unidade de estimativa de movimento 122 pode identificar, em uma estrutura de sintaxe associada à PU, uma PU vizinha e uma diferença de vetor de movimento (MVD). A diferença de vetor de movimento indica uma diferença entre o vetor de movimento da PU e o vetor de movimento da PU vizinha indicada. O decodificador de vídeo 30 pode usar o vetor de movimento da PU vizinha indicada e a diferença de vetor de movimento para determinar o vetor de movimento da PU. Com referência às informações de movimento de uma primeira PU quando sinaliza as informações de movimento de uma segunda PU, o codificador de vídeo 20 pode ter a capacidade de sinalizar as informações de movimento da segunda PU com o uso de menos bits.
[0093] Como parte da realização de uma operação de codificação em uma CU, a unidade de intrapredição 126 pode realizar intrapredição em PUs da CU. A intrapredição pode fornecer compactação espacial. Quando a unidade de intrapredição 126 realizar a intrapredição em uma PU, a unidade de intrapredição 126 pode gerar dados de predição para a PU com base em amostras decodificadas de outras PUs na mesma imagem. Os dados de predição para a PU podem incluir um bloco de vídeo predito e vários elementos de sintaxe. A unidade de intrapredição 126 pode realizar a intrapredição em PUs em fatias I, fatias P e fatias B.
[0094] Para realizar a intrapredição em uma PU, a unidade de intrapredição 126 pode usar múltiplos modos de intrapredição para gerar múltiplos conjuntos de dados de predição para a PU. Quando a unidade de intrapredição 126 usar um modo de intrapredição para gerar um conjunto de dados de predição para a PU, a unidade de intrapredição 126 pode estender as amostras dos blocos de vídeo de PUs vizinhas através do bloco de vídeo da PU em uma direção e/ou gradiente associado ao modo de intrapredição. As PUs vizinhas podem estar acima, acima e para a direita, acima e para a esquerda, ou para a esquerda da PU, supondo-se uma ordem de codificação da esquerda para a direita, de cima para baixo para PUs, CUs e treeblocks. A unidade de intrapredição 126 pode usar inúmeros modos de intrapredição, por exemplo, 33 modos de intrapredição direcionais, dependendo do tamanho da PU.
[0095] A unidade de processamento de predição 100 pode selecionar os dados de predição para uma PU dentre os dados de predição gerados pela unidade de compensação de movimento 124 para a PU ou os dados de predição gerados pela unidade de intrapredição 126 para a PU. Em alguns exemplos, a unidade de processamento de predição 100 seleciona os dados de predição para a PU com base nas taxas/métricas de distorção dos conjuntos de dados de predição.
[0096] Se a unidade de processamento de predição 100 selecionar dados de predição gerados pela unidade de intrapredição 126, a unidade de processamento de predição 100 pode sinalizar o modo de intrapredição que foi usado para gerar os dados de predição para as PUs, por exemplo, o modo de intrapredição selecionado. A unidade de processamento de predição 100 pode sinalizar o modo de intrapredição selecionado de vários modos. Por exemplo, é provável que o modo de intrapredição selecionado seja o mesmo que o modo de intrapredição de uma PU vizinha. Em outras palavras, o modo de intrapredição da PU vizinha pode ser o modo mais provável para a PU atual. Assim, a unidade de processamento de predição 100 pode gerar um elemento de sintaxe para indicar que o modo de intrapredição selecionado é o mesmo que o modo de intrapredição da PU vizinha.
[0097] Conforme discutido acima, o codificador de vídeo 20 pode incluir a unidade de predição intercamada 128. A unidade de predição intercamada 128 é configurada para predizer um bloco atual (por exemplo, um bloco atual na EL) com o uso de uma ou mais camadas diferentes que estão disponíveis em SVC (por exemplo, uma camada base ou de referência). Tal predição pode ser referida como predição intercamada. A unidade de predição intercamada 128 utiliza métodos de predição para reduzir redundância intercamada aperfeiçoando, desse modo, a eficácia de codificação e reduzindo exigências de recurso computacional. Alguns exemplos de predição intercamada incluem intrapredição intercamada, predição de movimento intercamada e predição residual intercamada. A intrapredição intercamada usa a reconstrução de blocos colocalizados na camada base para predizer o bloco atual na camada de intensificação. A predição de movimento intercamada usas informações de movimento da camada base para predizer o movimento na camada de intensificação. A predição residual intercamada usa o resíduo da camada base para predizer o resíduo da camada de intensificação. Cada um dos esquemas de predição intercamada é discutido acima em mais detalhes.
[0098] Após a unidade de processamento de predição 100 selecionar a dados de predição para PUs de uma CU, a unidade de geração residual 102 pode gerar dados residuais para a CU subtraindo-se (por exemplo, indicado pelo sinal de subtração) os blocos de vídeo preditos da PUs da CU do bloco de vídeo da CU. Os dados residuais de uma CU podem incluir 2D blocos de vídeo residuais que correspondem aos diferentes componentes de amostra das amostras no bloco de vídeo da CU. Por exemplo, os dados residuais podem incluir um bloco de vídeo residual que corresponde às diferenças entre componentes de luminância de amostras nos blocos de vídeo preditos das PUs da CU e componentes de luminância de amostras no bloco de vídeo original da CU. Além disso, os dados residuais da CU podem incluir blocos de vídeo residuais que correspondem às diferenças entre componentes de crominância de amostras nos blocos de vídeo preditos da PUs da CU e as componentes de crominância das amostras no bloco de vídeo original da CU.
[0099] A unidade de processamento de predição 100 pode realizar a partição de quadtree para dividir os blocos de vídeo residuais de uma CU em sub-blocos. Cada bloco de vídeo residual não divido pode estar associado a uma TU diferente da CU. Os tamanhos e as posições dos blocos de vídeo residuais associados às TUs de uma CU podem ou não se basear nos tamanhos e nas posições de blocos de vídeo associados às PUs da CU. Uma estrutura de quadtree conhecida como uma “quadtree residual” (QT) pode incluir nós associados a cada um dos blocos de vídeo residuais. As TUs de uma CU podem corresponder aos nós de folha da RQT.
[0100] A unidade de processamento de transformada 104 pode gerar um ou mais blocos de coeficiente de transformada para cada TU de uma CU ao aplicar uma ou mais transformadas a um bloco de vídeo residual associado à TU. Cada um dos blocos de coeficiente de transformada pode ser uma matriz em 2D de coeficientes de transformada. A unidade de processamento de transformada 104 pode aplicar várias transformadas ao bloco de vídeo residual associado a uma TU. Por exemplo, a unidade de processamento de transformada 104 pode aplicar uma transformada de cosseno discreta (DCT), uma transformada direcional ou uma transformada conceitualmente semelhante ao bloco de vídeo residual associado a uma TU.
[0101] Após a unidade de processamento de transformada 104 gerar um bloco de coeficiente de transformada associado a uma TU, a unidade de quantização 106 pode quantizar os coeficientes de transformada no bloco de coeficiente de transformada. A unidade de quantização 106 pode quantizar um bloco de coeficiente de transformada associado a uma TU de uma CU com base em um valor de QP associado à CU.
[0102] O codificador de vídeo 20 pode associar um valor de QP a uma CU de vários modos. Por exemplo, o codificador de vídeo 20 pode realizar uma análise de distorção de taxa em um treeblock associado à CU. Na análise de distorção de taxa, o codificador de vídeo 20 pode gerar múltiplas representações codificadas do treeblock ao realizar uma operação de codificação várias vezes no treeblock. O codificador de vídeo 20 pode associar diferentes valores de QP à CU quando o codificador de vídeo 20 gerar diferentes representações codificadas do treeblock. O codificador de vídeo 20 pode sinalizar que um dado valor de QP está associado à CU quando o dado valor de QP estiver associado à CU em uma representação codificada do treeblock que tem uma mais baixa taxa de bits e métrica de distorção.
[0103] A unidade de quantização inversa 108 e a unidade de transformada inversa 110 podem aplicar a quantização inversa e as transformadas inversas ao bloco de coeficiente de transformada, respectivamente, para reconstruir um bloco de vídeo residual a partir do bloco de coeficiente de transformada. A unidade de reconstrução 112 pode adicionar o bloco de vídeo residual reconstruído às amostras correspondentes a partir de um ou mais blocos de vídeo preditos gerados pela unidade de processamento de predição 100 para produzir um bloco de vídeo reconstruído associado a uma TU. Ao reconstruir blocos de vídeo para cada TU de uma CU desse modo, o codificador de vídeo 20 pode reconstruir o bloco de vídeo da CU.
[0104] Após a unidade de reconstrução 112 reconstruir o bloco de vídeo de uma CU, a unidade de filtro 113 pode realizar uma operação de desbloqueio para reduzir os artefatos de bloqueio no bloco de vídeo associado à CU. Após a realização de uma ou mais operações de desbloqueio, a unidade de filtro 113 pode armazenar o bloco de vídeo reconstruído da CU no buffer de imagem decodificada 114. A unidade de estimativa de movimento 122 e a unidade de compensação de movimento 124 podem usar uma imagem de referência que contém o bloco de vídeo reconstruído para realizar a interpredição em PUs de imagens subsequentes. Além disso, a unidade de intrapredição 126 pode usar os blocos de vídeo reconstruídos no buffer de imagem decodificada 114 para realizar a intrapredição em outras PUs na mesma imagem que a CU.
[0105] A unidade de codificação por entropia 116 pode receber dados dos outros componentes funcionais do codificador de vídeo 20. Por exemplo, a unidade de codificação por entropia 116 pode receber blocos de coeficiente de transformada da unidade de quantização 106 e pode receber elementos de sintaxe da unidade de processamento de predição 100. Quando a unidade de codificação por entropia 116 receber os dados, a unidade de codificação por entropia 116 pode realizar uma ou mais operações de codificação por entropia para gerar dados codificados por entropia. Por exemplo, o codificador de vídeo 20 pode realizar uma operação de codificação de comprimento variável adaptativa a contexto (CAVLC), uma operação de CABAC, uma operação de codificação de comprimento variável para variável (V2V), uma operação de codificação aritmética binária adaptativa a contexto com base em sintaxe (SBAC), uma operação de codificação de Entropia de Partição de Intervalo de Probabilidade (PIPE), ou um outro tipo de operação de codificação por entropia nos dados. A unidade de codificação por entropia 116 por produzir um fluxo de bits que inclui os dados codificados por entropia.
[0106] Como parte da realização de uma operação de codificação por entropia nos dados, a unidade de codificação por entropia 116 pode selecionar um modelo de contexto. Se a unidade de codificação por entropia 116 estiver realizando uma operação de CABAC, o modelo de contexto pode indicar estimativas de probabilidades de bins específicos que têm valores específicos. No contexto de CABAC, o termo “bin” é usado para se referir a um bit de uma versão binarizada de um elemento de sintaxe.
CODIFICADOR DE VÍDEO MULTICAMADA
[0107] A Figura 2B é um diagrama de blocos que ilustra um exemplo de um codificador de vídeo multicamada 23 que pode implantar técnicas de acordo com os aspectos descritos nesta revelação. O codificador de vídeo 23 pode ser configurado para processar quadros de vídeo multicamada, como para a codificação SHVC e multivista. Adicionalmente, o codificador de vídeo 23 pode ser configurado para realizar qualquer uma ou todas as técnicas desta revelação.
[0108] O codificador de vídeo 23 inclui um codificador de vídeo 20A e codificador de vídeo 20B, cada um dos quais pode ser configurado como o codificador de vídeo 20 e pode realizar as funções descritas acima em relação ao codificador de vídeo 20. Ademais, conforme indicado pela reutilização de referências numéricas, os codificadores de vídeo 20A e 20B podem incluir pelo menos alguns dentre os sistemas e subsistemas que o codificador de vídeo 20. Muito embora o codificador de vídeo 23 seja ilustrado como incluindo dois codificadores de vídeo 20A e 20B, o codificador de vídeo 23 não se limita a isso e pode incluir qualquer número de camadas de codificador de vídeo 20. Em algumas modalidades, o codificador de vídeo 23 pode incluir um codificador de vídeo 20 para cada imagem ou quadro em uma unidade de acesso. Por exemplo, uma unidade de acesso que inclui cinco imagens pode ser processada e codificada por um codificador de vídeo que inclui cinco camadas de codificador. Em algumas modalidades, o codificador de vídeo 23 pode incluir mais camadas de codificador que quadros em uma unidade de acesso. Em alguns casos desses, algumas dentre as camadas de codificador de vídeo podem estar inativas quando se processa algumas unidades de acesso.
[0109] Além dos codificadores de vídeo 20A e 20B, o codificador de vídeo 23 pode incluir uma unidade de reamostragem 90. A unidade de reamostragem 90 pode, em alguns casos, aumentar a resolução da camada base de um quadro de vídeo recebido para, por exemplo, criar uma camada de intensificação. A unidade de reamostragem 90 pode aumentar a resolução de informações específicas associadas à camada base recebida de um quadro, mas não de outras informações. Por exemplo, a unidade de reamostragem 90 pode aumentar a resolução do tamanho espacial ou do número de pixels da camada base, mas o número de fatias ou a contagem de ordem de imagem pode permanecer constante. Em alguns casos, a unidade de reamostragem 90 pode não processar o vídeo recebido e/ou pode ser opcional. Por exemplo, em alguns casos, a unidade de processamento de predição 100 pode realizar o aumento de resolução. Em algumas modalidades, a unidade de reamostragem 90 é configurada para aumentar a resolução de uma camada e reorganizar, redefinir, modificar ou ajustar uma ou mais fatias para se adequar a um conjunto de regras de limite de fatia e/ou regras de varredura. Muito embora seja principalmente descrito como aumento de resolução de uma camada base, ou uma camada inferior em uma unidade de acesso, em alguns casos, a unidade de reamostragem 90 pode diminuir a resolução de uma camada. Por exemplo, se durante o fluxo de um vídeo a largura de banda for reduzida, um quadro pode ter a resolução diminuída em vez de ter a resolução aumentada.
[0110] A unidade de reamostragem 90 pode ser configurada para receber uma imagem ou quadro (ou informações de imagem associadas à imagem) do buffer de imagem decodificada 114 do codificador de camada inferior (por exemplo, o codificador de vídeo 20A) e para aumentar a resolução da imagem (ou as informações de imagem recebidas). Essa imagem com resolução aumentada pode, então, ser fornecida para a unidade de processamento de predição 100 de um codificador de camada superior (por exemplo, o codificador de vídeo 20B) configurado para codificar uma imagem na mesma unidade de acesso que o codificador de camada inferior. Em alguns casos, o codificador de camada superior é uma camada removida do codificador de camada inferior. Em outros casos, pode haver um ou mais codificadores de camada superior entre o codificador de vídeo de camada 0 e o codificador de camada 1 da Figura 2B.
[0111] Em alguns casos, a unidade de reamostragem 90 pode ser omitida ou desviada. Em tais casos, a imagem do buffer de imagem decodificada 114 do codificador de vídeo 20A pode ser fornecido diretamente, ou pelo menos sem ser fornecido para a unidade de reamostragem 90, para a unidade de processamento de predição 100 do codificador de vídeo 20B. Por exemplo, se os dados de vídeo fornecidos para o codificador de vídeo 20B e a imagem de referência do buffer de imagem decodificada 114 do codificador de vídeo 20A tiverem o mesmo tamanho ou resolução, a imagem de referência pode ser fornecida para o codificador de vídeo 20B sem qualquer reamostragem.
[0112] Em algumas modalidades, o codificador de vídeo 23 diminui a resolução de dados de vídeo a serem fornecidos para o codificador de camada inferior com o uso da unidade de diminuição de resolução 94 antes de fornecer os dados de vídeo para o codificador de vídeo 20A. Alternativamente, a unidade de diminuição de resolução 94 pode ser uma unidade de reamostragem 90 com capacidade de aumento de resolução ou de diminuição de resolução dos dados de vídeo. Em ainda outras modalidades, a unidade de diminuição de resolução 94 pode ser omitida.
[0113] Conforme ilustrado na Figura 2B, o codificador de vídeo 23 pode incluir adicionalmente um multiplexador 98, ou mux. O mux 98 pode produzir um fluxo de bits combinado a partir do codificador de vídeo 23. O fluxo de bits combinado pode ser criado pegando-se um fluxo de bits de cada um dos codificadores de vídeo 20A e 20B e alternando o fluxo de bits que é produzido em um dado tempo. Embora em alguns casos os bits de dois (ou mais, no caso de mais de duas camadas de codificador de vídeo) fluxos de bits podem ser alternados um bit de cada vez, em muitos casos os fluxos de bits são combinados de modo diferente. Por exemplo, o fluxo de bits emitido pode ser criado alternando-se o fluxo de bits selecionado um bloco de cada vez. Em um outro exemplo, o fluxo de bits de saída pode ser criado produzindo- se uma razão de blocos de não 1:1 a partir de cada um dos codificadores de vídeo 20A e 20B. Por exemplo, dois blocos podem ser emitidos do codificador de vídeo 20B para cada bloco emitido do codificador de vídeo 20A. Em algumas modalidades, o fluxo de saída do mux 98 pode ser pré- programado. Em outras modalidades, o mux 98 pode combinar os fluxos de bits a partir dos codificadores de vídeo 20A, 20B com base em um sinal de controle recebido de um sistema externo ao codificador de vídeo 23, como de um processador em um dispositivo de fonte que inclui o módulo de origem 12. O sinal de controle pode ser gerado com base na resolução ou na taxa de bits de um vídeo da fonte de vídeo 18, com base em uma largura de banda do enlace 16, com base em uma assinatura associada a um usuário (por exemplo, uma assinatura paga contra uma assinatura grátis), ou com base em qualquer outro fator para determinar uma resolução emitida desejada a partir do codificador de vídeo 23.
DECODIFICADO DE VÍDEO
[0114] A Figura 3 A é um diagrama de blocos que ilustra um exemplo de um decodificador de vídeo que pode implantar técnicas de acordo com os aspectos descritos nesta revelação. O decodificador de vídeo 30 pode ser configurado para processar uma única camada de um quadro de vídeo, como para HEVC. Adicionalmente, o decodificador de vídeo 30 pode ser configurado para realizar qualquer uma ou todas as técnicas desta revelação. Como um exemplo, a unidade de compensação de movimento 162 e/ou a unidade de intrapredição 164 podem ser configuradas para realizar qualquer uma ou todas as técnicas descritas nesta revelação. Em uma modalidade, o decodificador de vídeo 30 pode incluir opcionalmente uma unidade de predição intercamada 166 que é configurada para realizar qualquer uma ou todas as técnicas descritas nesta revelação. Em outras modalidades, a predição intercamada pode ser realizada pela unidade de processamento de predição 152 (por exemplo, unidade de compensação de movimento 162 e/ou unidade de intrapredição 164), em cujo caso a unidade de predição intercamada 166 pode ser omitida. No entanto, os aspectos desta revelação não são limitantes. Em alguns exemplos, as técnicas descritas nesta revelação podem ser compartilhadas dentre os vários componentes do decodificador de vídeo 30. Em alguns exemplos, adicional ou alternativamente, um processador (não mostrado) pode ser configurado para realizar qualquer uma ou todas as técnicas descritas nesta revelação.
[0115] Para fins de explicação, esta revelação descreve o decodificador de vídeo 30 no contexto de codificação HEVC. No entanto, as técnicas desta revelação podem ser aplicáveis aos outros padrões ou métodos de codificação. O exemplo retratado na Figura 3A é para um codec de única camada. No entanto, conforme será descrito adicionalmente em relação à Figura 3B, alguns ou todos dentre os decodificadores de vídeo 30 podem ser duplicados para o processamento de um codec multicamada.
[0116] No exemplo da Figura 3A, o decodificador de vídeo 30 inclui uma pluralidade de componentes funcionais. Os componentes funcionais do decodificador de vídeo 30 incluem uma unidade de decodificação por entropia 150, uma unidade de processamento de predição 152, uma unidade de quantização inversa 154, uma unidade de transformada inversa 156, uma unidade de reconstrução 158, uma unidade de filtro 159 e um buffer de imagem decodificada 160. A unidade de processamento por predição 152 inclui uma unidade de compensação de movimento 162, uma unidade de intrapredição 164 e uma unidade de predição intercamada 166. Em alguns exemplos, o decodificador de vídeo 30 pode realizar uma passagem de decodificação em geral recíproca à passagem de codificação descrita em relação ao codificador de vídeo 20 da Figura 2A. Em outros exemplos, o decodificador de vídeo 30 pode incluir mais, menos ou diferentes componentes funcionais.
[0117] O decodificador de vídeo 30 pode receber um fluxo de bits que compreende dados de vídeo codificados. O fluxo de bits pode incluir uma pluralidade de elementos de sintaxe. Quando o decodificador de vídeo 30 receber o fluxo de bits, a unidade de decodificação por entropia 150 pode realizar uma operação de análise no fluxo de bits. Como resultado da realização da operação de análise no fluxo de bits, a unidade de decodificação por entropia 150 pode extrair elementos de sintaxe do fluxo de bits. Como parte da realização da operação de análise, a unidade de decodificação por entropia 150 pode decodificar por entropia os elementos de sintaxe codificados por entropia no fluxo de bits. A unidade de processamento de predição 152, a unidade de quantização inversa 154, a unidade de transformada inversa 156, a unidade de reconstrução 158 e a unidade de filtro 159 podem realizar uma operação de reconstrução que gera dados de vídeo decodificados com base nos elementos de sintaxe extraídos do fluxo de bits.
[0118] Conforme discutido acima, o fluxo de bits pode compreender uma série de unidades de NAL. As unidades de NAL do fluxo de bits podem incluir unidades de NAL de conjunto de parâmetros de vídeo, unidades de NAL de conjunto de parâmetros de sequência, unidades de NAL de conjunto de parâmetros de imagem, unidades de NAL de SEI, e assim em diante. Como parte da realização da operação de análise no fluxo de bits, a unidade de decodificação por entropia 150 pode realizar operações de análise que extraem e decodificam por entropia conjuntos de parâmetros de sequência das unidades de NAL de conjunto de parâmetros de sequência, conjuntos de parâmetros de imagem das unidades de NAL de conjunto de parâmetros de imagem, dados de SEI das unidades de NAL de SEI, e assim em diante.
[0119] Além disso, as unidades de NAL do fluxo de bits podem incluir unidades de NAL de fatia codificada. Como parte de realização da operação de análise no fluxo de bits, a unidade de decodificação de entropia 150 pode realizar operações de análise que extraem e decodificam por entropia fatias codificadas das unidades de NAL de fatia codificada. Cada uma das fatias codificadas pode incluir um cabeçalho de fatia e dados de fatia. O cabeçalho de fatia pode conter elementos de sintaxe que pertencem a uma fatia. Os elementos de sintaxe no cabeçalho de fatia podem incluir um elemento de sintaxe que identifica um conjunto de parâmetros de imagem associado a uma imagem que contém a fatia. A unidade de decodificação por entropia 150 pode realizar operações de decodificação por entropia, como operações de decodificação CABAC, em elementos de sintaxe no cabeçalho de fatia codificada para recuperar o cabeçalho de fatia.
[0120] Como parte da extração dos dados de fatia das unidades de NAL de fatia codificada, a unidade de decodificação por entropia 150 pode realizar operações de análise que extraem elementos de sintaxe das CUs codificadas nos dados de fatia. Os elementos de sintaxe extraídos podem incluir elementos de sintaxe associados a blocos de coeficiente de transformada. A unidade de decodificação por entropia 150 pode, então, realizar operações de decodificação CABAC em alguns dos elementos de sintaxe.
[0121] Após a unidade de decodificação por entropia 150 realizar uma operação de análise em uma CU não dividida, o decodificador de vídeo 30 pode realizar uma operação de reconstrução na CU não dividida. Para realizar a operação de reconstrução em uma CU não dividida, o decodificador de vídeo 30 pode realizar uma operação de reconstrução em cada TU da CU. Ao realizar a operação de reconstrução para cada TU da CU, o decodificador de vídeo 30 pode reconstruir um bloco de vídeo residual associado à CU.
[0122] Como parte da realização de uma operação de reconstrução em uma TU, a unidade de quantização inversa 154 pode inverter a quantização, por exemplo, desquantizar, de um bloco de coeficiente de transformada associado à TU. A unidade de quantização inversa 154 pode quantizar inversamente o bloco de coeficiente de transformada de uma maneira semelhante aos processos de quantização inversa propostos para a HEVC ou definidos pelo padrão de decodificação H.264. A unidade de quantização inversa 154 pode usar um parâmetro de quantização QP calculado pelo codificador de vídeo 20 para uma CU do bloco de coeficiente de transformada para determinar um grau de quantização e, igualmente, um grau de quantização inversa para a unidade de quantização inversa 154 aplicar.
[0123] Após a unidade de quantização inversa 154 quantizar inversamente um bloco de coeficiente de transformada, a unidade de transformada inversa 156 pode gerar um bloco de vídeo residual para a TU associada ao bloco de coeficiente de transformada. A unidade de transformada inversa 156 pode aplicar uma transformada inversa ao bloco de coeficiente de transformada a fim de gerar o bloco de vídeo residual para a TU. Por exemplo, a unidade de transformada inversa 156 pode aplicar uma DCT inversa, uma transformada de número inteiro inversa, uma transformada de Karhunen-Loeve inversa (KLT), uma transformada rotacional inversa, uma transformada direcional inversa ou uma outra transformada inversa ao bloco de coeficiente de transformada. Em alguns exemplos, a unidade de transformada inversa 156 pode determinar uma transformada inversa para aplicar ao bloco de coeficiente de transformada com base na sinalização do codificador de vídeo 20. Em tais exemplos, a unidade de transformada inversa 156 pode determinar a transformada inversa com base em uma transformada sinalizada no nó raiz de um quadtree para um treeblock associado ao bloco de coeficiente de transformada. Em outros exemplos, a unidade de transformada inversa 156 pode inferir a transformada inversa a partir de uma ou mais características de codificação, como tamanho de bloco, modo de codificação, ou semelhantes. Em alguns exemplos, a unidade de transformada inversa 156 pode aplicar uma transformada inversa em cascata.
[0124] Em alguns exemplos, a unidade de compensação de movimento 162 pode refinar o bloco de vídeo predito de uma PU ao realizar a interpolação com base nos filtros de interpolação. Os identificadores para filtros de interpolação a serem usados para a compensação de movimento com precisão de subamostra podem estar incluídos nos elementos de sintaxe. A unidade de compensação de movimento 162 pode usar os mesmos filtros de interpolação usados pelo codificador de vídeo 20 durante a geração do bloco de vídeo predito da PU para calcular os valores de interpolação para amostras subinteiros de um bloco de referência. A unidade de compensação de movimento 162 pode determinar os filtros de interpolação usados pelo codificador de vídeo 20 de acordo com as informações de sintaxe recebidas e o uso dos filtros de interpolação para produzir o bloco de vídeo predito.
[0125] Se uma PU for codificada com o uso de intrapredição, a unidade de intrapredição 164 pode realizar a intrapredição para gerar um bloco de vídeo predito para a PU. Por exemplo, a unidade de intrapredição 164 pode determinar um modo de intrapredição para a PU com base nos elementos de sintaxe no fluxo de bits. O fluxo de bits pode incluir elementos de sintaxe que a unidade de intrapredição 164 pode usar para determinar o modo de intrapredição da PU.
[0126] Em algumas ocasiões, os elementos de sintaxe podem indicar que a unidade de intrapredição 164 deve usar o modo de intrapredição de uma outra PU para determinar o modo de intrapredição da PU atual. Por exemplo, pode ser provável que o modo de intrapredição da PU atual seja o mesmo que o modo de intrapredição de uma PU vizinha. Em outras palavras, o modo de intrapredição da PU vizinha pode ser o modo mais provável para a PU atual. Por isso, nesse exemplo, o fluxo de bits pode incluir um pequeno elemento de sintaxe que indica que o modo de intrapredição da PU é o mesmo que o modo de intrapredição da PU vizinha. A unidade de intrapredição 164 pode, então, usar o modo de intrapredição para gerar dados de predição (por exemplo, amostras preditas) para uma PU com base nos blocos de vídeo de PUs espacialmente vizinhas.
[0127] Conforme discutido acima, o decodificador de vídeo 30 também pode incluir a unidade de predição intercamada 166. A unidade de predição intercamada 166 é configurada para predizer um bloco atual (por exemplo, um bloco atual na EL) com o uso de uma ou mais camadas diferentes que estão disponíveis em SVC (por exemplo, uma camada base ou de referência). Tal predição pode ser referida como predição intercamada. A unidade de predição intercamada 166 utiliza métodos de predição para reduzir redundância intercamada aperfeiçoando, desse modo, a eficácia de codificação e reduzindo exigências de recurso computacional. Alguns exemplos de predição intercamada incluem intrapredição intercamada, predição de movimento intercamada e predição residual intercamada. A intrapredição intercamada usa a reconstrução de blocos colocalizados na camada base para predizer o bloco atual na camada de intensificação. A predição de movimento intercamada usas informações de movimento da camada base para predizer o movimento na camada de intensificação. A predição residual intercamada usa o resíduo da camada base para predizer o resíduo da camada de intensificação. Cada um dos esquemas de predição intercamada é discutido acima em mais detalhes.
[0128] A unidade de reconstrução 158 pode usar os blocos de vídeo residuais associados às TUs de uma CU e os blocos de vídeo preditos da PUs da CU, por exemplo, dados de intrapredição ou dados de interpredição, caso se aplique, para reconstruir o bloco de vídeo da CU. Assim, o decodificador de vídeo 30 pode gerar um bloco de vídeo predito e um bloco de vídeo residual com base nos elementos de sintaxe no fluxo de bits e pode gerar um bloco de vídeo com base no bloco de vídeo predito e no bloco de vídeo residual.
[0129] Após a unidade de reconstrução 158 reconstruir o bloco de vídeo da CU, a unidade de filtro 159 pode realizar uma operação de desbloqueio para reduzir os artefatos de bloqueio associados à CU. Após a unidade de filtro 159 realizar uma operação de desbloqueio para reduzir artefatos de bloqueio associados à CU, o decodificador de vídeo 30 pode armazenar o bloco de vídeo da CU no buffer de imagem decodificada 160. A buffer de imagem decodificada 160 pode fornecer imagens de referência para a compensação de movimento subsequente, intrapredição, e apresentação em um dispositivo de exibição, como dispositivo de exibição 32 da Figura 1A ou 1B. Por exemplo, o decodificador de vídeo 30 pode realizar, com base nos blocos de vídeo no buffer de imagem decodificada 160, as operações de intrapredição ou interpredição em PUs de outras CUs.
DECODIFICADOR DE MULTICAMADA
[0130] A Figura 3B é um diagrama de blocos que ilustra um exemplo de um decodificador de vídeo multicamada 33 que pode implantar técnicas de acordo com os aspectos descritos nesta revelação. O decodificador de vídeo 33 pode ser configurado para processar quadros de vídeo multicamada, como para a codificação SHVC e multivista. Adicionalmente, o decodificador de vídeo 33 pode ser configurado para realizar qualquer uma ou todas as técnicas desta revelação.
[0131] O decodificador de vídeo 33 inclui um decodificador de vídeo 30A e decodificador de vídeo 30B, cada um dos quais pode ser configurado como o decodificador de vídeo 30 e pode realizar as funções descritas acima em relação ao decodificador de vídeo 30. Ademais, conforme indicado pela reutilização de referências numéricas, os decodificadores de vídeo 30A e 30B podem incluir pelo menos alguns dentre os sistemas e subsistemas que o decodificador de vídeo 30. Muito embora o decodificador de vídeo 33 seja ilustrado como incluindo dois decodificadores de vídeo 30A e 30B, o decodificador de vídeo 33 não se limita a isso e pode incluir qualquer número de camadas de decodificador de vídeo 30. Em algumas modalidades, o decodificador de vídeo 33 pode incluir um decodificador de vídeo 30 para cada imagem ou quadro em uma unidade de acesso. Por exemplo, uma unidade de acesso que inclui cinco imagens pode ser processada ou decodificada por um decodificador de vídeo que inclui cinco camadas de decodificador. Em algumas modalidades, o decodificador de vídeo 33 pode incluir mais camadas de decodificador que quadros em uma unidade de acesso. Em alguns casos desses, algumas dentre as camadas de decodificador de vídeo podem estar inativas quando se processa algumas unidades de acesso.
[0132] Além dos decodificadores de vídeo 30A e 30B, o decodificador de vídeo 33 pode incluir uma unidade de aumento de resolução 92. Em algumas modalidades, a unidade de aumento de resolução 92 pode aumentar a resolução de uma camada base de um quadro de vídeo recebido para criar uma camada intensificada a ser adicionada à lista de imagem de referência para o quadro ou a unidade de acesso. Essa camada intensificada pode ser armazenada no buffer de imagem decodificada 160. Em algumas modalidades, a unidade de aumento de resolução 92 pode incluir algumas ou todas as modalidades descritas em relação à unidade de reamostragem 90 da Figura 2A. Em algumas modalidades, a unidade de aumento de resolução 92 é configurada para aumentar a resolução de uma camada e reorganizar, redefinir, modificar ou ajustar uma ou mais fatias para se adequar a um conjunto de regras de limite de fatia e/ou regras de varredura. Em alguns casos, a unidade de aumento de resolução 92 pode ser uma unidade de reamostragem configurada para aumentar a resolução e/ou diminuir a resolução de uma camada de um quadro de vídeo recebido.
[0133] A unidade de aumento de resolução 92 pode ser configurada para receber uma imagem ou quadro (ou informações de imagem associadas à imagem) do buffer de imagem decodificada 160 do decodificador de camada inferior (por exemplo, o decodificador de vídeo 30A) e para aumentar a resolução da imagem (ou as informações de imagem recebidas). Essa imagem com resolução aumentada pode, então, ser fornecida para a unidade de processamento de predição 152 de um decodificador de camada superior (por exemplo, o decodificador de vídeo 30B) configurado para decodificar uma imagem na mesma unidade de acesso que o decodificador de camada inferior. Em alguns casos, o decodificador de camada superior é uma camada removida do decodificador de camada inferior. Em outros casos, pode haver um ou mais decodificadores de camada superior entre o decodificador de vídeo de camada 0 e o decodificador de camada 1 da Figura 3B.
[0134] Em alguns casos, a unidade de aumento de resolução 92 pode ser omitida ou desviada. Em tais casos, a imagem do buffer de imagem decodificada 160 do decodificador de vídeo 30A pode ser fornecido diretamente, ou pelo menos sem ser fornecido para a unidade de aumento de resolução 92, para a unidade de processamento de predição 152 do decodificador de vídeo 30B. Por exemplo, se os dados de vídeo fornecidos para o decodificador de vídeo 30B e a imagem de referência do buffer de imagem decodificada 160 do decodificador de vídeo 30A tiverem o mesmo tamanho ou resolução, a imagem de referência pode ser fornecida para o decodificador de vídeo 30B sem aumento de resolução. Ademais, em algumas modalidades, a unidade de aumento de resolução 92 pode ser uma unidade de reamostragem 90 configurada para aumentar a resolução ou diminuir a resolução de uma imagem de referência recebida do buffer de imagem decodificada 160 do decodificador de vídeo 30A.
[0135] Conforme ilustrado na Figura 3B, o decodificador de vídeo 33 pode incluir adicionalmente um demultiplexador 99, ou demux. O demux 99 pode separar um fluxo de bits de vídeo codificado em múltiplos fluxos de bits com cada fluxo de bits produzido pelo demux 99 que é fornecido para um decodificador de vídeo 30A e 30B diferente. Os múltiplos fluxos de bits podem ser criados ao receber um fluxo de bits e cada um dos decodificadores de vídeo 30A e 30B recebe uma porção do fluxo de bits em um dado tempo. Muito embora em alguns casos os bits do fluxo de bits recebido no demux 99 possam ser alternados, um bit por vez, entre cada um dos decodificadores de vídeo (por exemplo, decodificadores de vídeo 30A e 30B no exemplo da Figura 3B), em muitos casos, o fluxo de bits é dividido de modo diferente. Por exemplo, o fluxo de bits pode ser dividido alternando-se qual decodificador de vídeo recebe o fluxo de bits, um bloco por vez. Em um outro exemplo, o fluxo de bits pode ser dividido por uma razão de não 1:1 de blocos para cada um dos decodificadores de vídeo 30A e 30B. Por exemplo, dois blocos podem ser fornecidos para o decodificador de vídeo 30B para cada bloco fornecido para o decodificador de vídeo 30A. Em algumas modalidades, a divisão do fluxo de bits pelo demux 99 pode ser pré-programada. Em outras modalidades, o demux 99 pode dividir os fluxos de bits com base em um sinal de controle recebido de um sistema externo ao decodificador de vídeo 33, como de um processador em um dispositivo de destino que inclui o módulo de destino 14. O sinal de controle pode ser gerado com base na resolução ou na taxa de bits de um vídeo da interface de entrada 28, com base em uma largura de banda do enlace 16, com base em uma assinatura associada a um usuário (por exemplo, uma assinatura paga contra uma assinatura grátis), ou com base em qualquer outro fator para determinar uma resolução que pode ser obtida pelo decodificador de vídeo 33.
IMAGENS DE INTRAPONTO DE ACESSO ALEATÓRIO (IRAP)
[0136] Alguns esquemas de codificação de vídeo podem fornecer vários pontos de acesso aleatório ao longo do fluxo de bits de modo que o fluxo de bits possa ser decodificado começando de qualquer um desses pontos de acesso aleatório sem precisar decodificar quaisquer imagens que precedam esses pontos de acesso aleatório no fluxo de bits. Em tais esquemas de codificação de vídeo, todas as imagens que seguem um ponto de acesso aleatório na ordem de saída (por exemplo, inclusive aquelas imagens que estão na mesma unidade de acesso que a imagem que fornece os pontos de acesso aleatório) podem ser corretamente decodificadas sem usar quaisquer imagens que precedam o ponto de acesso aleatório. Por exemplo, mesmo se uma porção do fluxo de bits for perdida durante a transmissão ou durante a decodificação, um decodificador pode continuar a decodificar o fluxo de bits começando do próximo ponto de acesso aleatório. O suporte para o acesso aleatório pode facilitar, por exemplo, serviços de fluxo dinâmico, operações de busca, comutação de canal, etc.
[0137] Em alguns esquemas de codificação, tais pontos de acesso aleatório podem ser fornecidos pelas imagens que são referidas como imagens intraponto de acesso aleatório (IRAP). Por exemplo, um ponto de acesso aleatório (por exemplo, fornecido por uma imagem de IRAP de camada de intensificação) em uma camada de intensificação (“layerA”) contida em uma unidade de acesso (“auA”) pode fornecer acesso aleatório específico a camada de modo que para cada camada de referência (“layerB”) da layerA (por exemplo, uma camada de referência que é uma camada que é usada para predizer a layerA) que tem um ponto de acesso aleatório contido em uma unidade de acesso (“auB”) que está na layerB e precede a auA na ordem de decodificação (ou um ponto de acesso aleatório contido na auA), as imagens na layerA que seguem auB na ordem de saída (inclusive aqueles imagens localizadas em auB), são corretamente decodificáveis para decodificar quaisquer imagens em layerA que preceda auB.
[0138] As imagens FRAP podem ser codificadas com o uso de intrapredição (por exemplo, codificadas sem se referir a outras imagens) e/ou predição intercamada, e podem incluir, por exemplo, imagens de atualização de decodificar instantânea (IDR), imagens de acesso aleatório liberado (CRA) e imagens de acesso aleatório desfeito (BLA). Quando houver uma imagem de IDR no fluxo de bits, todas as imagens que precedem a imagem de IDR na ordem de decodificação não são usadas para a predição pelas imagens que seguem a imagem de IDR. Quando houver uma imagem de CRA no fluxo de bits, as imagens que seguem a imagem de CRA podem ou não usar imagens que precedem a imagem de CRA na ordem de decodificação for predição. Essas imagens que seguem a imagem de CRA na ordem de decodificação, mas usam as imagens que precedem a imagem de CRA na ordem de decodificação podem ser referidas como imagens principais ignoradas por acesso aleatório (RASL). Um outro tipo de imagem que pode seguir uma imagem de IRAP na ordem de decodificação e preceder a mesma na ordem de saída é uma imagem principal decodificável por acesso aleatório (RADL), que pode não conter referências à imagens que precedam a imagem de IRAP na ordem de decodificação. As imagens de RASL podem ser descartadas pelo decodificador se as imagens que precedem a imagem de CRA não estiverem disponíveis. Uma imagem de BLA indica ao decodificador que as imagens que precedem a imagem de BLA podem não estar disponíveis para o decodificador (por exemplo, devido ao fato de que dois fluxos de bits são unidos e a imagem de BLA é a primeira imagem do segundo fluxo de bits na ordem de decodificação). Uma unidade de acesso (por exemplo, um grupo de imagens que consiste em todas as imagens codificadas associadas ao mesmo tempo de saída através de múltiplas camadas) que contém uma imagem de camada base (por exemplo, que tem uma ID de camada de 0) que é uma imagem de IRAP pode ser referida como uma unidade de acesso de IRAP. A ID de camada de uma camada, como a camada base, pode estar contida em um valor de nuh_layer_id. Em alguns aspectos, a camada base pode ter uma ID de camada de 0.
SINALIZADOR DE DEPENDÊNCIA DIRETA
[0139] Em algumas implantações exemplificativas (por exemplo, MV-HEVC e SHVC), há um elemento de sintaxe chamado direct_dependency_flag que especifica, para uma camada específica, qual camada ou quais camadas podem ser usadas para a predição intercamada da camada específica. Em uma modalidade, a direct_dependency_flag é uma matriz bidirecional que especifica se uma camada de dados de vídeo é codificada com base em (ou é dependente de) uma outra camada de dados de vídeo. Tal matriz bidirecional pode assumir uma forma de valores de direct_dependency_flag[i][j], em que i corresponde à camada a ser codificada (por exemplo, camada atual) e j corresponde à camada a ser referenciada (por exemplo, camada de referência). Nesse exemplo, direct_dependency_flag pode ser 0 se a camada de referência não for uma camada de referência direta da camada atual, e direct_dependency_flag pode ser 1 se a camada de referência for uma camada de referência direta da camada atual. Em uma modalidade, se direct_dependency_flag for omitida ou indefinida, o valor é inferido para ser 0. Em uma outra modalidade, se direct_dependency_flag for omitida ou indefinida, o valor é inferido para ser 1. Em uma modalidade, se a Camada A for uma camada de referência direta da Camada B, isso significa que a Camada B pode ser codificada com base pelo menos em parte nas informações incluídas e Camada A. Em uma outra modalidade, se a Camada A for uma camada de referência direta da Camada B, isso significa que a Camada B é codificada com base pelo menos em parte em informações incluídas na Camada A. Em algumas modalidades, todas as camadas que têm uma ID de camada menor (por exemplo, camada inferior) são camadas de referência direta de uma camada específica. Em outras modalidades, apenas algumas das camadas inferiores podem ser camadas de referência direta de uma camada específica. Por exemplo, o codificador pode escolher apenas algumas das camadas inferiores como camadas de dependência direta de uma camada específica para reduzir a complexidade computacional. O esquema de codificação aplicável (por exemplo, HEVC) pode ter um limite quanto a quantas camadas de referência direta uma camada específica pode ter (por exemplo, não mais que uma camada de referência para escalabilidade espacial). Em uma modalidade, o direct_dependency_flag é sinalizado no conjunto de parâmetros de vídeo (VPS) e se aplica a toda a sequência de vídeo codificada (CVS).
TIPO DE DEPENDÊNCIA DIRETA
[0140] As informações que são usadas para criptografar a camada atual podem incluir informações de textura (por exemplo, valores de pixel) da camada de referência, informações de movimento (por exemplo, vetores de movimento, índices de referência, direção de predição, etc.) da camada de referência. No entanto, as informações da camada de referência que podem ser usadas para criptografar a camada atual não se limitam àquelas discutidas no presente documento, mas podem ser quaisquer informações que estejam incluídas na camada de referência ou façam parte da mesma.
[0141] Em algumas implantações, um ou mais sinalizadores adicionais ou elementos de sintaxe podem ser usados para indicar o tipo de informações que são derivados ou importados da camada de referência para criptografar a camada atual. Por exemplo, em algumas modalidades, a camada de referência pode ser usada para a predição de movimento intercamada, predição de textura intercamada, ou ambos. Em uma modalidade, tal sinalizador ou elemento de sintaxe pode ser chamado de “direct_dependency_type”.
[0142] Em uma modalidade, o direct_dependency_type é uma matriz bidirecional que especifica qual tipo de predição intercamada é usada para a codificação da camada atual com o uso da camada de referência. Tal matriz bidirecional pode assumir uma forma de valores direct_dependency_type[i][j], em que i corresponde à camada atual (por exemplo, camada a ser codificada) e j corresponde à camada de referência (por exemplo, camada a ser referenciada). Nesse exemplo, um valor de direct_dependency_type de 0 pode indicar a predição de amostra intercamada apenas, 1 pode indicar a predição de movimento intercamada apenas, e 2 pode indicar tanto a predição de amostra quanto de movimento intercamada. Em algumas modalidades, um valor de direct_dependency_type de 3 (ou qualquer outro valor) pode indicar que não há dependência. Como cada valor de direct_dependency_type é atribuído ou mapeado para diferentes tipos de predição intercamada pode ser diferente em outras implantações, e a presente revelação não se limita a qualquer atribuição ou mapeamento específico dos valores de direct_dependency_type para diferentes tipos de predição intercamada. Em uma modalidade, o elemento de sintaxe direct_dependency_flag é sinalizado no conjunto de parâmetros de vídeo (VPS) e se aplica a toda a sequência de vídeo codificada (CVS).
CODEC DE CAMADA DE REFERÊNCIA
[0143] Em alguns esquemas de codificação existentes, um codec de camada de referência ou base pode ter qualquer número de codecs. Por exemplo, um codec de HEVC pode ser usado para a camada de referência ou um H.264/AVC pode ser usado, ou um codec de não-HEVC geral. Além disso, pode haver um sinalizador em um conjunto de parâmetros que indica que o codec deve ser usado. Por exemplo, um sinalizador no conjunto de parâmetros de vídeo (VPS) pode indicar se o codec de HEVC ou de não-HEVC (por exemplo, AVC) é usado para criptografar a camada de referência. Em um exemplo, um sinalizador avc_base_layer_flag pode ter um valor igual a 1, que indica que o codec de camada de referência se adequa ao padrão de codificação de vídeo de acordo com a Recomendação ITU-T H.264 | Padrão Internacional ISO/IEC 14496-10, e, alternativamente, pode ter um valor igual a 0, que indica que o codec de camada de referência se adequa à especificação de HEVC. Portanto, um dispositivo de codificação configurado para codificar ou decodificar uma camada de intensificação pode ter informações relacionadas à possibilidade de um codec de AVC ou de HEVC (ou algum outro codec de não-HEVC) ser usado em relação à camada de referência.
[0144] Por exemplo, em alguns aspectos, um codec de não-HEVC pode ser usado para uma camada de referência ou base, e uma ou mais camadas de intensificação podem se basear em um H.265/padrões de codificação de HEVC e suas extensões de multicamada. Por exemplo, essas camadas de intensificação podem se basear na extensão Escalonável de H.265/HEVC (SHVC). O uso de tal configuração pode ter inúmeras vantagens. Por exemplo, isso pode permitir que dispositivos que são compatíveis apenas com os codecs de não-HEVC decodifiquem o vídeo sem as camadas de intensificação, e adicionalmente, pode permitir que os dispositivos que são compatíveis com codecs de HEVC decodifiquem o vídeo e as camadas de intensificação.
SUPORTE PARA CAMADAS DE INTENSIFICAÇÃO BASEADAS EM SHVC
[0145] Determinados projetos podem permitir o suporte da camada base de H.264/AVC (ou outra de não-HEVC), com camadas de intensificação baseadas em SHVC. Dessa maneira, dois ou mais decodificadores podem ser usados para decodificar um vídeo com o uso dessas técnicas. Por exemplo, um decodificador pode decodificar a camada base de não-HEVC conforme é conhecido na técnica. Um outro decodificador, como um decodificador de HEVC, pode ser usado para decodificar as uma ou mais camadas de intensificação baseadas em SHVC. Em alguns aspectos, pode ser benéfico fornecer um projeto para as camadas de intensificação que podem permitir que o decodificador de HEVC decodifique essas camadas quando uma camada base de não-HEVC for usada. Do ponto de vista do decodificador de HEVC, essas camadas-base podem ser decodificadas por uma fonte externa ou um meio externo. Dessa maneira, o decodificador de HEVC pode não receber quaisquer informações da camada base, ou pode apenas receber um subconjunto limitado de informações da camada base, como as informações de imagem para cada quadro da camada base.
[0146] Quando se decodifica uma camada de intensificação baseada em HEVC em um vídeo que inclui uma camada base baseada em não-HEVC, nenhuma informação de imagem de camada base pode ser fornecida para a camada de intensificação. Alternativamente, a fonte externa (como um decodificador de camada base) pode fornecer um conjunto proscrito de informações para o decodificador, que incluem os valores de amostra decodificada da imagem decodificada de camada base, o formato da representação da imagem decodificada de camada base, que inclui a largura e a altura em amostras luma, o formato da cor, profundidade de bit luma e a profundidade de bit croma, e uma indicação da possibilidade de a imagem de camada base ser uma imagem de IDR ou não. Opcionalmente, as informações também podem ser fornecidas na possibilidade de a imagem ser um quadro ou um campo, e quando for um campo, a paridade de campo (que indica se o campo é um campo de topo ou um campo de fundo). Se essas informações não forem fornecidas, a imagem decodificada pode ser inferida para ser uma imagem de quadro.
[0147] A emissão de uma imagem de camada base pode ser a responsabilidade de um decodificador de camada base. Por exemplo, esse decodificador pode ser um decodificador de H.264/AVC, ou um decodificador de um outro codec de não-HEVC. A sincronização de saída entre a imagem de camada base e uma imagem de camada de intensificação na mesma unidade de acesso pode ser externamente controlada. Por exemplo, um método de controle externo pode ser para usar os carimbos de data e hora de apresentação. Em alguns aspectos, a associação de uma imagem decodificada de camada base a uma unidade de acesso pode ser a responsabilidade da fonte externa/fonte, como o decodificador de camada base ou uma outra fonte que é externa ao decodificador de camada de intensificação.
[0148] Em alguns aspectos, um decodificador de SHVC, que é usado para decodificar uma ou mais camadas de intensificação, pode apenas precisar manter um armazenamento de imagem decodificada de memória para uma imagem decodificada de camada base, e essa memória pode não ser considerada como parte do buffer de imagem decodificada (DPB).
[0149] A imagem decodificada de camada base de não-HEVC pode ter uma ID de camada (nuh_layer_id_value) de 0. Em alguns aspectos, um valor de HevcBaseLayerFlag pode ser usado para indicar se a camada base é ou não uma camada base de HEVC. Quando a camada base não for uma camada base de HEVC, esse sinalizador pode ter um valor de 0, enquanto esse sinalizador pode ter um valor de 1 quando a camada base for uma camada de HEVC.
[0150] Em alguns aspectos, a contagem de ordem de imagem da imagem decodificada de camada base é definida igual à contagem de ordem de imagem das imagens de camada de intensificação. Nota-se que nesse caso, a contagem de ordem de imagem real de uma imagem de camada base decodificada pelo decodificador de camada base em tal codec escalonável ou multivista pode ser diferente do valor de contagem de ordem de imagem da mesma imagem quando a mesma for decodificada por um decodificador de AVC.
[0151] Em alguns aspectos, a imagem decodificada de camada base pode ser marcada como “usada para referência a longo prazo”. Para as operações de buffer de imagem codificada do decodificador de referência hipotético ou modelo de buffer, a camada base pode ser considerada como tendo zero bit. Para as operações de buffer de imagem decodificada do decodificador de referência hipotético ou modelo de buffer, apenas as imagens decodificadas das camadas de intensificação podem ser consideradas.
QUESTÕES IDENTIFICADAS COM SUPORTE PARA CAMADAS DE INTENSIFICAÇÃO BASEADAS EM SHVC
[0152] Conforme descrito acima, as camadas de intensificação baseadas em SHVC podem ser usadas com uma camada base que usou um codec de não-HEVC, como um codec H.264/AVC. No entanto, essas camadas de intensificação baseadas em SHVC podem encontra determinados problemas, devido à combinação das camadas de intensificação baseadas em SHVC e da camada base de não-HEVC. Determinadas questões podem não surgir quando se usa uma camada base de HEVC, mas apenas quando se usa uma camada base de não-HEVC, como quando uma imagem decodificada é fornecida para o criptógrafo de SHVC por uma fonte externa, como um criptógrafo de AVC.
[0153] Em alguns aspectos, quando a camada base for uma camada de não-HEVC, a sinalização de determinados parâmetros pode ser feita de uma maneira que limita a quantidade de bits usada para tal sinalização. Por exemplo, pode ser vantajoso usar uma quantidade de bits limitada para determinados parâmetros de DPB, como aqueles que atribuem um tamanho de sub-DPB, um reordenador máximo e uma latência máxima. Ademais, pode ser vantajoso se determinadas estruturas de sintaxe não se aplicarem à camada base (camada 0) quando a camada base for uma camada de não-HEVC.
[0154] Por exemplo, a sinalização de determinados parâmetros pode ser desnecessária ou redundante quando se usa uma camada base de não-HEVC. Determinados parâmetros podem ser inferidos simplesmente a partir da presença da camada base de não-HEVC, e então, qualquer sinalização adicional desses parâmetros pode ser desnecessária. Assim, a fim de usar eficientemente a memória e outros recursos, um criptógrafo pode ser configurado para determinar se uma camada base é ou não codificada com o uso de um codec de HEVC, e para escolher se sinaliza ou não determinados parâmetros com base, pelo menos em parte, no codec usado para uma camada base de um fluxo de vídeo. Quando a camada base for uma camada base de não-HEVC, um criptógrafo pode ser configurado para inferir determinados valores desses parâmetros, em vez de ter esses valores explicitamente definidos.
[0155] Em alguns aspectos, uma imagem decodificada de camada base pode ser fornecida pelo meio externo ou pela fonte externa. Pode ser vantajoso se essa imagem for armazenada em um sub-DPB para a camada base. O tamanho desse sub-DPB pode ser definido para 1, e o sub-DPB pode ser esvaziado no fim do processo de decodificação para cada unidade de acesso.
[0156] Também pode ser vantajoso se o decodificador de camada base (que pode ser referido como uma fonte externa, devido ao fato de ser externo ao decodificador de SHVC) fornece determinados valores para o decodificador de SHVC, que contém informações sobre a camada base. Por exemplo, a fonte externa pode fornecer uma imagem de camada base decodificada, e também pode fornecer uma indicação da possibilidade de a imagem de camada base ser uma imagem de IRAP. Se a imagem de camada base for uma imagem de IRAP, a fonte externa pode ser adicionalmente exigida para fornecer ao criptógrafo um tipo de unidade de NAL de IRAP, que especifica se a imagem é uma imagem de IDR, uma imagem de CRA ou uma imagem de BLA.
SINALIZAÇÃO EFICAZ DE PARÂMETROS DE DPB
[0157] Em alguns aspectos, determinada sinalização de parâmetros de DPB pode ser ineficaz quando se usa a camada base de não-HEVC e uma ou mais camada de intensificação baseada em SVHC. Por exemplo, determinados parâmetros podem ter valores restritos quando uma camada base é uma camada base de não-HEVC. Por exemplo, um determinado parâmetro pode ter um único valor específico sempre que a camada base for uma camada de não-HEVC. Dessa maneira, a sinalização desses valores para cada elemento em uma matriz (ou outra estrutura de dados) pode ser redundante, à medida que esses valores podem ser inferidos com base em uma indicação de que a camada base é uma camada de não-HEVC, ou inferidos com base em outras informações.
[0158] Por exemplo, um parâmetro de DPB que pode ser sinalizado é vps_max_dec_pic_buffering_minus1[i]. O valor dessa matriz, plus 1, sinaliza o tamanho máximo necessário do buffer de imagem decodificada para a mais alta subcamada temporal a ser decodificada. No entanto, quando se usa uma camada base de não-HEVC, vps_max_dec_pic_buffering_minus1[i] será 0 para todos os valores possíveis de i. Dessa maneira, uma vez que o valor de vps_max_dec_pic_buffering_minus1[i] é restrito quando se usa uma camada base de não-HEVC, pode ser desejável evitar a sinalização desses valores.
[0159] Por exemplo, quando uma camada base de não-HEVC estiver presente, o valor de HevcBaseLayerFlag pode ser definido para 0, e o valor de AvcBaseLayerFlag pode ser definido para 1. Dessa maneira, o criptógrafo pode ser configurado para verificar um ou mais desses valores antes de definir um valor para vps_max_dec_pic_buffering_minus1[i]. Quando o criptógrafo determinar que uma camada base de não-HEVC está presente, o criptógrafo pode, então, se abster de definir valores para vps_max_dec_pic_buffering_minus1[i] para cada valor de i, à medida que o valor pode ser inferido a partir de outras informações, uma indicação de que a camada base é codificada com o uso de um codec de não-HEVC.
[0160] Em alguns aspectos, o criptógrafo pode ser configurado para definir cada valor de vps_max_dec_pic_buffering_minus1[i] para 0, para cada i possível, quando o criptógrafo determinar que uma camada base de não-HEVC está presente. Por exemplo, esse valor ou um outro valor pode usar a menor quantidade de bits possível para sinalizar vps_max_dec_pic_buffering_minus1[i]. Pode ser benéfico usar a menor quantidade de bits possível para sinalizar valores de vps_max_dec_pic_buffering_minus1[i], quando os valores da matriz forem restritos devido ao uso de uma camada base de não-HEVC. Dessa maneira, os valores para vps_max_dec_pic_buffering_minus1[i] podem ser definidos para 0 para todos os valores de i. Quando em decodificação, um decodificador pode ser configurado para ignorar esses valores à medida que os valores podem ser restritos com base no uso da camada base de não-HEVC.
[0161] Ademais a vps_sub_layer_ordering_info_present_flag pode estar presente e definida para 1 quando uma camada base de não- HEVC for usada. Um valor de 1 pode indicar que vps_max_dec_pic_buffering_minus1[i], vps_max_num_reorder_pics[i], e vps_max_latency_increase_plus1[i] estão presentes para as subcamadas i, enquanto um valor de 0 pode indicar que valores de vps_max_dec_pic_buffering_minus1 [vps_max_sub_layers_minus1], vps_max_num_reorder_pics[vps_max_sub_layers_minus1], e vps_max_latency_increase_plusl [vps_max_sub_layers_minus1] se aplicam a todas as subcamadas (de modo que cada uma dessas matrizes tenha o mesmo valor para cada uma das subcamadas i).
[0162] Um outro parâmetro de DPB que pode ser sinalizado é vps_max_num_reorder_pics[i], que indica uma quantidade máxima de reordenamento que pode ocorrer entre as imagens a serem emitidas. Por exemplo, determinadas imagens que devem ser emitidas podem preceder uma outra imagem a ser emitida na ordem de codificação, mas podem seguir essa mesma imagem na ordem de saída. O valor de reordenamento máximo (vps_max_num_reorder_pics[i]) indica, para um valor de HighestTid igual a i, um número máximo permitido de imagens que são definidas para serem emitidas que podem prosseguir uma dada imagem de saída na ordem de decodificação, mas segue essa mesma imagem na ordem de saída.
[0163] Conforme com vps_max_dec_pic_buffering_minus1[i], quando a camada base for uma camada de não-HEVC, vps_max_num_reorder_pics[i] pode ser definida para 0 para todos os valores de i. Dessa maneira, pode ser vantajoso que o criptógrafo não sinalize os valores de vps_max_num_reorder_pics[i], após o criptógrafo ter determinado que a camada base é uma camada base de não-HEVC. Quando esse valor não for sinalizado, os valores de vps_max_num_reorder_pics[i] podem ser inferidos, com base em uma indicação de que a camada base é uma camada de não-HEVC. Em alguns aspectos, o criptógrafo pode ser configurado para definir cada valor de vps_max_num_order_pic[i] para 0, para cada i possível, quando o criptógrafo determinar que uma camada base de não- HEVC está presente.
[0164] Em alguns aspectos, o criptógrafo pode ser configurado para definir cada valor de vps_max_num_order_pic[i] para 0, para cada i possível, quando o criptógrafo determinar que uma camada base de não- HEVC está presente. Por exemplo, esse valor ou um outro valor pode usar a menor quantidade de bits possível para sinalizar vps_max_num_reorder_pics[i]. Pode ser benéfico usar a menor quantidade de bits possível para sinalizar valores de vps_max_num_reorder_pics[i], quando os valores da matriz forem restritos devido ao uso de uma camada base de não- HEVC. Dessa maneira, os valores para vps_max_num_reorder_pics[i] podem ser definidos para 0 para todos os valores de i. Quando em decodificação, um decodificador pode ser configurado para ignorar esses valores à medida que os valores podem ser restritos com base no uso da camada base de não-HEVC.
[0165] Um outro parâmetro de DPB que pode ser sinalizado é vps_max_latency_increase_plus1[i]. Um valor desse parâmetro não igual a 0 pode ser usado para computar um número máximo de imagens de saída que podem preceder uma imagem de saída no fluxo de vídeo na ordem de saída e seguem essa imagem de saída na ordem de decodificação quando a mais alta subcamada temporal a ser decodificada for igual a i.
[0166] Conforme acima, quando a camada base for uma camada de não-HEVC, vps_max_latency_increase_plus1[i] pode ser definida para 0 para todos os valores de i. Dessa maneira, pode ser vantajoso que o criptógrafo não sinalize os valores de vps_max_latency_increase_plus1[i], após o criptógrafo ter determinado que a camada base é uma camada base de não-HEVC. Quando esse valor não for sinalizado, os valores de vps_max_latency_increase_plus1[i] podem ser inferidos, com base em uma indicação de que a camada base é uma camada de não-HEVC. Em alguns aspectos, o criptógrafo pode ser configurado para definir cada valor de vps_max_latency_increase_plus1[i] para 0, para cada i possível, quando o criptógrafo determinar que uma camada base de não-HEVC está presente.
[0167] Em alguns aspectos, o criptógrafo pode ser configurado para definir cada valor de vps_max_latency_increase_plus1[i] para 0, para cada i possível, quando o criptógrafo determinar que uma camada base de não-HEVC está presente. Por exemplo, esse valor ou um outro valor pode usar a menor quantidade de bits possível para sinalizar vps_max_latency_increase_plus1[i]. Pode ser benéfico usar a menor quantidade de bits possível para sinalizar valores de vps_max_latency_increase_plus1[i], quando os valores da matriz forem restritos devido ao uso de uma camada base de não-HEVC. Dessa maneira, os valores para vps_max_latency_increase_plus1[i] podem ser definidos para 0 para todos os valores de i. Quando em decodificação, um decodificador pode ser configurado para ignorar esses valores à medida que os valores podem ser restritos com base no uso da camada base de não-HEVC.
[0168] Dessa maneira, conforme descrito acima, pode ser vantajoso que um criptógrafo use a menor quantidade de bits possível para sinalizar vps_max_dec_pic_buffering_minus1[i], vps_max_num_reorder_pics[i], e vps_max_latency_increase_plus1[i]. Por exemplo, se os valores de cada uma dessas matrizes forem restritos quando uma camada base de não-HEVC for usada, pode ser vantajoso sinalizar esses valores com o uso de menos bits do que seria necessário em situações em que os valores não são restritos. Por exemplo, os valores para cada uma dessas matrizes podem ser definidos para 0 para todos os valores de i. Um decodificador pode ser, então, configurado para ignorar esses valores. Por exemplo, um decodificador pode ser configurado para determinar se uma camada base é ou não uma camada base de HEVC, como verificando-se um sinalizador. Se a camada base for uma camada base de não-HEVC, o decodificador pode ser configurado para ignorar os valores de cada uma dentre vps_max_dec_pic_buffering_minus1[i], vps_max_num_reorder_pics[i], e vps_max_latency_increase_plus1[i].
[0169] Em alguns aspectos, hrd_layer_set_idx[i] pode ser usada para especificar a camada definida para as quais a i-ésima estrutura de sintaxe hrd_parameters() no VPS se aplica. Nas versões anteriores de fluxos de vídeo, pode ter sido especificado que hrd_layer_set_idx[i] pode ser igual a 0. Dessa maneira, pode ser benéfico que hrd_layer_set_idx[i] seja maior que 0, de modo que um decodificador possa estar ciente de que o fluxo de vídeo é um fluxo de vídeo que tem uma camada base de não-HEVC, em vez de aderir aos padrões anteriores. Ademais, em alguns aspectos, nenhuma das estruturas de sintaxe hrd_parameters() podem se aplicar à camada base de não-HEVC, que tem uma ID de camada de 0. Por exemplo, quando a camada base for sinalizada para ser não-HEVC ou externamente fornecida, não deveria haver parâmetros de HRD aplicáveis à camada base, à medida que a camada base não está no fluxo de bits.
FLUXOGRAMA EXEMPLIFICATIVO N° 1
[0170] A Figura 4 é um fluxograma que ilustra um método 400 para criptografar informações de vídeo, de acordo com uma modalidade da presente revelação. As etapas ilustradas na Figura 4 podem ser realizadas por um codificador (por exemplo, o codificador de vídeo conforme mostrado na Figura 2A ou na Figura 2B), um decodificador (por exemplo, o decodificador de vídeo conforme mostrado na Figura 3A ou na Figura 3B), ou qualquer outro componente. Por questão de conveniência, o método 400 é descrito como realizado por um criptógrafo, que pode ser o codificador, o decodificador ou um outro componente. O método pode ser um método de decodificação ou um método de codificação.
[0171] O método 400 começa no bloco 401. No bloco 405, o criptógrafo determina se uma camada de referência está incluída em um fluxo de bits. Por exemplo, a camada de referência pode não estar incluída no fluxo de bits quando a camada de referência for um codec de não-HEVC. Dessa maneira, em alguns aspectos, a camada de referência pode ser codificada em um codec de não-HEVC, ou pode ser codificada em um codec de AVC e, portanto, pode não estar incluída no fluxo de bits. Em alguns aspectos, o método determina se a camada de referência está incluída no fluxo de bits com base em um valor de um sinalizador ou uma variável. Tal sinalizador ou outro indicador pode ser recebido da fonte externa ou pode ser determinado pelo método. Em alguns aspectos, os meios para determinar podem incluir um processador.
[0172] Em seguida, no bloco 410, o criptógrafo determina uma indicação de um ou mais parâmetros para um buffer de imagem decodificada com base na possibilidade de a camada de referência estar incluída no fluxo de bits. Por exemplo, os um ou mais parâmetros par um buffer de imagem decodificada podem incluir um parâmetro que sinaliza o tamanho máximo necessário do DPB, como um tamanho máximo de um sub-DPB. Em geral, se a camada de referência não estiver incluída no fluxo de bits, os valores para esses parâmetros podem ser conhecidos, conforme descrito acima. Em alguns aspectos, a determinação de uma indicação para o tamanho máximo do sub-DPB pode incluir determinar uma indicação para o tamanho máximo do sub-DPB que indica que o tamanho máximo do sub-DPB é 1. Em alguns aspectos, os meios para determinar podem incluir um processador. No processo de codificação de vídeo, o criptógrafo pode incluir uma ou mais estruturas de sintaxe no fluxo de bits que inclui a indicação dos um ou mais parâmetros. No processo de decodificação de vídeo, a determinação da indicação pode incluir decodificar uma ou mais estruturas de sintaxe do fluxo de bits. Os detalhes das estruturas de sintaxe exemplificativas são descritos no presente documento.
[0173] Em alguns aspectos, os parâmetros também podem incluir um valor que sinaliza um número máximo de reordenamento de imagens de saída ou uma latência máxima. Em alguns aspectos, determinados parâmetros podem ser determinados com base, pelo menos em parte, no codec usado para a camada base. Por exemplo, em alguns aspectos, os valores de um ou mais parâmetros podem ser definidos para 0, para todos os valores possíveis de i, quando a camada base for um codec de não-HEVC. No bloco 415, o criptógrafo criptografa as informações de vídeo com base, pelo menos em parte, na indicação determinada dos um ou mais parâmetros para o buffer de imagem decodificada. Em alguns aspectos, os meios para criptografar podem incluir um processador. O método 400 termina no bloco 425.
[0174] Conforme discutido acima, um ou mais componentes de codificador de vídeo 20 da Figura 2A, de codificador de vídeo 21 da Figura 2B, de decodificador de vídeo 30 da Figura 3A, ou de decodificador de vídeo 31 da Figura 3B (por exemplo, unidade de predição intercamada 128 e/ou unidade de predição intercamada 166) podem ser usados para implantar qualquer uma das técnicas discutidas na presente revelação, como determinar se o codec de camada de referência é o tipo específico de codec, receber a imagem de camada base decodificada, armazenar a imagem de camada base decodificada, e esvaziar a memória.
REDUÇÃO DE SINALIZAÇÃO DESNECESSÁRIA NA EXTENSÃO VPS QUANDO SE USA UMA CAMADA BASE DE NÃO-HEVC
[0175] Em alguns aspectos, quando a camada base for uma camada base de não-HEVC, pode ser desejável evitar a sinalização desnecessária para a camada base na extensão de VPS, incluindo metadados de informações de usabilidade de vídeo (VUI) de VPS. Por exemplo, as VUI de VPS podem incluir inúmeros valores que podem ser inferidos simplesmente com base no conhecimento de que a camada base é codificada com o uso de um codec de não-HEVC, e então, pode ser desnecessário continuar a sinalizar essas informações redundantes no vídeo.
[0176] Por exemplo, determinados valores nas VUI de VPS podem ser determinados somente com base no conhecimento de que a camada base é uma camada base de não- HEVC. Dessa maneira, se for sinalizado que a camada base é uma camada base de não-HEVC, a sinalização adicional em determinados valores nas VUI de VPS pode ser redundante e desnecessária. Conforme descrito acima, se o valor de uma HevcBaseLayerFlag for definido para 0, a mesma pode sinalizar que a camada base não é uma camada de HEVC. Dessa maneira, outra sinalização pode ser evitada como redundante e desnecessária.
[0177] Conforme descrito acima, direct_dependency_type[i][j] indica um tipo de dependência entre a camada i e a camada j. Por exemplo, um valor de 0 indica que a camada j pode ser usada tanto para a predição de amostra intercamada quanto a predição de movimento intercamada para a camada i. Um valor de 1 indica que a camada j pode ser usada para a predição de amostra intercamada, mas não para a predição de movimento intercamada para a camada i. Um valor de 2 indica que a camada j pode ser usada para a predição de movimento intercamada, mas não para a predição de amostra intercamada para a camada i.
[0178] Quando se usar uma camada base que é não- HEVC, a predição de movimento intercamada da camada base pode ser desabilitada para todas as outras camadas. Conforme descrito acima, a camada base de não-HEVC tem uma ID de camada de 0. Ademais, quando a predição de movimento intercamada não for permitida, isso pode corresponder a um valor de direct_dependency_type de 1. Assim, o valor de direct_dependency_type[i][0] pode ser inferido para ser 1 para todos os valores de i, devido ao fato de que nenhuma camada pode usar a camada base (com ID de camada de 0) para a predição de movimento intercamada. Esses valores não precisam ser explicitamente sinalizados, conforme tal sinalização pode ser redundante após uma indicação de que a camada base é uma camada base de não-HEVC.
[0179] Por exemplo, um criptógrafo, ou um codificador ou um decodificador, pode reconhecer que a camada base é uma camada base de não-HEVC. Com base nesse reconhecimento (que pode ser reconhecido, por exemplo, com base em uma ou mais indicações como um sinalizador), o criptógrafo pode ser configurado para inferir valores de direct_dependency_type[i][0] para todos os valores de i, de modo que os valores inferidos possam ser 1 para todos os valores de i.
[0180] Em alguns aspectos, o segmento de código a seguir pode ser usado para evitar a sinalização desnecessária na extensão de VPS. Esse segmento de código pode evitar sinalizar valores para direct_dependency_type[i][0] uma vez que, conforme descrito acima, esses valores podem ser inferidos com base na indicação de que a camada base não é uma camada de HEVC:
[0181] Outros valores nas VUI de VPS também podem ser desnecessários ou redundantes após ter sido sinalizado que a camada base é uma camada de não-HEVC. Por exemplo, o valor de sub_layers_vps_max_minus1 [0] também pode ser inferido com base na presença de uma camada base de não-HEVC.
[0182] Por exemplo, sub_layer_vps_max_minus1[i]plus 1 especifica o número máximo de subcamadas temporais que pode estar presente na sequência de vídeo codificada para a camada i. Como antes, a ID de camada da camada base é 0. Devido ao fato de que a camada base é decodificada pela fonte externa e não pelo decodificador (ou seja, o decodificador de SHVC), a camada base não irá conter quaisquer subcamadas, e então, é desnecessário sinalizar um valor para sub_layers_vps_max_minus1 [0] para uma camada base de não- HEVC. Dessa maneira, um criptógrafo pode ser configurado para inferir esse valor com base no reconhecimento de que a camada base é uma camada base de não-HEVC.
[0183] Em alguns aspectos, o segmento de código a seguir de vps_extension() pode ser usado para evitar a sinalização do valor de sub_layers_vps_max_minus1 [0], quando a camada base for uma camada base de não-HEVC, uma vez que esse valor pode ser desnecessário:
[0184] Outros valores nas VUI de VPS também podem ser desnecessários ou redundantes após ter sido sinalizado que a camada base é uma camada de não-HEVC. Por exemplo, o valor de max_tid_il_ref_pics_plus1[0][j] também pode ser inferido com base na presença de uma camada base de não-HEVC.
[0185] Em geral, max_tid_il_ref_pics _plus1[i][j] pode ser usada para determinar se uma imagem da camada i, com uma dada TemporalId, pode ou não ser usada para a predição intercamada para uma imagem da camada j. Um valor igual a 0 indica que as imagens de não IRAP da camada i não são usadas para a predição intercamada com camada j. Um valor maior que 0 indica que as imagens da camada i com TemporalId menor ou igual a max_tid_il_ref_pics_plus1[i][j] pode ser usado como referência para a predição intercamada para imagens da camada j. Quando não estiver presente, max_tid_il_ref_pics_plus1[i][j] é inferido para ser igual a 7.
[0186] No entanto, quando a camada base for uma camada base de não-HEVC e não estiver presente no fluxo de bits, o valor de max_tid_il_ref_pics_plus1[0][j] (em que a camada base é camada 0) que indica se uma imagem da camada 0, com uma dada TemporalId, pode ou não ser usada para a predição intercamada para uma imagem da camada j se tornar menos útil. Assim, a sinalização explícita desse valor pode ser desnecessária, e pode ser evitada.
[0187] Em alguns aspectos, o segmento de código a seguir pode ser usado em vps_extension() a fim de evitar a sinalização de valores para max_tid_il_ref_pics_plus1[0][j] quando a camada base for uma camada base de não-HEVC:
FLUXOGRAMA EXEMPLIFICATIVO N° 2
[0188] A Figura 5 é um fluxograma que ilustra um método 500 para criptografar informações de vídeo, de acordo com uma modalidade da presente revelação. As etapas ilustradas na Figura 5 podem ser realizadas por um codificador (por exemplo, o codificador de vídeo conforme mostrado na Figura 2A ou na Figura 2B), um decodificador (por exemplo, o decodificador de vídeo conforme mostrado na Figura 3A ou na Figura 3B), ou qualquer outro componente. Por questão de conveniência, o método 500 é descrito como realizado por um criptógrafo, que pode ser o codificador, o decodificador ou um outro componente. O método pode ser um método de decodificação ou um método de codificação.
[0189] O método 500 começa no bloco 501. No bloco 505, o criptógrafo determina se uma camada de referência está em um fluxo de bits. Em uma modalidade, a camada de referência pode ser codificada com o uso de um codec de AVC e/ou um codec de não-HEVC. Em alguns aspectos, o criptógrafo ou o processador determina se a camada de referência está incluída no fluxo de bits com base em um valor de um sinalizador ou outro indicador do codec. Tal sinalizador ou outro indicador pode ser recebido da fonte externa ou pode ser determinado pelo método. Em alguns aspectos, os meios para determinar podem incluir um processador. No processo de codificação de vídeo, a determinação da possibilidade de a camada de referência estar incluída no fluxo de bits com base em um valor de um sinalizador ou outro indicador do codec pode incluir gerar uma ou mais estruturas de sintaxe no fluxo de bits. No processo de decodificação de vídeo, a determinação da possibilidade de a camada de referência estar incluída no fluxo de bits com base em um valor de um sinalizador ou outro indicador do codec pode incluir decodificar uma ou mais estruturas de sintaxe a partir do fluxo de bits. Os detalhes das estruturas de sintaxe exemplificativas são descritos no presente documento.
[0190] Em seguida, o criptógrafo determina se processa ou não uma indicação para a camada de referência, com base na possibilidade de a camada de referência estar incluída no fluxo de bits, no bloco 510. Por exemplo, essa determinação pode se basear na possibilidade de a indicação se tornar ou não redundante ou desnecessária, com base na possibilidade de a camada de referência estar incluída no fluxo de bits. Por exemplo, determinadas indicações podem ter um valor conhecido quando uma camada de referência não estiver incluída em um fluxo de bits, de modo que a sinalização da indicação possa ser desnecessária. Em alguns aspectos, a indicação pode incluir uma indicação de um tipo de predição intercamada para a qual uma dada camada pode ser usada, como a predição de movimento e predição de amostra. Em alguns aspectos, a indicação pode ser uma indicação de inúmeras subcamadas para uma camada específica, que pode ser desnecessário sinalizar por uma camada base que está sendo criptografa pela fonte externa. Em alguns aspectos, a indicação pode ser uma indicação da possibilidade de uma dada camada poder ser ou não usada para a predição intercamada para outra camada. Em alguns aspectos, os meios para determinar podem incluir um processador.
[0191] No bloco 515, o criptógrafo processa, em um fluxo de bits de vídeo, uma indicação para a camada de referência se a camada de referência estiver incluída no fluxo de bits. Por exemplo, determinadas indicações podem ser processadas apenas quando a camada de referência estiver incluída no fluxo de bits, como quando a camada de referência for codificada com o uso de um codec de HEVC. Em outras situações, essas indicações podem não ser processadas, à medida que as mesmas podem ser desnecessárias ou redundantes. Em alguns aspectos, os meios para determinar podem incluir um processador.
[0192] No bloco 520, o criptógrafo criptografa as informações de vídeo com base, pelo menos em parte, na indicação processada. Em alguns aspectos, os meios para criptografar podem incluir um processador. O método 500 termina no bloco 525.
[0193] Conforme discutido acima, um ou mais componentes de codificador de vídeo 20 da Figura 2A, de codificador de vídeo 21 da Figura 2B, de decodificador de vídeo 30 da Figura 3A, ou de decodificador de vídeo 31 da Figura 3B (por exemplo, unidade de predição intercamada 128 e/ou unidade de predição intercamada 166) podem ser usados para implantar qualquer uma das técnicas discutidas na presente revelação, como determinar se o codec de camada de referência é o tipo específico de codec, receber a imagem de camada base decodificada, armazenar a imagem de camada base decodificada, e esvaziar a memória.
ARMAZENAMENTO DE IMAGENS DE CAMADA BASE DECODIFICADAS NO DPB
[0194] Em alguns aspectos, a imagem de camada base decodificada fornecida pela fonte externa (como um decodificador de camada base) para uma unidade de acesso não é armazenada no DPB, ainda assim é marcada como “usada para referência a longo prazo” e, mais adiante, usada para referência de predição intercamada. Dessa maneira, isso pode ser problemático, à medida que tal imagem decodificada pode não ser usada para referência, como para a referência de predição intercamada, a menos que a mesma esteja no DPB.
[0195] Devido ao fato de a camada base (ID de camada 0) no fluxo de vídeo ser uma camada de não-HEVC, o decodificador pode não receber uma imagem codificada na camada 0. Como antes, o decodificador, no presente documento, se refere ao decodificador de SHVC, que pode ser usado para decodificar uma ou mais camadas de intensificação. Ao invés disso, a camada base pode ser decodificada com o uso da fonte externa. Essas fontes externas podem incluir, por exemplo, um decodificador de AVC que é configurado para decodificar a camada base e para passar a imagem de camada base decodificada para o decodificador de SHVC. Além da imagem de camada base decodificada, a fonte externa pode ser configurada para fornecer determinadas outras informações para o decodificador também, conforme descrito acima.
[0196] Dessa maneira, a camada base pode conter uma imagem decodificada, com ID de camada de 0. O decodificador pode ser configurado para armazenar a imagem de camada base decodificada no sub-DPB, e para marcar essa imagem como “usada para referência a longo prazo”. Ademais, se uma unidade de acesso tiver pelo menos uma imagem com uma ID de camada maior que 0, a PicOrderCntVal da imagem decodificada de camada base é definida para ser igual à PicOrderCntVal de qualquer outra imagem na unidade de acesso. De outro modo, a imagem de camada base é descartada e o sub- DPB para a camada base é definido para estar vazio, se não houverem outras imagens na unidade de acesso fora a imagem decodificada de camada base.
[0197] Quando a unidade de acesso tiver pelo menos uma imagem com ID de camada maior que 0, após todas as imagens na unidade de acesso serem decodificadas, o sub-DPB para a camada base é definido como vazio. Ou seja, o sub-DPB que contém a imagem de camada base decodificada pode estar vazio após cada imagem na unidade de acesso ter sido decodificada. O tamanho do sub-DPB pode ser definido igual a 1. Assim, o sub-DPB pode armazenar uma imagem, e cada unidade de acesso pode incluir uma imagem decodificada de camada base.
FLUXOGRAMA EXEMPLIFICATIVO N° 3
[0198] A Figura 6 é um fluxograma que ilustra um método 600 para decodificar informações de vídeo, de acordo com uma modalidade da presente revelação. As etapas ilustradas na Figura 6 podem ser realizadas por um decodificador (por exemplo, o decodificador de vídeo conforme mostrado na Figura 3A ou na Figura 3B), ou qualquer outro componente. Em alguns aspectos, o método determina se a camada de referência está incluída no fluxo de bits com base em um valor de um sinalizador ou uma variável, como um valor incluído em um dentre um conjunto de parâmetros de vídeo, um conjunto de parâmetros de sequência, um conjunto de parâmetros de imagem, ou um conjunto de parâmetros de adaptação. Tal sinalizador ou outro indicador pode ser recebido da fonte externa ou pode ser determinado pelo método. Em alguns aspectos, os meios para determinar podem incluir um processador.
[0199] O método 600 começa no bloco 601. No bloco 605, o decodificador determina que uma camada de referência não está incluída em um fluxo de bits. Em um exemplo, a camada de referência pode ser codificada de acordo com um codec de AVC e/ou um codec de não-HEVC. Em alguns aspectos, o método determina se o fluxo de bits inclui uma camada de referência com base em um valor de um sinalizador ou outro indicador do codec. O valor pode estar incluído em um dentre um conjunto de parâmetros de vídeo, um conjunto de parâmetros de sequência, um conjunto de parâmetros de imagem ou um conjunto de parâmetros de adaptação. Tal sinalizador ou outro indicador pode ser recebido da fonte externa ou pode ser determinado pelo método. Em alguns aspectos, os meios para determinar podem incluir um processador.
[0200] Em seguida, o decodificador recebe uma imagem de camada base decodificada a partir de uma fonte externa, a imagem de camada base decodificada associada a uma unidade de acesso, no bloco 610. Em um aspecto, a fonte externa pode incluir um outro decodificador, como um decodificador que é configurado para usar um codec de AVC, ou um decodificador que é configurado para usar um codec de não-HEVC. Por exemplo, a fonte externa pode incluir um segundo decodificador. Em alguns aspectos, pode haver uma imagem de camada base decodificada associada a cada unidade de acesso. Em alguns aspectos, os meios para determinar podem incluir um processador.
[0201] O decodificador armazena, então, a imagem de camada base decodificada em uma memória no bloco 615. A memória pode incluir um DPB ou um sub-DPB. Em alguns aspectos, o sub-DPB pode ser dimensionado de modo que o mesmo possa reter uma, e apenas uma, imagem de camada base decodificada. Em alguns aspectos, o decodificador pode fornecer adicionalmente uma indicação de que a imagem de camada base decodificada pode ser usada para a referência a longo prazo. Em alguns aspectos, os meios para armazenar podem incluir uma memória.
[0202] O decodificador decodifica, então, as imagens associadas à unidade de acesso com base na imagem de camada base decodificada armazenada no bloco 618. Os meios para decodificar podem incluir um processador. O criptógrafo, subsequente à decodificação das imagens associadas à unidade de acesso, esvazia a imagem de camada base decodificada da memória no bloco 620. Em alguns aspectos, os meios para esvaziar podem incluir um processador. O método 600 termina no bloco 625.
[0203] Conforme discutido acima, um ou mais componentes de codificador de vídeo 20 da Figura 2A, de codificador de vídeo 21 da Figura 2B, de decodificador de vídeo 30 da Figura 3A, ou de decodificador de vídeo 31 da Figura 3B (por exemplo, unidade de predição intercamada 128 e/ou unidade de predição intercamada 166) podem ser usados para implantar qualquer uma das técnicas discutidas na presente revelação, como determinar se o codec de camada de referência é o tipo específico de codec, receber a imagem de camada base decodificada, armazenar a imagem de camada base decodificada, e esvaziar a memória.
SINALIZAÇÃO DE UMA IMAGEM DE IRAP DE CAMADA BASE
[0204] Em alguns aspectos, pode ser benéfico que um decodificador, como um decodificador de SHVC que opera em uma ou mais camadas de intensificação, esteja ciente de determinadas propriedades da camada base de não-HEVC. Por exemplo, pode ser desejável que o decodificador exija que a fonte externa sinalize se uma dada imagem de camada base é uma imagem de IRAP ou não. Se a imagem de camada base for uma imagem de IRAP, pode ser desejável se a fonte externa sinalizar adicionalmente a unidade NAL de IRAP, que pode especificar uma imagem de IDR, uma imagem de CRA ou uma imagem de BLA.
[0205] Quando uma camada base de não-HEVC for usada, cada unidade de acesso pode incluir uma imagem de camada base decodificada (com ID de camada igual a 0) por uma fonte externa. Quando tal imagem não for fornecida, nenhuma imagem de camada base pode ser usada para a predição intercamada para essa unidade de acesso.
[0206] Quando uma imagem de camada base decodificada for fornecida pela fonte externa, a fonte externa também pode fornecer outras informações. Por exemplo, a fonte externa pode fornecer valores de amostra decodificada. Se o valor chroma_format_idc for igual a 0, a fonte externa pode fornecer uma matriz de amostra SL como um valor de amostra decodificada. De outro modo, a fonte externa pode fornecer 3 matrizes de amostra, SL, Scb, e SCr.
[0207] A fonte externa também pode fornecer uma indicação da possibilidade de a imagem de camada base decodificada ser ou não uma imagem de IRAP. Por exemplo, essa indicação pode ser encontrada em uma variável chamada de BlIrapPicFlag. Esse sinalizador de imagem de IRAP de camada base pode indicar se a imagem de camada base é ou não uma imagem de IRAP. Um valor de 1 pode indicar que a imagem de camada base é uma imagem de IRAP. Similarmente, se uma variável chamada IrapPicFlag for igual a 1, isso pode indicar que a imagem de camada base decodificada é uma imagem de não IRAP.
[0208] Quando a imagem de camada base for uma imagem de IRAP, a fonte externa pode fornecer adicionalmente o tipo de unidade NAL de IRAP. Isso pode especificar uma imagem de IDR, uma imagem de CRA ou uma imagem de BLA. Por exemplo, isso pode ser fornecido como um valor para uma variável nal_unit_type. Essa variável pode ter um valor de IDR_W_RADL, CRA_NUT ou BLA_W_LP, que pode indicar se a imagem de IRAP é uma imagem de IDR, uma imagem de CRA ou uma imagem de BLA, respectivamente.
[0209] Por exemplo, a variável NAL_unit_type pode indicar que a imagem de IRAP de camada base é IDR_W_RADL. Esse valor pode indicar que a imagem decodificada é uma imagem de IDR e foi decodificada a partir de uma imagem de Rec. ITU-T H.264 | ISO/IEC 14496-10.
[0210] Em alguns aspectos, a variável NAL_unit_type pode indicar que a imagem de IRAP de camada base é CRA_NUT. Isso especifica que a imagem decodificada é uma imagem de CRA e foi decodificada a partir de uma imagem codificada de Rec. ITU-T H.264 | ISO/IEC 14496-10 que foi associada a uma mensagem de SEI de ponto de recuperação de Rec. ITU-T H.264 | ISO/IEC 14496-10 com recovery_frame_cnt igual a 0 e broken_link_flag igual a 0.
[0211] Em alguns aspectos, a variável NAL_unit_type pode indicar que a imagem de IRAP de camada base é BLA_W_LP. Isso especifica que a imagem decodificada é uma imagem de BLA e foi decodificada a partir de uma imagem codificada de Rec. ITU-T H.264 | ISO/IEC 14496-10 que foi associada a uma mensagem de SEI de ponto de recuperação de Rec. ITU-T H.264 | ISO/IEC 14496-10 com recovery_frame_cnt igual a 0 e broken_link_flag igual a 1.
[0212] Opcionalmente, a fonte externa pode indicar também se a imagem é um quadro ou um campo. Então, a imagem é um campo, a fonte externa pode indicar a paridade de campo, como um campo de topo ou um campo de fundo. Se a fonte externa não indicar isso, a imagem decodificada pode ser inferida para ser uma imagem de quadro.
FLUXOGRAMA EXEMPLIFICATIVO N° 4
[0213] A Figura 7 é um fluxograma que ilustra um método 700 para criptografar informações de vídeo, de acordo com uma modalidade da presente revelação. As etapas ilustradas na Figura 7 podem ser realizadas por um codificador (por exemplo, o codificador de vídeo conforme mostrado na Figura 2A ou na Figura 2B), um decodificador (por exemplo, o decodificador de vídeo conforme mostrado na Figura 3A ou na Figura 3B), ou qualquer outro componente. Por questão de conveniência, o método 700 é descrito como realizado por um criptógrafo, que pode ser o codificador, o decodificador ou um outro componente.
[0214] O método 700 começa no bloco 701. No bloco 705, o decodificador determina que uma camada de referência não está incluída em um fluxo de bits. Em um exemplo, a camada de referência é decodificada de acordo com um codec de AVC e/ou de acordo com um codec de não-HEVC. Em alguns aspectos, o método determina se a camada de referência está incluída no fluxo de bits com base em um valor de um sinalizador ou outro indicador do codec. Tal sinalizador ou outro indicador pode ser recebido da fonte externa ou pode ser determinado pelo método. Em alguns aspectos, os meios para determinar podem incluir um processador. Em alguns aspectos, o valor pode estar incluído em um dentre um conjunto de parâmetros de vídeo, um conjunto de parâmetros de sequência, um conjunto de parâmetros de imagem ou um conjunto de parâmetros de adaptação.
[0215] O decodificador recebe, então, de uma fonte externa, uma imagem de camada base decodificada, no bloco 710. Em alguns aspectos, a imagem de camada base pode estar associada a uma unidade de acesso. Em alguns aspectos, a fonte externa pode incluir um outro decodificador. Em alguns aspectos, o outro decodificador pode ser um decodificador de AVC. Em alguns aspectos, os meios para receber podem incluir um processador.
[0216] No bloco 715, o decodificador recebe, da fonte externa, uma indicação de que a imagem é uma imagem de FRAP. Por exemplo, essa indicação pode incluir um sinalizador que indica que a imagem de camada base é uma imagem de FRAP. Em alguns aspectos, os meios para receber podem incluir um processador. No bloco 720, o decodificador recebe uma segunda indicação da possibilidade de a imagem ser uma dentre uma imagem de IDR, uma imagem de CLA ou uma imagem de BLA. Em alguns aspectos, os meios para receber podem incluir um processador. Em alguns aspectos, a segunda indicação pode ser um elemento de sintaxe que tem três ou mais valores possíveis. No bloco 730, o decodificador criptografa as informações de vídeo com base, pelo menos em parte, na primeira e na segunda indicações. Em alguns aspectos, os meios para decodificar podem incluir um processador. O método 700 termina no bloco 730.
[0217] Conforme discutido acima, um ou mais componentes de codificador de vídeo 20 da Figura 2A, de codificador de vídeo 21 da Figura 2B, de decodificador de vídeo 30 da Figura 3A, ou de decodificador de vídeo 31 da Figura 3B (por exemplo, unidade de predição intercamada 128 e/ou unidade de predição intercamada 166) podem ser usados para implantar qualquer uma das técnicas discutidas na presente revelação, como determinar se o codec de camada de referência é o tipo específico de codec, receber a imagem de camada base decodificada, armazenar a imagem de camada base decodificada, e esvaziar a memória.
ASPECTOS ADICIONAIS DE PROJETO
[0218] Em geral, para uma unidade de acesso atual, nenhuma informação de camada base é fornecida pela fonte externa, ou a fonte externa deve fornecer pelo menos o conjunto de informações proscrito. Se nenhuma informação for fornecida, a imagem de camada base não será usada para predição intercamada para a unidade de acesso atual, independente da possibilidade de a imagem de camada base ser fornecida na unidade de acesso no fluxo de bits de camada base. Alternativamente, a fonte externa pode ser proscrita para fornecer: (1) os valores de amostra decodificada da imagem decodificada de camada base, (2) o formato e representação da imagem decodificada de camada base, incluindo a largura e altura e amostras, o formato de cor, o sinalizador de plano de cor separado, a luma_bit_depth, e a croma_bit_depth, (3) informações quanto a possibilidade de a imagem de camada base se uma imagem de IRAP ou não, e caso sim, o tipo de unidade NAL de IRAP, que pode especificar uma imagem de IDR, uma imagem de CRA, ou a imagem de BLA, e opcionalmente, (4) se a imagem é um quadro ou um campo, e quando um campo, é paridade de campo (um campo de topo ou um campo de fundo). Quando as informações quanto à possibilidade de a imagem ser um quadro ou a campo não é fornecida, a imagem decodificada pode ser inferida como uma imagem de quadro.
[0219] A contagem de ordem de imagem da imagem decodificada de camada base pode ser definida igual à contagem de ordem de imagem de qualquer imagem de camada de intensificação, caso presente, na mesma unidade de acesso. Nota-se que nesse caso, a contagem de ordem de imagem real de uma imagem de camada base decodificada pelo decodificador de camada base de tal modo que um codec escalonável ou multivista possa ser diferente do valor de contagem de ordem de imagem da mesma imagem quando a mesma for decodificada por um decodificador de AVC. Quando nenhuma imagem de camada de intensificação estiver presente para a unidade de acesso, a imagem decodificada de camada base não é usada e pode ser descartada.
[0220] A imagem decodificada de camada base pode ser marcada como “usada para referência a longo prazo”. Para as operações de CPB, a camada base pode ser considerada como tendo zero bit. Para as operações de DPB, apenas as imagens decodificadas das camadas de intensificação podem ser consideradas.
[0221] Quando a camada base for não-HEVC, general_profile_space na primeira estrutura de sintaxe profile_tier_level() em um VPS pode ser definida igual a 1. Nesse caso, o tipo de codec é sinalizado, e quando a AVC for indicada, as informações de perfil de AVC de três bytes e de nível são sinalizadas, e o restante dos bits na estrutura de sintaxe de profile_tier_level() é reservado.
[0222] Quando a camada base for não-HEVC, pode- se precisar que a sinalização dos três parâmetros de DPB (tamanho de sub-DPB máximo, reordenamento máximo e latência máxima) use a menor quantidade de bits. Pode-se exigir também que nenhuma das estruturas de sintaxe hrd_parameters() se aplique à camada definida como 0 (apenas a camada base).
[0223] Quando a camada base for não-HEVC, a sinalização desnecessária para a camada base na extensão de VPS, incluindo VUI de VPS, pode ser evitada, como sub_layers_vps_max_minus1 [0], max_tid_il_ref_pics_plus1[0][j], e direct_dependency_type[i][0].
SEGMENTOS DE CÓDIGO ADICIONAIS
[0224] O segmento de código exemplificativo a seguir pode ser usado como parte da sintaxe de VUI de VPS, e pode estabelecer definir ou não definir determinados sinalizadores com base, pelo menos em parte, na possibilidade de uma camada base ser uma camada de HEVC:
[0225] O segmento de código exemplificativo a seguir pode ser usado como parte da sintaxe perfil, camada e nível, e pode estabelecer definir ou não definir determinados sinalizadores com base em um valor de general_profile_space (que, o próprio, pode ser definido com base em um codec usado para uma camada base de um fluxo de vídeo):
[0226] Em alguns aspectos, quando uma primeira estrutura de sintaxe profile_tier_level() na VPS tiver um sinalizador de general_profile_space igual a 0, a variável HevcBaseLayerFlag pode ser definida igual a 1 e a variável AvcBaseLayerFlag pode ser definida igual a 0. Por exemplo, a variável HevcBaseLayerFlag pode ser usada para indicar se a camada base de um vídeo específico é codificada com base em um codec de HEVC ou não. Semelhantemente, a variável AvcBaseLayerFlag pode ser usada para indicar se a camada base de um vídeo específico é codificada com base em um codec de AVC ou não.
[0227] Alternativamente, quando a primeira estrutura de sintaxe profile_tier_level() tiver general_profile_space igual a 1 e base_layer_codec_type igual a 0, a variável AvcBaseLayerFlag pode ser definida igual a 1, e a variável HevcBaseLayerFlag pode ser definida igual a 0. Ademais, nesse cenário, o valor de vps_sub_layer_ordering_info_present_flag pode ser igual a 0 e os valores de vps_max_dec_pic_buffering_minus1[i], vps_max_num_reorder_pics[i], e vps_max_latency_increase_plus1[i] podem, todos, ser iguais a 0 para todos os valores possíveis de i. Nesse cenário, os decodificadores podem ser configurados para ignorar os valores de vps_sub_layer_ordering_info_present_flag, vps_max_dec_pic_buffering_minus1[i], vps_max_num_reorder_pics[i], e vps_max_latency_increase_plus1[i], e o valor de hrd_layer_set_idx[i] pode ser maior que 0.
[0228] Em geral, um sinalizador vps_extension_offset pode especificar um deslocamento de byte, começando a partir da unidade de NAL de VPS, do próximo conjunto de informações codificadas de comprimento fixo que começa a partir de vps_vui_present_flag, quando presente, na unidade de NAL de VPS. Quando presente, os bytes de prevenção de emulação que aparecem na unidade de NAL de VPS são contados para fins de identificação de deslocamento de byte.
[0229] Em alguns aspectos, quando a camada base não for codificada com o uso de um codec de HEVC (e, portanto, o sinalizador HevcBaseLayerFlag for igual a 0, pode ser necessário que um valor de sps_scaling_list_ref_layer_id seja maior que 0. Em geral, sps_scaling_list_ref_layer_id especifica a camada para o qual o SPS ativo está associado aos mesmos dados de lista de escalonamento como o SPS atual.
[0230] Em geral, pps_scaling_list_ref_layer_id especifica a camada para a qual o PPS ativo tem os mesmos dados de lista de escalonamento como o PPS atual. O valor de pps_scaling_list_ref_layer_id deve estar na faixa de 0 a 62, inclusive. Em alguns aspectos, quando a camada base de um vídeo não for uma camada base de HEVC (ou seja, HevcBaseLayerFlag é igual a 0), pode ser uma exigência de conformidade de fluxo de bits que pps_scaling_list_ref_layer_id seja maior que 0.
SEMÂNTICA DE PERFIL, CAMADA E NÍVEL
[0231] Em geral, quando um valor de general_profile_space não for fornecido, esse valor é inferido para ser 0. No entanto, se o valor de general_profile_space for igual a 1, um valor de base_layer_codec_type igual a 0 pode especificar que a camada base se adequa a Rec. ITU-T H.264 | ISO/IEC 14496-10. Outros valores de base_layer_codec_type, na faixa de 1 a 63, inclusive, podem ser reservados para uso futuro por ITU-T | ISO/IEC.
[0232] Ademais, avc_base_profile_level_idc pode indicar o ponto de conformidade da camada base de Rec. ITU-T H.264 | ISO/IEC 14496-10. Por exemplo, avc_base_profile_level_idc pode ter o mesmo valor que os três bytes em Rec. ITU-T H.264 | ISO/IEC 14496-10 compreendido de profile_idc, constraint_set0_flag, constraint_setl_flag, constraint_set2_flag, constraint_set3_flag, constraint_set4_flag, constraint_set5_flag, reserved_zero_2bits, e level_idc do conjunto de parâmetros de sequência de Rec. ITU-T H.264 | ISO/IEC 14496-10.
[0233] Adicionalmente, reserved_zero_24bits e reserved_zero_32bits devem ser, ambos, iguais a 0, e outros valores podem ser reservados para uso futuro por ITU-T | ISO/IEC. Os decodificadores podem ser configurados para ignorar os valores tanto de reserved_zero_24bits quanto de reserved_zero_32bits. Por exemplo, o segmento de código a seguir pode ser usado para definir valores de reserved_zero_24bits e reserved_zero_32bits quando general_profile_space for definido para 1:
PROCESSO DE DECODIFICAÇÃO GERAL
[0234] Em geral, quando a camada base de um vídeo for uma camada base de AVC (ou seja, quando AvcBaseLayerFlag for igual a 1), o seguinte se aplica:
[0235] Pode não haver imagem codificada com ID de camada 0 no fluxo de bits. Isso é devido ao fato de que a camada base é uma camada de não-HEVC, e então, a imagem para a camada base pode surgir de uma fonte externa, em vez de estar incluída no fluxo de bits. O tamanho do sub-DPB para a ID de camada 0 é definido igual a um.
[0236] Os valores de pic_width_in_luma_samples, pic_height_in_luma_samples, chroma_format_idc, separate_colour_plane_flag, bit_depth_luma_minus8, e bit_depth_chroma_minus8 para imagens decodificadas com ID de camada 0 são fornecidos pela fonte externa.
[0237] Para cada unidade de acesso, uma imagem decodificada com ID de camada 0 pode ser fornecida pela fonte externa. Quando não fornecida, nenhuma imagem com ID de camada 0 é usada para predição intercamada para a unidade de acesso atual. Quando tal imagem for fornecida, a imagem também pode incluir valores de amostra decodificada (1 matriz de amostra SL se chroma_format_idc for igual a 0 ou 3 matrizes de amostra SL, SCb e SCr, de outro modo), o valor da variável BlIrapPicFlag, e quando BlIrapPicFlag for igual a 1, o valor da nal_unit_type da imagem decodificada. Ademais, BlIrapPicFlag igual a 1 especifica que a imagem decodificada é uma imagem de IRAP. IrapPicFlag igual a 1 especifica que a imagem decodificada é uma imagem de não IRAP. O valor fornecido de nal_unit_type da imagem decodificada deve ser igual a IDR_W_RADL, CRA_NUT ou BLA_W_LP. Em geral, um valor de nal_unit_type igual a IDR_W_RADL especifica que a imagem decodificada é uma imagem de IDR e foi decodificada a partir de uma imagem de IDR de Rec. ITU-T H.264 | ISO/IEC 14496-10. Um valor de nal_unit_type igual a CRA_NUT especifica que a imagem decodificada é uma imagem de CRA e foi decodificada a partir de uma imagem codificada de Rec. ITU-T H.264 | ISO/IEC 14496 10 que foi associada a uma mensagem de SEI de ponto de recuperação de Rec. ITU-T H.264 | ISO/IEC 14496-10 com recovery_frame_cnt igual a 0 e broken_link_flag igual a 0. Um valor de nal_unit_type igual a BLA_W_LP especifica que a imagem decodificada é uma imagem de BLA e foi decodificada a partir de uma imagem codificada de Rec. ITU-T H.264 | ISO/IEC 14496-10 que foi associada a uma mensagem de SEI de ponto de recuperação de Rec. ITU-T H.264 | ISO/IEC 14496-10 com recovery_frame_cnt igual a 0 e broken_link_flag igual a 1. A fonte externa pode indicar opcionalmente se a imagem é um quadro ou um campo, e quando um campo, a paridade de campo (um campo de topo ou um campo de fundo). Se não for fornecido, a imagem decodificada é inferida para ser uma imagem de quadro.
[0238] Em geral, a imagem decodificada com ID de camada 0 é armazenada no sub-DPB e é marcada como “usada para referência a longo prazo”. Se a unidade de acesso tiver pelo menos uma imagem com ID de camada maior que 0, a PicOrderCntVal da imagem decodificada para ID de camada 0 é definida igual à PicOrderCntVal de qualquer imagem com ID de camada maior que 0 na unidade de acesso. De outro modo, a imagem decodificada para ID de camada 0 é descartada e o sub-DPB para ID de camada 0 é definido como vazio. Quando a unidade de acesso tiver pelo menos uma imagem com ID de camada maior que 0, após todas as imagens na unidade de acesso serem decodificadas, o sub-DPB para a camada com ID de camada 0 é definido como vazio.
OUTRAS CONSIDERAÇÕES
[0239] As informações e os sinais revelados no presente documento podem ser representados com o uso de qualquer uma dentre uma variedade de tecnologias e técnicas diferentes. Por exemplo, os dados, as instruções, os comandos, as informações, os sinais, os bits, os símbolos e os chips que podem ser referenciados ao longo da descrição acima podem ser representados por tensões, correntes, ondas eletromagnéticas, por campos magnéticos ou por partículas, campos ópticos ou partículas, ou qualquer combinação dos mesmos.
[0240] Os vários blocos lógicos, modelos, circuitos e etapas de algoritmo ilustrativos descritos em conjunto com as modalidades reveladas no presente documento podem ser implantados como hardware eletrônico, software de computador ou combinações de ambos. Para ilustrar claramente essa intercambialidade de hardware e software, vários componentes, blocos, modelos, circuitos e etapas ilustrativos foram descritos acima em termos gerais de sua funcionalidade. Se tal funcionalidade for implantada como hardware ou software, depende das restrições de projeto e pedido particular impostas no sistema geral. Os versados na técnica podem implantar a funcionalidade descrita de vários modos para cada aplicação específica, mas tais decisões de implantação não devem ser interpretadas como ocasionando um afastamento do escopo da presente invenção.
[0241] As técnicas descritas no presente documento podem ser implantadas em hardware, software, firmware ou em qualquer combinação dos mesmos. Tais técnicas podem ser implantadas em qualquer um dentre uma variedade de dispositivos como computadores para fins gerais, dispositivo de comunicação sem fio fones, ou dispositivos de circuito integrado que tem múltiplos usos incluindo a aplicação em fones de dispositivo de comunicação sem e outros dispositivos. Quaisquer recursos descritos como módulos ou componentes podem ser implantados em um dispositivo lógico integrado ou separadamente como dispositivos lógicos discretos, mas interoperáveis. Se implantadas em software, as técnicas podem ser realizadas, pelo menos em parte, por um meio de armazenamento de dados legível por computador que compreende código de programa que inclui instruções que, quando executadas, realiza um ou mais dos métodos descritos acima. O meio de armazenamento de dados legível por computador pode formar parte de um produto de programa de computador, que pode incluir materiais de embalagem. O meio legível por computador pode compreender memória ou mídia de armazenamento de dados, como memória de acesso aleatório (RAM) como memória de acesso aleatório dinâmica síncrona (SDRAM), memória apenas de leitura (ROM), memória de acesso aleatório não volátil (NVRAM), memória apenas de leitura eletricamente programável e apagável (EEPROM), memória FLASH, mídia de armazenamento de dados magnética ou óptica, e semelhantes. As técnicas podem, adicional ou alternativamente, ser realizadas, pelo menos em parte, por um meio de comunicação legível por computador que transporta ou comunica código de programa na forma de instruções ou estruturas de dados e que pode ser acessado, lido e/ou executado por um computador, como sinais ou ondas propagados.
[0242] O código de programa pode ser executado por um processador, que pode incluir um ou mais processadores, como um ou mais processadores de sinal digital (DSPs), microprocessadores para fins gerais, circuitos integrados específicos de aplicação (ASICs), matrizes lógicas programáveis em campo (FPGAs) ou outro conjunto de circuitos lógicos discretos ou integrados equivalente. Tal processador pode ser configurado para realizar qualquer uma dentre as técnicas descritas nesta revelação. Um processador para fins gerais pode ser um microprocessador, mas alternativamente, o processador pode ser qualquer processador, controlador, microcontrolador ou máquina de estado convencional. Um processador também pode ser implantado como uma combinação de dispositivos de computação, por exemplo, uma combinação de um DSP e um microprocessador, uma pluralidade de microprocessadores, um ou mais microprocessadores em conjunto com um núcleo de DSP, ou qualquer outra tal conimagem. Dessa maneira, o termo “processador”, conforme usado no presente documento pode se referir a qualquer uma dentre a estrutura anterior, qualquer combinação da estrutura anterior, ou qualquer outra estrutura ou aparelho adequado para a implantação das técnicas descritas no presente documento. Além disso, em alguns aspectos, a funcionalidade descrita no presente documento pode ser fornecida nos módulos de software ou módulos de hardware dedicado configurado para codificar e decodificar, ou incorporado em um codificador-decodificador de vídeo combinado (CODEC). Também, as técnicas poderiam ser totalmente implantadas em um ou mais circuitos ou elementos lógicos.
[0243] As técnicas desta revelação podem ser implantadas em uma ampla variedade de dispositivos ou aparelhos, incluindo um fone sem fio, um circuito integrado (IC) ou um conjunto de ICs (por exemplo, um chipset). Vários componentes, módulos ou unidades são descritos nesta revelação para enfatizar aspectos funcionais de dispositivos configurados para realizar as técnicas reveladas, mas não exigem necessariamente a realização através de diferentes unidades de hardware. Em vez disso, conforme descrito acima, várias unidades podem ser combinadas em uma unidade de hardware de codec ou fornecidas por um conjunto de unidades de hardware interoperativas, que incluem um ou mais processadores conforme descrito acima, em conjunto com o software e/ou o firmware adequado.
[0244] Várias modalidades da invenção foram descritas. Essas e outras modalidades estão dentro do escopo das reivindicações a seguir.

Claims (10)

1. Método para decodificar informações de vídeo, o método caracterizado pelo fato de que compreende: usar um dispositivo de codificação que compreende hardware de computador, sendo que o dispositivo de codificaçãoutiliza um primeiro formato de conversão em código; receber dados de vídeo que incluem uma ou mais camadas de aperfeiçoamento a serem decodificadas com o uso do primeiro formato de conversão em código, em que as uma ou mais camadas de aperfeiçoamento são associadas a uma camada base codificada com o uso de um segundo formato de codificaçãodiferente do primeiro formato de conversão em código; determinar que os dados de vídeo recebidos não incluem a camada base; determinar que uma camada de referência não está incluída em um fluxo de bits, com base em um valor de um flag incluído em um dentre um conjunto de parâmetros de vídeo, um conjunto de parâmetros de sequência, um conjunto de parâmetros de imagem ou um conjunto de parâmetros de adaptação; receber, de um fonte externa que é externa ao dispositivo de conversão em código, uma imagem de camada base decodificada associada a uma unidade de acesso, em que a fonte externa é um segundo decodificador que utiliza um segundo formato de codificação diferente do primeiro formato de conversão em código, e em que a imagem de camada base decodificada compreende dados de vídeo que foram decodificados com o uso do segundo formato de conversão em código; armazenar a imagem de camada base decodificada em uma memória em comunicação com o dispositivo de conversão em código; decodificar imagens a partir da uma ou mais camadas de aperfeiçoamento com o uso do primeiro formato de conversão em código, com base na imagem de camada base armazenada decodificada com o uso do segundo formato de conversão em código, as imagens associadas à unidade de acesso; e subsequentemente à decodificação das imagens associadas à unidade de acesso, esvaziar a imagem de camada base decodificada da memória.
2. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que a camada de referência é codificada de acordo com um codec que não de codificação de Vídeo de Alta Eficiência, não-HEVC.
3. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que a camada de referência é codificada de acordo com um codec de Codificação de Vídeo Avançada, AVC.
4. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que o segundo decodificador é configurado para decodificar uma camada base de AVC.
5. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que uma, e somente uma, imagem de camada base decodificada é associada à unidade de acesso.
6. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que a memória compreende um buffer de imagem subdecodificada, sub-DPB.
7. Método, de acordo com a reivindicação 6, caracterizado pelo fato de que a memória tem um tamanho suficiente para armazenar uma e somente uma imagem de camada base decodificada.
8. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que armazenar a imagem de camada base decodificada compreende adicionalmente fornecer uma indicação de que a imagem de camada base decodificada é utilizável para referência a longo prazo.
9. Aparelho configurado para decodificar informações de vídeo, o aparelho caracterizado pelo fato de que compreende: uma memória configurada para armazenar imagens decodificadas; e um processador em comunicação com a memória, o processador sendo configurado para: usar um dispositivo de codificação que compreende hardware de computador, sendo que o dispositivo de codificaçãoutiliza um primeiro formato de conversão em código; receber dados de vídeo que incluem uma ou mais camadas de aperfeiçoamento a serem decodificadas com o uso do primeiro formato de conversão em código, em que as uma ou mais camadas de aperfeiçoamento são associadas a uma camada base codificada com o uso de um segundo formato de codificaçãodiferente do primeiro formato de conversão em código; determinar que os dados de vídeo recebidos não incluem a camada base; determinar que uma camada de referência não está incluída em um fluxo de bits, com base em um valor de um flag incluído em um dentre um conjunto de parâmetros de vídeo, um conjunto de parâmetros de sequência, um conjunto de parâmetros de imagem ou um conjunto de parâmetros de adaptação; receber, de um fonte externa que é externa ao dispositivo de conversão em código, uma imagem de camada base decodificada associada a uma unidade de acesso, em que a fonte externa é um segundo decodificador que utiliza um segundo formato de codificação diferente do primeiro formato de conversão em código, e em que a imagem de camada base decodificada compreende dados de vídeo que foram decodificados com o uso do segundo formato de conversão em código; armazenar a imagem de camada base decodificada em uma memória em comunicação com o dispositivo de conversão em código; decodificar imagens a partir da uma ou mais camadas de aperfeiçoamento com o uso do primeiro formato de conversão em código, com base na imagem de camada base armazenada decodificada com o uso do segundo formato de conversão em código, as imagens associadas à unidade de acesso; e subsequentemente à decodificação das imagens associadas à unidade de acesso, esvaziar a imagem de camada base decodificada da memória.
10. Memória legível por computador caracterizada pelo fato de que possui instruções nela armazenadas que, quando executadas, fazem com que um computador realize o método conforme definido em qualquer uma das reivindicações 1 a 8.
BR112016015918-7A 2014-01-08 2015-01-07 Suporte de camada base não-hevc em extensões de muticamada de hevc BR112016015918B1 (pt)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US201461925149P 2014-01-08 2014-01-08
US61/925,149 2014-01-08
US14/590,924 US9826232B2 (en) 2014-01-08 2015-01-06 Support of non-HEVC base layer in HEVC multi-layer extensions
US14/590,924 2015-01-06
PCT/US2015/010476 WO2015105872A1 (en) 2014-01-08 2015-01-07 Support of non-hevc base layer in hevc multi-layer extensions

Publications (2)

Publication Number Publication Date
BR112016015918A2 BR112016015918A2 (pt) 2017-08-08
BR112016015918B1 true BR112016015918B1 (pt) 2023-06-13

Family

ID=

Similar Documents

Publication Publication Date Title
ES2879635T3 (es) Vaciado de imágenes e inferencia de parámetros de búfer de imágenes decodificadas para flujos de bits multicapa
BR112016024233B1 (pt) Método e aparelho para codificar uma imagem de camada de aperfeiçoamento em um fluxo de bits de múltiplas camadas
EP3092807B1 (en) Support of non-hevc base layer in hevc multi-layer extensions
ES2778463T3 (es) Inferencia mejorada de indicador de no emisión de imagen previa en codificación de video
JP6513684B2 (ja) マルチレイヤビデオコーディングにおける異なるコーデックのベースレイヤのサポート
BR112016008237B1 (pt) Aparelho e método para codificar informações de vídeo, aparelho para decodificar informações de vídeo e memória legível por computador
BR112016014227B1 (pt) Dispositivo e método para codificação escalável de informação de vídeo
BR112016030377B1 (pt) Método e aparelho para converter informações de vídeo em código em um fluxo de bits, assim como memória legível por computador
BR112016008337B1 (pt) Aparelho configurado para codificar informações de vídeo, método para codificar informações de vídeo e memória legível por computador
BR112016029751B1 (pt) Método e dispositivo para codificar um fluxo de bits de acordo com hevc escalonável, uma extensão 3d de hevc ou uma extensão de múltiplas vistas de hevc, e método e dispositivo para decodificar dados de vídeo de acordo com hevc escalonável, uma extensão 3d de hevc ou uma extensão de múltiplas vistas de hevc
BR112016001223B1 (pt) Aparelho e método para codificar ou decodificar informações de vídeo e memória legível por computador
BR112016021473B1 (pt) Método e aparelho para codificar informação de vídeo usando extensão escalável para codificação de vídeo de alta eficiência, shvc, ou codificação de vídeo de alta eficiência de múltiplas vistas, mv-hevc, assim como memória legível por computador
BR112016029611B1 (pt) Aparelho e método para codificar informações de vídeo em codificação de vídeo de alta eficiência, e, memória legível por computador
BR112015023800B1 (pt) Dispositivo e método para codificação escalonável de informações de vídeo
KR20160072124A (ko) 비디오 정보의 스케일러블 코딩을 위한 디바이스 및 방법
BR112016015552B1 (pt) Métodos para codificação de um conjunto de imagens de referência (rps) entre camadas e codificação de unidades da camada de acesso à rede (nal) do fim do fluxo de bits
BR112016021475B1 (pt) Dispositivo e método para codificação escalável de informação de vídeo
BR112016015918B1 (pt) Suporte de camada base não-hevc em extensões de muticamada de hevc
BR112016015931B1 (pt) Suporte de camada-base de não hevc em extensões de muticamadas de hevc
BR112016030211B1 (pt) Restrições de conformidade de fluxo de bits em codificação de vídeo escalonável
BR112016001121B1 (pt) Dispositivo e método para codificação escalável de informações de vídeo e memória legível por computador
BR112016022251B1 (pt) Uso de mensagens de sei de hevc específicas para codecs de vídeo de multicamada
BR112016015568B1 (pt) Método e aparelho para codificar ou decodificar dados de vídeo e memória legível por computador
BR112016022253B1 (pt) Dispositivo para associar semânticas de informações de comunicação de vídeo, método para associar semânticas de informações de codificação de vídeo e memória
BR112016015560B1 (pt) Método e aparelho para codificar informações de vídeo de um fluxo de bits de múltiplas camadas e memória legível por computador