BR122022001655B1 - Método, dispositivo de memória legível por computador e sistema de codificador - Google Patents

Método, dispositivo de memória legível por computador e sistema de codificador Download PDF

Info

Publication number
BR122022001655B1
BR122022001655B1 BR122022001655-3A BR122022001655A BR122022001655B1 BR 122022001655 B1 BR122022001655 B1 BR 122022001655B1 BR 122022001655 A BR122022001655 A BR 122022001655A BR 122022001655 B1 BR122022001655 B1 BR 122022001655B1
Authority
BR
Brazil
Prior art keywords
level
precision
bitstream syntax
frame
controlled
Prior art date
Application number
BR122022001655-3A
Other languages
English (en)
Inventor
Sergey Silkin
Sergey Sablin
You Zhou
Chih-Lung Lin
Ming-Chieh Lee
Gary J. Sullivan
Original Assignee
Microsoft Technology Licensing, Llc
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
Application filed by Microsoft Technology Licensing, Llc filed Critical Microsoft Technology Licensing, Llc
Publication of BR122022001655B1 publication Critical patent/BR122022001655B1/pt

Links

Abstract

A presente invenção refere-se a um formato para uso na codificação de dados de imagem móvel, compreendendo: uma sequência de quadros incluindo a pluralidade dos quadros em que pelo menos uma região é codificada utilizando a estimativa de movimento; um respectivo conjunto de valores do vetor de movimento representando os vetores de movimento da estimativa de movimento para cada um desses respectivos quadros ou cada uma da respectiva uma ou mais regiões dentro de cada um desses quadros; e pelo menos um respectivo indicador associado com cada um dos respectivos quadros ou regiões, indicando se os respectivos valores do vetor de movimento do respectivo quadro ou região são codificados em uma primeira resolução ou uma segunda resolução.

Description

[0001] Dividido do BR112016015618-8 depositado em 07 de janeiro de 2015.
Antecedente
[0002] Em sistemas de comunicação modernos um sinal de vídeo pode ser enviado de um terminal a outro por um meio como uma rede com e/ou sem fio, geralmente uma rede baseada em pacote como a Internet. Por exemplo, o vídeo pode ser parte de uma chamada VoIP (Voice over Internet Protocol) conduzida de um aplicativo de cliente VoIP executado em um terminal do usuário como um desktop ou notebook, tablet ou smartphone.
[0003] Tipicamente, os quadros do vídeo são codificados por um codificador no terminal transmissor a fim de comprimi-los para transmissão pela rede. A codificação para um dado quadro pode compreender codificação de intraquadros pela qual os blocos são codificados com relação aos outros blocos no mesmo quadro. Nesse caso, um bloco alvo é codificado em termos de uma diferença (o residual) entre esse bloco e um bloco vizinho. De modo alternativo, a codificação para alguns quadros pode compreender codificação de inter-quadros pela qual os blocos no quadro alvo são codificados com relação às porções correspondentes em um quadro anterior, tipicamente, com base na previsão de movimento. Nesse caso, um bloco alvo é codificado em termos de um vetor de movimento que identifica uma compensação entre o bloco e a porção correspondente da qual deve ser previsto, e uma diferença (o residual) entre o bloco e a porção correspondente da qual é previsto. Um decodificador correspondente no receptor decodifica os quadros do sinal de vídeo recebido com base o tipo de previsão apropriado, a fim de descomprimi-los para emitir em uma tela no lado do decodificador.
[0004] Durante a codificação (compressão) de um vídeo, os vetores de movimento são utilizados para gerar a interprevisão de quadros para o quadro atual. O codificador primeiro busca um bloco similar (o bloco de referência) em um quadro previamente codificado que melhor combina com o bloco atual (bloco alvo), e sinaliza o deslocamento entre o bloco de referência e o bloco alvo ao decodificador como parte do fluxo contínuo de bits codificado. O deslocamento é tipicamente representado como coordenadas horizontal e vertical x e y e é referido como o vetor de movimento.
[0005] O “bloco” de referência não é de fato limitado estando em uma posição do bloco real no quadro de referência, ou seja, não é restrito à mesma grade que os blocos alvos, mas é uma porção correspondentemente dimensionada da compensação do quadro de referência com relação à posição do bloco alvo pelo vetor de movimento. De acordo com os presentes padrões, os vetores de movimento são representados na resolução de pixel fracionário. Por exemplo, no padrão H.264, cada vetor de movimento é representado na resolução de % pixel. Assim em forma de exemplo, se um bloco 16x16 no quadro atual deve ser previsto de outro bloco 16x16 no quadro prévio que está a 1 pixel à esquerda da posição do bloco alvo, então o vetor de movimento é (4.0). Ou se o bloco alvo deve ser previsto de um bloco de referência que é apenas, digamos, % de um pixel à esquerda do bloco alvo, o vetor de movimento é (3.0). O bloco de referência em uma posição do pixel fracionário não existe sozinho, mas é gerado pela interpolação entre os pixels do quadro de referência. Os vetores de movimento de subpixel podem atingir desempenho significante em termos de eficiência de compressão.
Sumário
[0006] Entretanto, utilizar uma resolução de pixel fracionário incorre mais bits para codificar o vetor de movimento do que se o movimento fosse estimado na resolução do pixel de número inteiro e também incorre mais recursos de processamento ao pesquisar a melhor referência de compatibilidade. Para codificação de vídeo isso pode ser valioso, por exemplo, como o tamanho reduzido de um resíduo melhor combinado pode geralmente compensar os bits incorridos que codificam o vetor de movimento, ou a qualidade obtida pode ser considerada para justificar os recursos. Entretanto, nem todas as imagens móveis a ser codificadas são vídeos (ou seja, capturadas de uma câmera). É aqui reconhecido que ao codificar (comprimir) uma imagem móvel que é capturada de uma tela em vez de uma câmera, a maioria dos vetores de movimento na corrente de bit codificado geralmente indicará aos pixels de número inteiro, enquanto muito poucos deles tendem a ser encontrados nas posições do pixel fracionário. Assim, enquanto os codificadores normalmente representam os vetores de movimento nas correntes de bit em unidades de % pixels, para aplicações de compartilhamento de tela ou gravação, a largura de banda pode ser de fato salva sem perda indevida de qualidade por meio da codificação dos vetores de movimento em unidades de apenas 1 pixel.
[0007] Entretanto, considerando que o vetor de movimento fracio nário pode ainda ser útil para vídeo normal (capturado por câmera) ou talvez outras imagens móveis (por exemplo, animações), o vetor de movimento pode ser sinalizado em uma forma flexível: quando a fonte de vídeo é de uma tela capturada o vetor de movimento pode ser sinalizado em unidades de 1 pixel, mas para o vídeo normal e/ou outras imagens móveis uma unidade de pixel fracionária podem ainda ser utilizadas.
[0008] De forma mais geral, pode haver várias circunstâncias nas quais pode ser útil ter o controle sobre se a resolução de pixel fracionário ou pixel de número inteiro vetor de movimento é utilizada, por exemplo, dependendo sobre como o projetista do codificador deseja implementar qualquer compensação ou efeito desejado. Por exemplo, talvez algum vídeo ou animações devido a algum aspecto de sua natureza será mais eficientemente servido pela resolução do pixel de número inteiro na estimativa de movimento, enquanto outros vídeos ou outros tipos de imagem móvel podem ser mais eficientemente servidos pela resolução de pixel fracionário.
[0009] Assim, de acordo com um aspecto aqui descrito, é fornecido o formato para uso na codificação dos dados de imagem móvel, pela qual os dados de imagem móvel codificados de acordo com o dito formato compreendem: • uma sequência de quadros incluindo a pluralidade de ditos quadros em que pelo menos uma região é codificada utilizando a estimativa de movimento; • um respectivo conjunto de valores do vetor de movimento representando vetores de movimento da estimativa de movimento para cada um dos ditos respectivos quadros, ou cada respectivo de uma ou mais regiões dentro de cada um dos ditos quadros; e • pelo menos um respectivo indicador associado com cada um dos respectivos quadros ou regiões, indicando se os respectivos valores do vetor de movimento do respectivo quadro ou região são codificados em uma primeira resolução ou uma segunda resolução.
[0010] Os valores do vetor de movimento são codificados de acordo com um protocolo pelo qual os valores do vetor de movimento codificados na primeira resolução são representados em uma escala tendo um número maior de etapas mais finas, e valores do vetor de movimento codificados na segunda resolução são representados em uma escala tendo um número menor de etapas mais grossas e, assim, incorrem poucos bits na média no fluxo contínuo de bits codificado. As etapas mais grossas representam as unidades do pixel de número inteiro e as etapas mais finas representam as unidades de pixel fracionário.
[0011] De acordo com outro aspecto aqui descrito, é fornecido um elemento de rede ou meio de armazenamento legível por computador que carrega o fluxo contínuo de bits de dados de imagem móvel codificados de acordo com tal formato ou protocolo.
[0012] Nas modalidades, pode ser fornecido um fluxo contínuo de bits compreendendo alguns da dita pluralidade de quadros ou regiões codificadas na primeira resolução e outros da dita pluralidade de quadros ou regiões codificadas na segunda resolução, o respectivo indicador indicando a resolução individualmente para cada da pluralidade de quadros ou regiões (interquadros codificado).
[0013] Nas modalidades, cada um dos valores do vetor de movi mento de cada quadro ou região pode ser incluído em um campo de vetor de movimento do fluxo contínuo de bits codificado, e de acordo com o dito protocolo o campo de vetor de movimento pode ter um tamanho reduzido para quadros ou regiões cujos vetores de movimento são codificados na segunda resolução.
[0014] De acordo com outro aspecto aqui descrito, é fornecido um decodificador compreendendo uma entrada para receber dados de imagem móvel na forma codificada e um módulo de previsão de movimento. Os dados de imagem móvel incluem uma pluralidade de quadros em que pelo menos uma região é codificada utilizando a estimativa de movimento (ou seja, quadros codificados por interquadros), com base em um formato ou protocolo de acordo com qualquer uma das modalidades aqui descritas. O módulo de previsão de movimento decodifica os ditos (interquadros codificado) quadros ou regiões com base nos valores do vetor de movimento. Isso inclui ler cada um dos indicadores para determinar se os valores do vetor de movimento do respectivo quadro ou região são codificados na primeira ou na segunda resolução e se a primeira resolução interpreta os valores do vetor de movimento em unidades de pixels fracionários e se a segunda resolução interpreta os valores do vetor de movimento nas unidades de pixels de número inteiro.
[0015] Nas modalidades, os dados de imagem móvel podem com preender dois respectivos indicadores associados com cada um dos ditos quadros ou regiões, os dois indicadores indicando a resolução dos respectivos vetores de movimento em duas dimensões e o módulo de previsão de movimento pode ser configurado para ler ambos os indicadores e interpretar os respectivos valores do vetor de movimento correspondentemente.
[0016] Nas modalidades, cada um de pelo menos alguns dos ditos quadros pode ser dividido em múltiplas regiões; os dados de imagem móvel podem compreender pelo menos um respectivo indicador associado com cada respectivo das múltiplas regiões para individualmente indicar se os valores do vetor de movimento da respectiva região são codificados na primeira ou na segunda resolução; e o módulo de previsão de movimento pode ser configurado para ler os indicadores para determinar se os valores do vetor de movimento de cada respectiva região são codificados na primeira ou na segunda resolução, e para interpretar os respectivos valores do vetor de movimento nas ditas unidades de pixels fracionários ou pixels de número inteiro correspondentemente. Na modalidade, as ditas regiões podem ser fatias de um padrão H.26x.
[0017] Nas modalidades, os dados de imagem móvel podem ainda compreender uma configuração para definir se a resolução dos valores do vetor de movimento está sendo indicada por região ou por quadro, e o módulo de previsão de movimento pode ser configurado para ler a configuração e interpretar os valores do vetor de movimento correspondentemente.
[0018] Em outras modalidades, o módulo de previsão de movimento pode ser configurado para interpretar os respectivos valores do vetor de movimento em unidades de pixels fracionários como um padrão se o respectivo indicador não estiver presente para um dos ditos quadros ou regiões.
[0019] Ainda em outras modalidades, os dados de imagem móvel incluindo os vetores de movimento podem ser ainda codificados de acordo com uma técnica de codificação sem perdas. O decodificador pode compreender uma inversão de um estágio de codificação sem perdas antes da dita decodificação pelo módulo de previsão de movimento.
[0020] De acordo com outro aspecto, é fornecido um produto de programa de computador incorporado em um meio de armazenamento legível por computador e configurado, quando executado, para realizar as operações do decodificador de acordo com quaisquer das modalidades aqui descritas.
[0021] Esse Sumário é fornecido para introduzir uma seleção de conceitos em uma forma simplificada que ainda são descritos abaixo na Descrição Detalhada. Esse Sumário não é destinado a identificar recursos ou recursos essenciais da matéria reivindicada, nem é destinada a ser utilizada para limitar o escopo da matéria reivindicada. Nem é a matéria reivindicada limitada às implementações que solucionam qualquer uma ou todas as desvantagens aqui descritas.
Breve descrição dos desenhos
[0022] Para ajudar a entender a presente descrição e mostrar como as modalidades podem ser realizadas, a referência é feita em forma de exemplo aos desenhos anexos nos quais:
[0023] A Figura 1 é uma representação esquemática de um fluxo de vídeo,
[0024] A Figura 2 é um diagrama em blocos esquemático de um sistema de comunicação,
[0025] A Figura 3 é uma representação esquemática de um fluxo de vídeo codificado,
[0026] A Figura 4 é um diagrama em blocos esquemático de um codificador,
[0027] A Figura 5 é um diagrama em blocos esquemático de um decodificador,
[0028] A Figura 6 é uma representação esquemática do esquema de codificação de interquadros, e
[0029] A Figura 7 é uma representação esquemática de outro es quema de codificação de interquadros.
Descrição Detalhada
[0030] A Figura 1 fornece uma ilustração esquemática de um sinal de entrada de vídeo capturada de uma câmera e dividida em divisões espaciais a serem codificadas por um codificador de vídeo para gerar um fluxo contínuo de bits codificado. O sinal compreende uma imagem de vídeo móvel dividida em tempo em uma pluralidade de quadros (F), cada quadro representando a imagem em um momento respectivo diferente no tempo (...t-1, t, t+1...). Dentro de cada quadro, o quadro é dividido no espaço em uma pluralidade de divisões cada uma representando uma pluralidade de pixels. Essas divisões podem ser referidas como blocos. Em certos esquemas, o quadro é dividido e subdividido em diferentes níveis de bloco. Por exemplo, cada quadro pode ser dividido em macroblocos (MB) e cada macrobloco pode ser dividido em blocos (b), por exemplo, cada bloco representando uma região de 8x8 pixels dentro de um quadro e cada macrobloco representando uma re-gião de 2x2 blocos (16x16 pixels). Em certos esquemas cada quadro também pode ser dividido em independentemente fatias decodificáveis (S), cada uma compreendendo uma pluralidade de macroblocos. As fatias S podem geralmente tomar qualquer formato, por exemplo, cada fatia sendo uma ou mais fileiras de macroblocos ou uma seleção definida de forma irregular ou arbitrária de macroblocos (por exemplo, correspondendo a uma região de interesse, ROI, na imagem).
[0031] Com relação ao termo "pixel", a seguir o termo é utilizado para se referir às amostras e posições de amostragem na grade de amostragem para a matriz da Figura (às vezes na literatura o termo "pixel" é utilizado para se referir a todos os três componentes coloridos correspondentes à uma única posição espacial e às vezes é utilizado para se referir à uma única posição ou um único valor de amostra de número inteiro em uma única matriz). A resolução da grade de amostragem é geralmente diferente entre as matrizes de amostragem de luma e croma. Nas modalidades, o seguinte pode ser aplicado para uma representação 4:4:4, mas pode também ser potencialmente aplicado em 4:2:2 e 4:2:0, por exemplo.
[0032] Observe que enquanto qualquer dado padrão pode fornecer significados específicos aos termos bloco ou macrobloco, o termo bloco também é geralmente utilizado de forma mais geral na técnica para se referir à uma divisão do quadro em um nível no qual as operações de codificação e decodificação como intra ou interprevisão são realizadas e esse é o significado mais geral que será utilizado aqui a menos que especificamente definido o contrário. Por exemplo, os blocos referidos aqui podem de fato serem as divisões chamadas blocos ou macroblocos no padrão H.26xs, e os vários estágios de codificação e decodificação podem operar em um nível de qualquer divisão conforme apropriado ao modo de codificação, aplicação e/ou padrão em questão.
[0033] Um bloco no sinal de entrada como capturado é geralmente representado no domínio espacial, onde cada canal de espaço por cor é representado como uma função de posição espacial dentro do bloco. Por exemplo, no espaço colorido YUV cada um dos canais de luminân- cia (Y) e crominância (U,V) pode ser representado como uma função de coordenadas cartesianas x e y, Y(x,y), U(x,y) e V(x,y); ou no espaço colorido RGB cada um dos canais vermelho (R), verde (G) e azul (B) podem ser representados como uma função das coordenadas cartesianas R(x,y), G(x,y), B(x,y). Nessa representação, cada bloco ou porção é representado por um conjunto de valores de pixel em diferentes coordenadas espaciais, por exemplo, coordenadas x e y, de modo que cada canal do espaço colorido seja representado em termos de uma respectiva magnitude desse canal em cada uma do conjunto discreto de localizações de pixel.
[0034] Antes da quantização, entretanto, o bloco pode ser transfor mado em uma representação de domínio de tempo como parte do processo de codificação, tipicamente uma representação de domínio de frequência espacial (às vezes apenas referida como domínio de frequência). No domínio de frequência cada canal de espaço colorido no bloco é representado como uma função da frequência espacial (dimensões de 1/comprimento) em cada uma das duas dimensões. Por exemplo, isso poderia ser observado pelos números de onda kx e ky nas direções horizontal e vertical respectivamente, de modo que os canais possam ser expressos como Y(kx, ky), U(kx, ky) e V(kx, ky) no espaço YUV; ou R(kx, ky), G(kx,ky), B(kx,ky) no espaço RGB. Assim, em vez de representar um canal de espaço colorido em termos de uma magnitude em cada uma de um conjunto discreto de posições de pixel, a transformada representa cada canal de espaço colorido em termos de um coeficiente associado com cada de um do conjunto discreto de componentes de frequência espacial que fazem o bloco, ou seja, uma amplitude de cada um de um conjunto discreto de termos de frequência espacial correspondentes às diferentes frequências de variação espacial pelo bloco. Possibilidades para tais transformadas incluem uma transformada de Fourier, Transformada de Cosseno Discreto (DCT), Transformada de Karhunen-Loeve (KLT), ou outras.
[0035] O diagrama em blocos da Figura 2 fornece um exemplo de um sistema de comunicação no qual as técnicas dessa descrição podem ser empregadas. O sistema de comunicação compreende um primeiro terminal transmissor 12 e um segundo terminal receptor 22. Por exemplo, cada terminal 12, 22 pode compreender um dentre um celular ou smartphone, tablet, notebook, desktop, ou outro aparelho doméstico como um aparelho de televisão, decodificador, sistema estéreo, etc. O primeiro e o segundo terminais 12, 22 são cada um operavelmente acoplados à uma rede de comunicação 32 e o primeiro terminal transmissor 12 é, assim, disposto para transmitir sinais que serão recebidos pelo segundo terminal receptor 22. Correspondentemente, o terminal transmissor 12 pode também ser capaz de receber sinais do terminal receptor 22 e vice-versa, mas para a finalidade de discussão a transmissão é aqui descrita a partir da perspectiva do primeiro terminal 12 e a recepção é descrita a partir da perspectiva do segundo terminal 22. A rede de comunicação 32 pode compreender, por exemplo, uma rede baseada em pacote como uma rede de internet de área ampla e/ou de área local, e/ou uma rede de celular.
[0036] O primeiro terminal 12 compreende um meio de armazena mento legível por computador 14 como uma memória flash ou outra memória eletrônica, um dispositivo de armazenamento magnético, e/ou um dispositivo de armazenamento óptico. O primeiro terminal 12 também compreende um aparelho de processamento 16 na forma de um processador ou CPU tendo uma ou mais unidades de execução, um trans- ceptor como um modem com ou sem fio tendo um transmissor 18, uma câmera de vídeo 15 e uma tela 17 (ou seja, uma tela ou monitor). Cada dentre a câmera 15 e a tela 17 podem ou não ser alojadas dentro do mesmo invólucro como o descanso do terminal 12 (e mesmo o transmissor 18 poderia ser interno ou externo, por exemplo, compreendendo um dongle ou roteador sem fio no último caso). O meio de armazenamento 14, a câmera de vídeo 15, a tela 17 e o transmissor 18 são cada um operavelmente acoplados ao aparelho de processamento 16 e o transmissor 18 é operavelmente acoplado à rede 32 através de um link com ou sem fio. De forma similar, o segundo terminal 22 compreende um meio de armazenamento legível por computador 24 como um dispositivo de armazenamento eletrônico, magnético e/ou óptico; e um aparelho de processamento 26 na forma de uma CPU tendo uma ou mais unidades de execução. O segundo terminal compreende um trans- ceptor como um modem com ou sem fio tendo pelo menos um receptor 28 e uma tela 25 que pode ou não ser alojada dentro do mesmo invólucro como o descanso do terminal 22. O meio de armazenamento 24, a tela 25 e o receptor 28 do segundo terminal são cada um operavelmente acoplado ao respectivo aparelho de processamento 26, e o receptor 28 é operavelmente acoplado à rede 32 através de um link com ou sem fio.
[0037] O armazenamento 14 no primeiro terminal 12 armazena pelo menos um codificador para codificação de dados de imagem móvel, o codificador sendo disposto a ser executado no respectivo aparelho de processamento 16. Quando executado o codificador recebe um fluxo de vídeo de entrada (não codificado) “bruto” da câmera de vídeo 15, é ope- rável para codificar o fluxo de vídeo para comprimi-lo em uma corrente de taxa de bit inferior e emite o fluxo de vídeo codificado para transmissão através do transmissor 18 e da rede de comunicação 32 ao receptor 28 do segundo terminal 22. O armazenamento 24 no segundo terminal 22 armazena pelo menos um decodificador de vídeo disposto para ser executado em seu próprio aparelho de processamento 26. Quando executado o decodificador recebe o fluxo de vídeo codificado do receptor 28 e decodifica-o para emitir à tela 25.
[0038] O codificador e o decodificador são também operáveis para codificar e decodificar outros tipos de dados de imagem móvel, incluindo correntes de compartilhamento de tela. Uma corrente de compartilhamento de tela são dados de imagem capturados de uma tela 17 no lado do codificador de modo que um ou mais outros usuários remotos possam ver qual usuário no lado do codificador está vendo na tela, ou assim o usuário dessa tela pode gravar o que está acontecendo na tela para reprodução em um ou mais usuários posteriormente. No caso de uma chamada conduzida entre um terminal transmissor 12 e um terminal receptor 22, o conteúdo móvel da tela 17 no terminal transmissor 12 será codificado e transmitido ao vivo (em tempo real) a ser decodificado e exibido na tela 25 do terminal receptor 22. Por exemplo, o usuário do lado do codificador pode desejar compartilhar com outro usuário como ele ou ela está trabalhando no desktop de seu sistema operacional ou algum aplicativo.
[0039] Observe que onde é dito que uma corrente de compartilha mento de tela é capturada de uma tela, ou similar, essa não limita qualquer mecanismo específico para fazer isso. Por exemplo, os dados poderiam ser lidos de um buffer de tela da tela 17, ou capturada recebendo um caso dos mesmos dados gráficos que estão sendo emitidos do sistema operacional ou de um aplicativo para exibição na tela 17.
[0040] A Figura 3 fornece uma representação esquemática de um fluxo contínuo de bits codificado 33 como seria transmitido do codificador executando no terminal transmissor 12 ao decodificador executando no terminal receptor 22. O fluxo contínuo de bits 33 compreende dados de imagem codificados 34 para cada quadro ou fatia compreendendo as amostras codificadas para os blocos desse quadro ou fatia com quaisquer vetores de movimento associados. Em um aplicativo, o fluxo contínuo de bits pode ser transmitido como parte de uma chamada ao vivo (tempo real) como uma chamada VoIP entre os terminais transmissor e receptor 12, 22 (chamadas VoIP também podem incluir compartilhamento de vídeo e tela). O fluxo contínuo de bits 33 também compreende informações de cabeçalho 36 associadas com cada quadro ou fatia. Nas modalidades, o cabeçalho 36 está disposto para incluir pelo menos um elemento adicional na forma de pelo menos um sinalizador 37 indicando a resolução do vetor de movimento, que será discutido em mais detalhes abaixo.
[0041] A Figura 4 é um diagrama em blocos que ilustra um codifica dor como pode ser implementado no terminal transmissor 12. O codificador compreende um módulo de codificação principal 40 compreendendo: um módulo de transformada de cosseno direto (DCT) 51, um quantizador 53, um módulo de transformada inversa 61, um quantizador inverso 63, um módulo de intraprevisão 41, um módulo de interprevisão 43, um interruptor 47, um estágio de subtração (-) 49 e um estágio de decodificação sem perdas 65. O codificador ainda compreende um módulo de controle 50 acoplado ao módulo de interprevisão 43. Cada um desses módulos ou estágios pode ser implementado como uma porção de código armazenado no meio de armazenamento do terminal transmissor 14 e disposto para execução em seu aparelho de processamento 16, embora a possibilidade de algum ou todos esses sendo completa ou parcialmente implementados no circuito de hardware dedicado não é excluído.
[0042] O estágio de subtração 49 está disposto para receber uma instância do sinal de entrada compreendendo uma pluralidade de blocos sobre uma pluralidade de quadros (F). A corrente de entrada é recebida de uma câmera 15 ou capturada do que está sendo exibido na tela 17. A intra ou interprevisão 41, 43 gera uma versão prevista de um bloco atual (alvo) a ser codificado com base em uma previsão de outro, bloco já codificado ou porção de referência correspondentemente dimensionada. A versão prevista é fornecida a uma entrada do estágio de subtração 49, onde é subtraída do sinal de entrada (ou seja, o sinal real) no domínio espacial para produzir um sinal residual que representa uma diferença entre a versão prevista do bloco e o bloco correspondente no sinal real de entrada.
[0043] No modo de intraprevisão, o módulo de intraprevisão 41 gera uma versão prevista do bloco atual (alvo) a ser codificado com base em uma previsão de outro, bloco já codificado no mesmo quadro, tipicamente um bloco vizinho. Ao realizar a codificação intraquadros, a ideia é apenas codificar e transmitir uma medição de como uma porção dos dados de imagem dentro de um quadro difere de outra porção dentro desse mesmo quadro. Essa porção pode então ser prevista no decodi- ficador (dado algum dado absoluto para começar), e assim essa é apenas necessária para transmitir a diferença entre a previsão e os dados reais em vez dos próprios dados reais. O sinal de diferença é tipicamente menor na magnitude, assim leva alguns bits para codificar (devido à operação do estágio de compressão sem perdas 65 - veja abaixo).
[0044] No modo de interprevisão, o módulo de interprevisão 43 gera uma versão prevista do bloco atual (alvo) a ser codificado com base em uma previsão de outro, porção de referência já codificada em um quadro diferente do que o bloco atual, a porção de referência tendo o tamanho de um bloco, mas sendo compensado com relação ao bloco alvo no domínio espacial por um vetor de movimento que é previsto pelo módulo de interprevisão 43 (interprevisão pode também ser referida como previsão de movimento ou estimativa de movimento). O módulo de inter- previsão 43 seleciona a ótima referência para um dado bloco alvo buscando, no domínio espacial, através de uma pluralidade de porções de referência candidatas compensadas por uma pluralidade de respectivos possíveis vetores de movimento em um ou mais quadros diferentes do quadro alvo, e selecionando o candidato que minimiza o residual com relação ao bloco alvo de acordo com uma métrica adequada. O módulo de interprevisão 43 é comutado na passagem de retroalimentação pelo interruptor 47, no lugar do estágio do quadro de intraprevisão 41 e, assim, um loop de retorno é então criado entre os blocos de um quadro e outro para codificar os interquadros com relação àqueles do outro quadro. Ou seja, o residual agora representa a diferença entre o bloco in- terprevisto e o bloco de entrada real. Isso tipicamente leva alguns bits para codificar do que codificar intraquadros.
[0045] As amostras do sinal residual (compreendendo os blocos residuais após as previsões são subtraídos do sinal de entrada) são emitidas do estágio de subtração 49 através do módulo de transformada (DCT) 51 (ou outra transformação adequada) onde seus valores residuais são convertidos em domínio de frequência, então ao quantizador 53 onde os valores transformados são convertidos em índices de quantiza- ção substancialmente discretos. Os índices transformados quantizados do residual conforme gerado pelos módulos de transformada e quanti- zação 51, 53, bem como uma indicação da previsão utilizada nos módulos de previsão 41,43 e quaisquer vetores de movimento gerados pelo módulo de interprevisão 43, são todos emitidos para inclusão no fluxo de vídeo codificado 33 (veja o elemento 34 na Figura 3); através de um estágio de codificação sem perdas 65 adicional como um codificador Golomb ou codificador de entropia onde os vetores de movimento e ín-dices transformados e quantizados são ainda comprimidos utilizando as técnicas de codificação sem perdas conhecidas na técnica.
[0046] Uma instância do sinal quantizado e transformado é também retornada através do quantizador inverso 63 e do módulo de transformada inversa 61 para gerar uma versão prevista do bloco (como seria visto no decodificador) para uso pelo módulo de previsão selecionado 41 ou 43 ao prever um bloco subsequente a ser codificado, na mesma forma que o bloco alvo atual sendo codificado foi previsto com base em uma versão quantizada inversa e transformada inversa de um bloco previamente codificado. O interruptor 47 está disposto para passar a saída do quantizador inverso 63 à entrada do módulo de intraprevisão 41 ou do módulo de interprevisão 43 como apropriado à codificação utilizada para o quadro ou o bloco sendo atualmente codificado.
[0047] A Figura 5 é um diagrama em blocos que ilustra um decodi- ficador como pode ser implementado no terminal receptor 22. O deco- dificador compreende um inverso da codificação sem perdas 95, um estágio de quantização inversa 83, um estágio de transformada DCT inversa 81, um interruptor 70 e um estágio de intraprevisão 71 e um estágio de compensação de movimento 73. Cada um desses módulos ou estágios pode ser implementado como uma porção de código armazenado no meio de armazenamento do terminal receptor 24 e disposto para execução em seu aparelho de processamento 26, através da possibilidade de algum ou todos esses sendo completa ou parcialmente implementados em circuito de hardware dedicado não é excluído.
[0048] O quantizador inverso 81 está disposto para receber o sinal codificado 33 do codificador, através do receptor 28 e do estágio de co-dificação sem perdas inverso 95. O quantizador inverso 81 converte os índices de quantização no sinal codificado em amostras de-quantizadas do sinal residual (compreendendo os blocos residuais) e passa as amostras de-quantizadas ao módulo DCT reverso 81 onde eles são transformados do domínio de frequência em domínio espacial. O interruptor 70 então passa as amostras de-quantizadas de domínio espacial residual no módulo de inter ou intraprevisão 71 ou 73 conforme apropriado ao modo de previsão utilizado para o quadro ou bloco atual sendo decodificado e o módulo de inter ou intraprevisão 71, 73 utiliza a intra ou interprevisão respectivamente para decodificar os blocos. Qual modo utilizar é determinado utilizando a indicação da previsão e/ou quaisquer vetores de movimento recebidos com as amostras codificadas 34 no fluxo contínuo de bits codificado 33. Seguindo desse estágio, os blocos decodificados são emitidos para serem reproduzidos através da tela 25 no terminal receptor 22.
[0049] Conforme mencionado, codecs de acordo com padrões con vencionais realizam a previsão de movimento em uma resolução de pixels de 1/4, significando que os vetores de movimento são também expressos em termos de etapas de pixel de 1/4. Um exemplo da estimativa da resolução do pixel de 1/4 movimento é mostrado na Figura 6. Nesse exemplo, o pixel p no canto superior esquerdo do bloco alvo é previsto de uma interpolação entre os pixels a, b, c e d, e os outros pixels do bloco alvo também serão previstos com base em uma interpolação similar entre os respectivos grupos de pixels no quadro de referência, de acordo com a compensação entre o bloco alvo em um quadro e a porção de referência no outro quadro (esses blocos sendo mostrados com linhas pontilhadas em negrito na Figura 6). Entretanto, realizar a estimativa de movimento com essa granularidade tem consequências, conforme discutido abaixo.
[0050] Com referência ao codificador sem perdas 65 e ao decodifi- cador 95, a codificação sem perdas é uma forma de compressão que trabalha não jogando fora informações (quantização similar), mas utilizando diferentes comprimentos da palavra código para representar diferentes valores dependendo de o quão provável esses valores ocorrerão, ou o quão frequente eles ocorrem, nos dados a serem codificados pelo estágio de codificação sem perdas 65. Por exemplo, o número de 0s líderes na palavra código antes de encontrar um 1 pode indicar o comprimento da palavra código, assim 1 é a palavra código mais curta, então 010 e 011 são os próximos mais curtos, então 00100 ..., e assim por diante. Assim, as palavras código mais curtas são muito mais curtas do que seria exigido se uma palavra código com comprimento uniforme foi utilizada, mas as mais longas são mais longas que essa. Mas pela alocação dos valores mais frequentes ou mais prováveis para as palavras código mais curtas e apenas os valores que ocorrem frequente-mente ou menos provavelmente para as palavras códigos mais longas, o fluxo contínuo de bits 33 resultante pode na média incorrer alguns bits por valor codificado do que se uma palavra código com comprimento uniforme fosse utilizada e assim atingir a compressão sem descartar quaisquer informações adicionais.
[0051] Muito do codificador 40 antes do estágio de codificação sem perdas 65 é projetado para tentar tornar os valores menores possíveis antes de passarem pelo estágio de codificação sem perdas 65. Conforme então ocorrem mais frequentemente, os valores menores então incorrerão taxa de bit menor no fluxo contínuo de bits codificado 33 do que valores maiores. Isso é porque o residual é codificado oposto às amostras absolutas. É também a razão atrás da transformada 51, pois muitas amostras tendem a transformar em zero ou coeficientes menores no domínio de transformada.
[0052] Uma consideração similar pode ser aplicada à codificação dos vetores de movimento.
[0053] Por exemplo, em H.264/MPEG-4 Parte 10 e H.265/HEVC o vetor de movimento é codificado com Codificação Exponencial Golomb. A seguinte tabela mostra os valores do vetor de movimento e dos bits codificados.
[0054] A partir da tabela acima, pode-se ver que quanto maior o va lor, mais bits são utilizados. Isso significa que quanto mais alta a resolução do vetor de movimento, mais bits são incorridos. Por exemplo, assim com uma resolução de pixel de 1/4, uma compensação de 1 pixel deve ser representada por um valor de 4, incorrendo 5 bits no fluxo contínuo de bits codificado.
[0055] Na codificação do vídeo (capturado de uma câmera) o custo dessa resolução no vetor de movimento pode ser significante, pois a resolução mais fina pode fornecer mais oportunidades na busca por uma referência residual de custo inferior. Entretanto, observa-se aqui que para imagens móveis capturadas de uma tela, a maioria dos deslocamentos espaciais tendem a estar nos deslocamentos de pixel total e alguns deles tendem a estar nas posições do pixel fracionário, assim a maioria dos vetores de movimento tendem a indicar aos valores de pixel de número inteiro e muito pouco tende a indicar aos valores de pixel fracionário.
[0056] Nessa base, pode ser desejável codificar os vetores de mo vimento para dados de imagem capturados de uma tela com uma resolução de 1 pixel. Considerando o fato que nenhum bit precisa ser gasto nas partes fracionárias dos vetores de movimento para tal conteúdo, isso significa que a taxa de bit incorrida na codificação de tal conteúdo pode ser reduzida.
[0057] Por exemplo, enquanto os codificadores normalmente inter pretam os vetores de movimento nos fluxos contínuos de bits mas unidades de compensações de % pixel, um codificador pode de fato ser geralmente capaz de salvar a taxa de bit abandonando essa resolução e em vez de codificar os vetores de movimento para aplicativos de codificação de tela em unidades de compensações de pixel de número inteiro. Embora isso reduzirá a precisão dos vetores de movimento por um fator de quatro, tal precisão é geralmente menos significante para compartilhamento de tela ou aplicativos de gravação e isso também reduz o número de bits necessários para codificar os vetores. Para prever um bloco atual (alvo) de um bloco de referência 1 pixel à esquerda do bloco alvo, o vetor de movimento será (1.0) em vez de (4.0). Utilizando a codificação Golomb acima, isso significa que os bits incorridos para codificação do vetor de movimento mudam de (00111, 1) para (010, 1) e assim dois bits são salvos nesse caso.
[0058] Além disso, nas modalidades o vetor de movimento de reso lução reduzida pode também reduzir a complexidade da estimativa de movimento realizada no codificador limitando a pesquisa do vetor de movimento por valores de número inteiro, assim reduzindo os recursos de processamento incorridos pela pesquisa. De modo alternativo, seria possível realizar uma pesquisa normal e arredondar os vetores de movimento resultantes nos valores de número inteiro.
[0059] A Figura 7 mostra um exemplo de previsão de movimento limitado à uma resolução de pixels totais apenas, com o vetor de movimento sendo limitado às etapas de pixel total apenas. Em contraste com a Figura 6, o pixel p é previsto apenas de um único pixel total a sem interpolação. Poderia alternativamente ter sido previsto do pixel b, c, d ou outro pixel dependendo da compensação entre o bloco alvo em um quadro e a porção de referência no outro quadro (mostrado novamente com linhas pontilhadas em negrito), mas devido à restrição não poderia ter sido previsto de uma interpolação entre pixels. Nota: para qualquer dado bloco a previsão do pixel de %, conforme ilustrado em forma de exemplo na Figura 6, poderia acontecer para ter gerado uma compensação de pixel total sem interpolação, se esse forneceu residual mais baixo. Entretanto, não teria sido restrito a fazer isso e sobre uma imagem dimensionável seria altamente improvável de ter acontecido para todos os blocos.
[0060] Considerando que os valores fracionários do vetor de movi mento podem ainda ser muito úteis para conteúdo capturado pela câmera, nas modalidades o codificador 40 é fornecido com um controlador 50 acoplado ao módulo de previsão de movimento 43 com o controlador 50 sendo configurado para selecionar a resolução do vetor de movimento em uma forma flexível: quando os dados fonte são de uma tela capturada 17 e não há movimento de pixel fracionário, o vetor de movimento é codificado e transmitido em unidades de apenas pixels totais; mas para o vídeo de conteúdo da câmera, os vetores de movimento são ainda codificados e transmitidos com precisão de pixel fracionário.
[0061] A fim de fazer isso, o controlador 50 pode ser configurado para medir um indicativo heurístico de desempenho do fato que o tipo de conteúdo sendo capturado é conteúdo de tela. Em resposta, ele então desabilita a compensação do movimento de pixel fracionário para codificação do conteúdo de tela. De modo alternativo, o controlador 50 pode receber uma indicação de um aplicativo ou do sistema operacional como para qual tipo de dados está fornecendo ao codificador para codificação e o controlador 50 pode selecionar entre o modo nessa base. Como outra opção ele pode fazer a seleção com base nos dados históricos. A seleção pode ser feita em uma base por quadro ou pode ser selecionada individualmente para diferentes regiões dentro de um quadro, por exemplo, em uma base por fatia.
[0062] Assim, antes da codificação de um quadro ou fatia, o codifi cador é capaz de decidir a resolução do vetor de movimento com base nos fatores como dados estatísticos históricos, conhecimento de seu tipo de aplicativo, análise de passagem múltipla ou alguma outra técnica. Se o codificador decidir utilizar estimativa de movimento de pixel total apenas, a pesquisa de pixel fracionária é ignorada. Se uma previsão do vetor de movimento escalado tem uma parte fracionária, a previsão pode ser arredondada em um valor de número inteiro.
[0063] Em outras modalidades, o controle pode opcionalmente ser aplicado separadamente ao componente vertical ou horizontal de um vetor. Isso pode ser útil para a codificação de vídeo de tela que é escalado horizontal ou verticalmente. Por exemplo, considere um caso onde o codificador está operando com um compartilhamento de tela redimen- sionado horizontal ou verticalmente. Nesse caso, um dos componentes dos vetores de movimento terá partes fracionárias enquanto o outro componente não. Para controlar a taxa de bit, o codificador pode ajustar o parâmetro de quantização (QP) em uma faixa predefinida. Se o QP atingiu ao limite superior permitido e a taxa de bit é ainda muito alta, o codificador pode acionar um redimensionador interno. Ele redimensiona dentro das fotos horizontalmente e no lado do decodificador as fotos decodificadas são esticadas de volta à largura original. Assim, uma situação pode surgir onde também seria útil tratar os vetores de movimento horizontal e vertical diferentemente.
[0064] A fim de representar o vetor de movimento em uma escala de resolução reduzida nas unidades ou etapas de pixels de número inteiro, e assim atingir as economias de taxa de bit associadas sobre os codecs convencionais, o protocolo para sinalizar os vetores de movimento terão que ser atualizados para futuros padrões de codec. Nas modalidades, isso pode ser implementado como uma atualização ao padrão H.265 (HEVC, Codificação de vídeo de alta eficiência). Para codificar o conteúdo de tela capturada, o formato dos dados codificados 34 será dado em um campo de vetor de movimento reduzido para cada vetor de movimento. Para uma corrente de captura de tela codificada no modo de pixel de número inteiro, os dados relevantes 34 então compreenderão os vetores de movimento de número inteiro no fluxo contínuo de bits 33 e nas modalidades apenas os vetores de movimento de número inteiro no fluxo contínuo de bits 33.
[0065] Nas modalidades isso será opcional, com um sinalizador 37 também incluídos no cabeçalho 36 para indicar se o pixel fracionário (por exemplo, % pixel) ou resolução do pixel de número inteiro está sendo utilizado na codificação do quadro ou fatia associada (consulte novamente a Figura 3). Se as resoluções horizontal e vertical podem ser selecionadas separadamente, dois sinalizadores 37 serão necessários por quadro ou fatia.
[0066] O seguinte descreve uma modalidade exemplar com base em uma atualização ao padrão H.265. A modificação permite que os vetores de movimento sejam representados em uma escala reduzida de pixel de número inteiro no fluxo contínuo de bits codificado 33 e adiciona dois sinalizadores 37 por fatia nas informações de cabeçalho 36 da corrente comprimida a fim de sinalizar a resolução dos vetores de movimento em seus componentes horizontal e vertical.
[0067] A modificação não muda a sintaxe ou o processo de análise diferente no nível do cabeçalho, mas modifica o processo de decodifi- cação interpretando as diferenças do vetor de movimento como número inteiros e arredondando os prognosticadores escalados MV para valores de número inteiro. A modificação foi observada aumentar a eficiência de codificação ao máximo de 7% e na média por aproximadamente 2% para o conteúdo testado das sequências de exibição e pode também reduzir a complexidade dos processos de codificação e decodificação.
[0068] Um indicador de alto nível é adicionado (em SPS, PPS, e/ou nível do cabeçalho da fatia) para indicar a resolução para interpretação dos vetores de movimento.
[0069] No processo de decodificação, se os vetores de movimento são indicados estarem na resolução de pixel total e uma previsão do vetor de movimento escalado tem uma parte fracionária, então nas modalidades a previsão é arredondada para um valor de número inteiro. As diferenças do vetor de movimento são simplesmente interpretadas como compensações de número inteiro em vez de compensações de amostra por %. Todos os processos de decodificação permanecem os mesmos. O processo de análise (abaixo do nível do cabeçalho) é também inalterado. Quando os vetores de movimento são codificados na precisão de amostra total e os dados de imagem de imagem utilizam a amostragem 4:2:2 ou 4:2:0, os vetores de movimento de croma podem ser derivados na forma comum, que produzirá os deslocamentos de movimento de croma de amostra por 1A De modo alternativo, os vetores de movimento de croma podem também ser arredondados aos valores de número inteiro.
[0070] Com relação à mudança de sintaxe para sinalizar a resolução do vetor de movimento, nas modalidades há três possíveis modos, com um indicador de modo sendo sinalizado em um nível do cabeçalho mais alto (por quadro) como a definição do parâmetro de foto (PPS), ou alternativamente em um nível alto uniforme como a definição do parâmetro de sequência (SPS). O indicador de modo tem três valores selecionáveis. Um valor indica que os vetores de movimento são sempre interpretados como representando compensações da amostra por % (nas fotos que utilizam essa PPS). Um segundo valor indica que os vetores de movimento são sempre interpretados como representando as compensações do número inteiro (nas fotos que utilizam essa PPS). Um terceiro valor indica que há um sinal em um nível inferior que de forma adaptativa seleciona a interpretação a ser aplicada nesse nível inferior. Essa indicação de nível inferior pode ser um sinalizador no cabeçalho da fatia que estará presente apenas ao operar nesse terceiro modo.
[0071] Para implementar isso, nas modalidades um novo indicador de dois bits será incluído na extensão PPS para indicar os modos de controle de resolução do vetor de movimento. Esse indicador pode ser referido como motion_vector_resolution_control_idc. Quando o modo for 0, os vetores de movimento são codificados na precisão de pixel % e todos os processos de decodificação permanecem inalterados. Quando o modo for 1, todos os vetores de movimento nas fatias que se referem ao PPS são codificados na precisão de pixel total. E quando o modo for 2, a resolução do vetor de movimento é controlada em uma base de fatia por fatia por um sinalizador no cabeçalho da fatia. Quando motion_vector_resolution_control_idc não está presente, seu valor é deduzido como 0.
[0072] Quando motion_vector_resolution_control_idc for igual à 2, um sinalizador adicional chamado slice_motion_vector_resolution_flag é sinalizado no cabeçalho da fatia. Quando o sinalizador é zero, os vetores de movimento dessa fatia são codificados na precisão de pixel 1/4 e quando o sinalizador for 1, os vetores de movimento são codificados na precisão de pixel total. Quando o sinalizador não está presente, seu valor é deduzido como igual ao valor de motion_vector_resolution_con- trol_idc. A sintaxe PPS modificada é ilustrada como segue: A sintaxe do cabeçalho da fatia modificada é ilustrada como segue:
[0073] Em relação ao escalonamento mencionado acima, é algo que pode ocorrer, por exemplo, em HEVC (H. 265). A ideia é que se um vetor de movimento for utilizado para codificar algum outro quadro, ele pode ser computador, o que seria o vetor de movimento que seria equi-valente em termos do deslocamento de posicionamento relativo entre: (i) a foto atual e (ii) sua foto de referência. Isso é baseado no posiciona-mento relativo do deslocamento indicado por um vetor de movimento na parte colocalizada de outra foto e baseado no deslocamento de posici-onamento relativo entre (iii) aquela foto e (iv) a foto a qual estava se referindo como sua foto de referência. Ou seja, os próprios vetores de movimento podem ser codificados baseados em previsão, com o vetor de movimento para o bloco no quadro alvo atual sendo codificado com relação a um vetor de movimento anterior para um bloco espacialmente correspondente no quadro anterior. O vetor de movimento para o bloco alvo é então sinalizado no fluxo contínuo de bits 33 codificado somente em termos de uma diferença (por exemplo, tipicamente um delta) entre a versão prevista e a versão real. O decodificador pode então recriar um vetor de movimento codificado realizando a mesma previsão na lateral do decodificador e adicionando o delta.
[0074] Entretanto, a faixa do quadro temporal dos dados codificados não é sempre constante, e também pode ser uma diferença entre a or-dem na qual as fotos são codificadas no fluxo contínuo de bits e a ordem na qual eles são capturados e exibidos. Essas relações temporais podem ser computadas e então utilizadas para escalar o vetor de movimento de modo que ele represente basicamente a mesma velocidade de movimento na mesma direção. Ou seja, a versão prevista do vetor de movimento não é somente igual ao vetor de referência, mas preferi-velmente seja uma versão escalada dele. Isso é conhecido como previ-são do vetor de movimento temporal.
[0075] O processo de decodificação do vetor de movimento (MV) atual no padrão HEVC pode ser resumido como a seguir. 1. Determine como o MV deve ser previsto no decodificador e se um vetor de movimento delta (MVD) foi ou não enviado no fluxo contínuo de bits codificado a partir do codificador (isso pode envolver algumas indicações de sintaxe). 2. Gere o vetor de movimento previsto (PMV). Isso cria um par de números inteiros (px, py). Os números inteiros são assumidos para representar deslocamentos com precisão de posição de amostra de % no domínio de luma. 3. Se nenhum MVD for enviado, defina o valor do MV (mx, my) para (px, py); caso contrário, decodifique o par de números inteiros (px, py) como (dx, dy), e defina o MV (mx, my) para (px + dx, py + dy). O MV é interpretado como representando deslocamentos de amostra de % no domínio luma. Observe: a distinção luma somente interessa se o vídeo estiver em um formato como 4:2:2 ou 4:2:0 que utilize uma re-solução diferente no canal de luma do que nos canais de croma; se, ao invés disso, o vídeo estiver no formato 4:4:4, por exemplo, o desloca-mento é interpretado como tendo unidades de amostra de 1/4 para todas as grades de amostragem. 4. Armazene o valor final (mx, my) para subsequente uso para gerar PMVs subsequentes (e controlar a filtragem de desbloqueio e etc.).
[0076] Nas modalidades da presente descrição, quando o modo de vetor de movimento de pixel de número inteiro está sendo utilizado, o vetor de movimento escalado pode ser arredondado no processo de de- codificação para acomodar a restrição para a resolução do pixel de número inteiro. Por exemplo, o processo de decodificação do vetor de movimento pode ser modificado como a seguir. 1. Determine como o MV deve ser previsto no decodificador e se um vetor de movimento delta (MVD) foi ou não enviado no fluxo contínuo de bits decodificado a partir do codificador (isso pode envolver algumas indicações de sintaxe). 2. Gere o vetor de movimento previsto (PMV). Isso cria um par de números inteiros (px, py). Os números inteiros são assumidos para representar deslocamentos com precisão de posição de amostra de % no domínio de luma. 3. Se operar no modo de precisão de número inteiro, faça isso: a. Encerre o valor de previsão para fazer com que corres-ponda a um deslocamento de número inteiro - por exemplo, crie (rx, ry) = (round(px/4), round(py/4)). b. Se nenhum MVD for enviado, defina o valor de MV (mx, my) para (4*rx, 4*ry); caso contrário, decodifique o par de números in-teiros (px, py) como (dx, dy), e defina o MV (mx, my) para (4*(rx + dx), 4*(ry + dy)). O MV é então interpretado como representando desloca-mentos de amostra de % no domínio de luma (Nota: novamente a dis-tinção de luma interessa somente se o vídeo estiver em um formato como 4:2:2 ou 4:2:0). 4. Caso contrário (ou seja, quando operando no modo de precisão de amostra de %), faça isso: Se nenhum MVD for enviado, de-fina o valor de MV (mx, my) para (px, py); caso contrário, decodifique o par de números inteiros (px, py) como (dx, dy), e o MV (mx, my) é defi-nido para (px + dx, py + dy). O MV é novamente interpretado como re-presentando deslocamentos de amostra de 1/4 no domínio de luma. 5. Armazene o valor final (mx, my) para subsequente uso para gerar PMVs subsequentes (e controlar a filtragem de desbloqueio e etc.).
[0077] Entretanto, o processo acima não é necessário para todas as modalidades possíveis. A abordagem destacada acima assume que o decodificador opera no domínio de pixels de % a partir do início de modo que o escalonamento na previsão do vetor de movimento ocorra no domínio de pixels de %. Entretanto, de fato o decodificador não tem necessariamente que saber o que as unidades significam nesse estágio. Assim, é possível tomar uma abordagem alternativa de modo que nenhuma interpretação seja colocada nas unidades até mais tarde, quando utilizada para, na verdade, gerar a imagem.
[0078] Descrevemos a seguir um processo de decodificação de acordo com as modalidades de tal abordagem alternativa. Como acima, pelo menos um dos valores do vetor de movimento é codificado de ma-neira diferente, com o módulo de previsão de movimento 73 sendo con-figurado para prever o valor do vetor de movimento pelo escalonamento de outro dos ditos valores do vetor de movimento. Pelo menos um dos valores do vetor de movimento pode ser codificado de maneira diferente em termos de um valor delta, e o módulo de previsão de movimento 73 pode ser configurado para prever o valor do vetor de movimento pelo escalonamento de outro dos ditos valores do vetor de movimento para produzir um valor do vetor de movimento escalado, e então adicionar o valor delta ao valor do vetor de movimento escalado. Entretanto, dife-rente do que está acima, o módulo de previsão de movimento 73 é ainda configurado para interpretar o valor do vetor de movimento nas ditas unidades do pixel de número inteiro (quando o modo de número inteiro está sendo utilizado) sem arredondá-lo para a resolução do pixel de nú-mero inteiro após o escalonamento. Isso é possível evitando colocar uma interpretação nas unidades no escalonamento. O módulo de previsão de movimento 73 pode ser configurado para interpretar o valor do vetor de movimento nas ditas unidades do pixel de número inteiro realizando a adição do valor delta ao valor do vetor de movimento esca-lado sem arredondar o valor do vetor de movimento escalado para a resolução do pixel de número inteiro. O valor resultante do vetor de mo-vimento é somente interpretado em termos de número inteiro ou unidades de pixel fracionário quando utilizado para gerar a imagem. O valor resultante é também armazenado para uso na previsão de um ou mais subsequentes vetores de movimento sem colocar uma interpretação no valor armazenado em termos de número inteiro ou de unidades fracio-nárias.
[0079] Por exemplo, de acordo com tal alternativa, o processo de decodificação do vetor de movimento pode ser implementado como a seguir. 1. Determine como o MV será previsto no decodificador e se um vetor de movimento delta (MVD) foi ou não enviado para o fluxo contínuo de bits codificado a partir do codificador (isso pode envolver algumas indicações de sintaxe). 2. Gere o vetor de movimento previsto (PMV). Isso cria um par de números inteiros (px, py). Entretanto, não se preocupe com o que isso pode representar - ou seja, não coloque nenhuma interpretação nas unidades nesse estágio. 3. Se nenhum MVD for enviado, defina o valor de MV (mx, my) para (px, py); caso contrário, decodifique o par de números inteiros (px, py) como (dx, dy), e defina o MV (mx, my) para (px + dx, py + dy). Se operando no modo de precisão de número inteiro, interprete o MV como representando os deslocamentos de todo o número inteiro no do-mínio de luma, ou seja, como representando o valor (4*mx, 4*my) nas unidades de deslocamento de amostra de %. Caso contrário (ou seja, quando operando no modo de precisão de amostra de %), interprete o MV como representando deslocamentos de amostra de 1/4 no domínio de luma, ou seja, como representando o valor (mx, my) nas unidades de deslocamento de amostra de % (Nota: novamente a distinção de luma somente interessa se o vídeo estiver em um formato como 4:2:2 ou 4:2:0). 4. Armazene o valor final (mx, my) para subsequente uso para gerar PMVs subsequentes (e controlar a filtragem de desbloqueio e etc.). Novamente, não se preocupe com o que isso pode representar. [00079] Assim, aquela etapa de arredondamento 3a descrita anteri-ormente é agora eliminada. Somente a interpretação dos números é modificada. Isso torna o processo de decodificação menos complexo, pois nenhuma modificação do processo de previsão do MV é necessária.
[00080] Observe que o arredondamento discutido acima se refere ao arredondamento da resolução de % (ou fracionária) para a resolução de número inteiro. Nos presentes padrões, há também um arredondamento a partir de uma precisão ainda mais minuciosa para a resolução de % como parte da previsão do vetor de movimento - e na modalidade alter-nativa acima, não é excluído que tal arredondamento preliminar ainda esteja presente.
[0080] Pode haver alguns efeitos colaterais ao operar dessa ma neira. Um efeito colateral pode ser que se algumas fotos utilizarem um modo diferente das outras, o escalonamento utilizado no processo de previsão do MV para a previsão do MV temporal não será correto. En-tretanto, isso seria um efeito muito pequeno - especialmente visto que seria raro ter essa situação de operar em modos diferentes, e também porque a precisão do MV temporal normalmente tem somente um be-nefício muito pequeno. Outro efeito colateral pode ser que os resultados do controle do filtro de desbloqueio podem depender dos valores de MV que são interpretados em um fator de escala diferente. Entretanto, esse feito também seria menos, especialmente visto que o desbloqueio pode ser desabilitado ou pode não ter muito efeito quando codificar o conteúdo da tela.
[0081] Outra possibilidade seria desabilitar a previsão do vetor de movimento temporal sempre que utilizar o movimento de número inteiro somente. Há também sintaxe no HEVC que deixa o codificador desabi- litar o uso daquele recurso. Essa seria uma maneira possível de evitar precisar do decodificador para ter um processo especial que opera dife-rentemente dependendo de se as diferenças são codificadas como nú-meros inteiros ou como valores fracionários. O ganho obtido da previsão do vetor de movimento temporal pode ser pequeno (ou zero) nesses casos de uso de qualquer forma, então o desabilitar não precisa ser in-desejável.
[0082] Será observado que as modalidades acima foram descritas somente como exemplo.
[0083] Por exemplo, enquanto a modalidade acima foi descrita em termos de blocos, não necessariamente limita às divisões chamadas blocos em qualquer padrão específico. Por exemplo, os blocos referidos aqui podem ser as divisões chamadas blocos ou monoblocos no padrão H.26xs.
[0084] O escopo da descrição limitou qualquer codec ou padrão es pecífico e, em geral, as técnicas descritas aqui podem ser implementa-das no contexto de um padrão existente ou uma atualização para um padrão existente, se um padrão H.26x, como H264 ou H.265 ou qualquer outro padrão, ou pode ser implementado em um codec feito sob medida. Ainda, o escopo da descrição não é restrito a qualquer representação específica de amostras de vídeo em termos de RGB, YUV ou de outro modo. O escopo não é limitado a qualquer quantização específica, nem a uma transformação DCT. Por exemplo, uma transformação alternativa, como uma Transformação Karhunen-Loève (KLT), poderia ser utilizada, ou nenhuma transformação pode ser utilizada. Ainda, a descrição não é limitada às comunicações VoIP ou comunicações sobre qualquer tipo de rede, mas poderia ser utilizada em qualquer rede ou meio passíveis de dados de comunicação.
[0085] Onde é dito que o deslocamento do vetor de movimento é restrito ou não restrito a um número de pixels de número inteiro, ou si-milares, pode se referir à estimativa de movimento em qualquer um ou dois dos canais de espaço de cor, ou à estimativa de movimento em todos os três canais de cor.
[0086] Ainda, a invenção não é limitada a selecionar entre a resolu ção de pixel de número inteiro e a de pixel de %. Em geral, as técnicas descritas aqui podem ser aplicadas para selecionar entre resolução do pixel de número inteiro e qualquer resolução de pixel fracionário, por exemplo, resolução de pixel ^; ou selecionar entre a resolução do pixel de número inteiro e uma pluralidade de diferentes modos de pixel fraci-onário, por exemplo, selecionar entre modos de pixel de número inteiro, 1/2 e %.
[0087] Ainda, o escopo da descrição não é limitado a uma aplicação na qual o vídeo codificado e/ou a transmissão de captura de tela é trans-mitido sobre uma tela, nem na qual as transmissões são ao vivo. Por exemplo, em outra aplicação, a transmissão pode ser armazenada em um dispositivo de armazenamento, como um disco óptico, disco rígido ou outro armazenamento magnético, ou cartão de memória “flash” ou outra memória eletrônica. Observe, portanto, que uma tela compartilhando transmissão não tem necessariamente que significar compartilhamento ao vivo (embora seja correspondentemente uma opção). Al-ternativamente ou adicionalmente, pode ser armazenado para compar-tilhamento com um ou mais usuário mais tarde, ou os dados de imagem capturados podem não ser compartilhados, mas preferivelmente somente gravados para o usuário que estava utilizando a tela naquele momento. Geralmente, a captura da tela poderia ser de quaisquer dados de imagem móvel consistindo em conteúdo de tela da lateral do codificador, capturado por qualquer meio adequado (não necessaria-mente lendo a partir do buffer de tela, embora essa seja uma opção), para ser compartilhado com um ou mais outros usuários (ao vivo ou não) ou simplesmente gravado para o benefício do usuário capturando ou somente para arquivo (talvez nunca para, na verdade, ser visualizado novamente visto que pode verificar).
[0088] Observe também que o codec não é necessariamente limi tado para codificar somente dados e vídeo de captura de tela. Em mo-dalidades, pode também ser capaz de codificar outros tipos de dados de imagem móvel, por exemplo, uma animação. Tais outros tipos de dados de imagem móvel podem ser codificados no modo de pixel fracionário ou no modo de pixel de número inteiro.
[0089] Ainda, observe que a codificação do interquadro não neces sariamente sempre tem que codificar com relação ao quadro anterior, mas geralmente alguns codecs podem permitir a codificação com rela-ção a um quadro diferente que não o quadro alvo, precedendo ou à frente do quadro alvo (assumindo um buffer externo adequado).
[0090] Ainda, como discutido previamente, observe que os próprios vetores de movimento podem ser codificados diferencialmente. Nesse caso, onde é dito que o vetor de movimento como sinalizado no fluxo contínuo de bits codificado é restrito a um número de pixels de número inteiro, ou similares, isso significa uma forma diferencialmente codificada do vetor de movimento é também restrita (por exemplo, o delta).
[0091] Ainda, o decodificador não necessariamente tem que ser im plementado em um terminal do usuário final, nem dados de imagem mó-vel extraídos para consumo imediato no terminal de recebimento. Nas implementações alternativas, o terminal de recebimento pode ser um terminal intermediário, como um servidor executando o software do de- codificador, para extrair dados de imagem móvel para outro terminal na forma decodificada ou transcodificada, ou armazenando os dados decodificados para consumo posterior. Similarmente, o codificador não tem que ser implementado em um terminal do usuário final, nem codificar dados de imagem móvel originando do terminal de transmissão. Em outras modalidades, o terminal de transmissão pode, por exemplo, ser um terminal intermediário, como um servidor executando o software do codificador, para receber dados de imagem móvel de forma não codifi-cada ou alternativamente codificada a partir de outro terminal e codifi-cando ou transcodificando aqueles dados para armazenamento no ser-vidor ou encaminhando para um terminal de recebimento.
[0092] Geralmente, quaisquer das funções descritas aqui podem ser implementadas utilizando software, firmware, hardware (por exemplo, circuito lógico fixo), ou uma combinação dessas implementações. Os termos “módulo,” “funcionalidade,” “componente” e “lógica”, como utilizados aqui, geralmente representam software, firmware, hardware, ou uma combinação deles. No caso de uma implementação de software, o módulo, funcionalidade ou lógica representa o código de programa que realiza tarefas específicas quando executado em um processador (por exemplo, CPU ou CPUs). O código de programa pode ser armazenado em um ou mais dispositivos de memória legíveis por computador. Os recursos das técnicas descritas abaixo são independentes de plataforma, significando que as técnicas podem ser implementadas em uma variedade de plataformas comerciais tendo uma variedade de proces-sadores.
[0093] Por exemplo, os terminais podem incluir uma entidade (por exemplo, software) que faz com que o hardware dos terminais do usuário realize operações, por exemplo, blocos funcionais de processadores, e assim por diante. Por exemplo, os terminais podem incluir um meio legível por computador que pode ser configurado para manter instruções que fazem com que os terminais do usuário, e mais especificamente o sistema operacional e o hardware associado dos terminais do usuário, realizem operações. Assim, as instruções para configurar o sis-tema operacional e o hardware associado funcionam para realizar as operações e, dessa forma, resultam na transformação do sistema ope-racional e do hardware associado para realizar funções. As instruções podem ser fornecidas aos terminais, pelo meio legível por computador, através de uma variedade de diferentes configurações.
[0094] Tal configuração de um meio legível por computador é um meio de suporte de sinal e, assim, é configurada para transmitir as ins-truções (por exemplo, como uma onda portadora) ou dispositivo compu-tacional, como através de uma rede. O meio legível por computador pode também ser configurado como um meio de armazenamento legível por computador e, assim, não é um meio de suporte de sinal. Exemplos de um meio de armazenamento legível por computador incluem uma memória de acesso aleatório (RAM), memória somente de leitura (ROM), um disco óptico, memória flash, memória de disco rígido e outros dispositivos de memória que podem utilizar técnicas magnéticas, ópticas e outras para armazenar instruções e outros dados.
[0095] Embora o assunto tenha sido descrito em linguagem especí fica para recursos estruturais e/ou ações metodológicas, deve ser en-tendido que o assunto definido nas concretizações anexas não é neces-sariamente limitado aos recursos ou ações específicas descritas acima. Preferivelmente, os recursos e ações específicos descritos acima são descritos como formas exemplares de implementar as concretizações.

Claims (20)

1. Método em um sistema de computador compreendendo uma ou mais unidades de processamento e memória, compreendendo as etapas de: receber dados codificados, como parte de um fluxo de bits, para pelo menos parte de uma sequência de vídeo, os dados codificados incluindo: um indicador, codificado em um cabeçalho em um pri-meiro nível de sintaxe de fluxo de bits, o indicador indicando (a) se precisão de vetor de movimento ("MV") é ou não controlada em um segundo nível de sintaxe de fluxo de bits menor do que o primeiro nível de sintaxe de fluxo de bits, e (b) se a precisão de MV não for controlada no segundo nível de sintaxe de fluxo de bits, caracterizado pelo fato de que, se a precisão de MV sendo con-trolada no primeiro nível de sintaxe de fluxo de bits é uma precisão de amostra inteira ou uma precisão de amostra fracionária para a sequência de vídeo, em que o primeiro nível de sintaxe de fluxo de bits é nível de sequência, e em que o segundo nível de sintaxe de fluxo de bits é nível de quadro ou nível de fatia, o indicador tendo um dentre três possíveis valores, os três valores incluindo: um primeiro valor possível indicando que a preci-são de MV não é controlada no segundo nível da sintaxe do fluxo de bits e que a precisão de MV, sendo controlada no primeiro nível da sintaxe do fluxo de bits, é a precisão da amostra fracionária; um segundo valor possível indicando que a preci-são de MV não é controlada no segundo nível da sintaxe do fluxo de bits e que a precisão de MV, sendo controlada no primeiro nível da sintaxe do fluxo de bits, é a precisão da amostra inteira; e um terceiro valor possível indicando que a preci-são de MV é controlada no segundo nível da sintaxe de fluxo de bits; e se a precisão de MV for controlada no segundo nível de sintaxe de fluxo de bits, para cada um de múltiplos quadros ou regiões da sequência de vídeo, um sinalizador para o quadro ou a região em um cabeçalho no segundo nível de sintaxe de fluxo de bits para o quadro ou a região, o sinalizador indicando para o qua-dro ou a região se a precisão de MV é a precisão de amostra inteira ou a precisão de amostra fracionária; e decodificar os dados codificados, em que a decodificação in-clui: determinar o indicador usando o cabeçalho no primeiro nível de sintaxe de fluxo de bits; com base no indicador, determinar se a precisão de MV é ou não controlada no segundo nível de sintaxe de fluxo de bits; se a precisão de MV não for controlada no segundo ní-vel de sintaxe de fluxo de bits, para os múltiplos quadros ou regi-ões, respectivamente, determinar, com base no indicador, se a precisão de MV para os múltiplos quadros ou regiões, respectiva-mente, é a precisão de amostra inteira ou a precisão de amostra fracionária; e se a precisão de MV for controlada no segundo nível de sintaxe de fluxo de bits, para cada um dos múltiplos quadros ou regiões, determinar, com base no sinalizador para o quadro ou a região no cabeçalho no segundo nível de sintaxe de fluxo de bits para o quadro ou a região, se a precisão de MV para o quadro ou a região é a precisão de amostra inteira ou a precisão de amostra fracionária.
2. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que o segundo nível de sintaxe de fluxo de bits é nível de quadro.
3. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que o cabeçalho no primeiro nível de sintaxe de fluxo de bits é um cabeçalho de sequência, e em que o cabeçalho no segundo nível de sintaxe de fluxo de bits é um cabeçalho de quadro.
4. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que o segundo nível de sintaxe de fluxo de bits é nível de fatia.
5. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que o cabeçalho no primeiro nível de sintaxe de fluxo de bits é um conjunto de parâmetro de sequência, e em que o cabeçalho no segundo nível de sintaxe de fluxo de bits é um cabeçalho de fatia.
6. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que a precisão de amostra fracionária é uma precisão de quarto de amostra.
7. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que a precisão de MV indicada pelo indicador ou pelo si-nalizador é para componentes horizontais de valores de MV ou compo-nentes verticais dos valores de MV, o método ainda compreendendo, durante a decodificação, redimensionar pelo menos um dos quadros de forma horizontal ou de forma vertical.
8. Método, de acordo com a reivindicação 7, caracterizado pelo fato de que os componentes horizontais dos valores de MV e os componentes verticais dos valores de MV têm diferentes precisões de MV.
9. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que a decodificação ainda inclui, para valores de MV de um determinado quadro ou região dentre os múltiplos quadros ou regiões: se a precisão de MV para um determinado quadro ou região for a precisão de amostra inteira, interpretar os valores de MV em unidades de amostras inteiras; e se a precisão de MV para um determinado quadro ou região for a precisão de amostra fracionária, interpretar os valores de MV em unidades de amostras fracionárias.
10. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que, para um determinado quadro ou região dentre os múl-tiplos quadros ou regiões, se o sinalizador para determinado quadro ou região não estiver presente no fluxo de bits, o sinalizador para o deter-minado quadro ou região é inferido como tendo um valor igual ao indi-cador.
11. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que a determinação do indicador usa dois bits do cabeçalho no primeiro nível de sintaxe de fluxo de bits.
12. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que a determinação do indicador inclui decodificar por en-tropia um valor de dois bits codificado por entropia do cabeçalho no pri-meiro nível de sintaxe de fluxo de bits.
13. Dispositivo de memória legível por computador tendo ar-mazenado nele dados codificados, como parte de um fluxo de bits, para pelo menos parte de uma sequência de vídeo, os dados codificados in-cluindo: um indicador, codificado em um cabeçalho em um primeiro nível de sintaxe de fluxo de bits, o indicador indicando (a) se precisão de vetor de movimento ("MV") é ou não controlada em um segundo nível de sintaxe de fluxo de bits menor do que o primeiro nível de sintaxe de fluxo de bits, e (b) se a precisão de MV não for controlada no segundo nível de sintaxe de fluxo de bits, caracterizado pelo fato de que, se a precisão de MV sendo controlada no primeiro nível de sintaxe de fluxo de bits é uma precisão de amostra inteira ou uma precisão de amostra fracionária para a sequência de vídeo, em que o primeiro nível de sintaxe de fluxo de bits é nível de sequência, e em que o segundo nível de sintaxe de fluxo de bits é nível de quadro ou nível de fatia, o indicador tendo um dentre três possíveis valores, os três valores incluindo: um primeiro valor possível indicando que a preci-são de MV não é controlada no segundo nível da sintaxe do fluxo de bits e que a precisão de MV, sendo controlada no primeiro nível da sintaxe do fluxo de bits, é a precisão da amostra fracionária; um segundo valor possível indicando que a preci-são de MV não é controlada no segundo nível da sintaxe do fluxo de bits e que a precisão de MV, sendo controlada no primeiro nível da sintaxe do fluxo de bits, é a precisão da amostra inteira; e um terceiro valor possível indicando que a preci-são de MV é controlada no segundo nível da sintaxe de fluxo de bits; e se a precisão de MV for controlada no segundo nível de sin-taxe de fluxo de bits, para cada um de múltiplos quadros ou regiões da sequência de vídeo, um sinalizador para o quadro ou a região em um cabeçalho no segundo nível de sintaxe de fluxo de bits para o quadro ou a região, o sinalizador indicando para o quadro ou a região se a precisão de MV é a precisão de amostra inteira ou a precisão de amostra fracionária; em que os dados codificados são organizados para facilitar decodificação de acordo com operações incluindo: determinar o indicador usando o cabeçalho no primeiro nível de sintaxe de fluxo de bits; com base no indicador, determinar se a precisão de MV é ou não controlada no segundo nível de sintaxe de fluxo de bits; se a precisão de MV não for controlada no segundo ní-vel de sintaxe de fluxo de bits, para os múltiplos quadros ou regi-ões, respectivamente, determinar, com base no indicador, se a precisão de MV para os múltiplos quadros ou regiões, respectiva-mente, é a precisão de amostra inteira ou a precisão de amostra fracionária; e se a precisão de MV for controlada no segundo nível de sintaxe de fluxo de bits, para cada um dos múltiplos quadros ou regiões, determinar, com base no sinalizador para o quadro ou a região no cabeçalho no segundo nível de sintaxe de fluxo de bits para o quadro ou a região, se a precisão de MV para o quadro ou a região é a precisão de amostra inteira ou a precisão de amostra fracionária.
14. Dispositivo de memória legível por computador, de acordo com a reivindicação 13, caracterizado pelo fato de que o ca-beçalho no primeiro nível de sintaxe de fluxo de bits é um cabeçalho de sequência, e em que o cabeçalho no segundo nível de sintaxe de fluxo de bits é um cabeçalho de quadro.
15. Dispositivo de memória legível por computador, de acordo com a reivindicação 13, caracterizado pelo fato de que o ca-beçalho no primeiro nível de sintaxe de fluxo de bits é um conjunto de parâmetro de sequência, e em que o cabeçalho no segundo nível de sintaxe de fluxo de bits é um cabeçalho de fatia.
16. Dispositivo de memória legível por computador, de acordo com a reivindicação 13, caracterizado pelo fato de que a de-terminação do indicador utiliza dois bits do cabeçalho no primeiro nível da sintaxe de fluxo de bits.
17. Sistema de codificador, compreendendo: um codificador configurado para executar operações para codificar pelo menos parte de uma sequência de vídeo, produzindo assim dados codificados, como parte de um fluxo de bits, para a pelo menos parte da sequência de vídeo, o fluxo de bits tendo um primeiro nível de sintaxe de fluxo de bits e um segundo nível de sintaxe de fluxo de bits menor do que o primeiro nível de sintaxe de fluxo de bits, em que as operações incluem: codificar um indicador em um cabeçalho no primeiro nível de sintaxe de fluxo de bits, o indicador indicando (a) se precisão de vetor de movimento ("MV") é ou não controlada no segundo nível de sintaxe de fluxo de bits, e (b) se a precisão de MV não é controlada no segundo nível de sintaxe de fluxo de bits, caracterizado pelo fato de que, se a precisão de MV sendo controlada no primeiro nível de sintaxe de fluxo de bits é uma precisão de amostra inteira ou uma precisão de amostra fracionária para a sequência de vídeo, em que o primeiro nível de sintaxe de fluxo de bits é nível de sequência, e em que o segundo nível de sintaxe de fluxo de bits é nível de quadro ou nível de fatia, o indicador tendo um dentre três possíveis valores, os três valores incluindo: um primeiro valor possível indicando que a preci-são de MV não é controlada no segundo nível da sintaxe do fluxo de bits e que a precisão de MV, sendo controlada no primeiro nível da sintaxe do fluxo de bits, é a precisão da amostra fracionária; um segundo valor possível indicando que a preci-são de MV não é controlada no segundo nível da sintaxe do fluxo de bits e que a precisão de MV, sendo controlada no primeiro nível da sintaxe do fluxo de bits, é a precisão da amostra inteira; e um terceiro valor possível indicando que a precisão de MV é controlada no segundo nível da sintaxe de fluxo de bits; e se a precisão de MV for controlada no segundo nível de sintaxe de fluxo de bits, para cada um de múltiplos quadros ou regiões da sequência de vídeo: determinar se a precisão de MV para o quadro ou a região é a precisão de amostra inteira ou a precisão de amostra fracionária; e definir um sinalizador para o quadro ou a região em um cabeçalho no segundo nível de sintaxe de fluxo de bits para o quadro ou a região, o sinalizador indicando se a precisão de MV para o quadro ou a região é a precisão de amostra inteira ou a precisão de amostra fracionária; e um buffer de emissão para armazenar os dados codificados, como parte do fluxo de bits, os dados codificados incluindo: o indicador, codificado no cabeçalho no primeiro nível da sintaxe de fluxo de bits; e se a precisão de MV for controlada no segundo nível de sintaxe de fluxo de bits, para cada um dos múltiplos quadros ou regiões, o sinalizador do quadro ou da região no cabeçalho no segundo nível de sintaxe de fluxo de bits para o quadro ou a região.
18. Sistema de codificador, de acordo com a reivindicação 17, caracterizado pelo fato de que a codificação do indicador usa dois bits no cabeçalho no primeiro nível de sintaxe de fluxo de bits.
19. Sistema de codificador, de acordo com a reivindicação 17, caracterizado pelo fato de que a codificação do indicador inclui codificar por entropia um valor de dois bits para o cabeçalho no primeiro nível de sintaxe de fluxo de bits.
20. Sistema de codificador, de acordo com a reivindicação 17, caracterizado pelo fato de que os quadros têm um tipo de conteúdo, em que a precisão de MV é a precisão de amostra inteira se o tipo de conteúdo for um tipo de conteúdo de captura de tela, e em que a precisão de MV é a precisão de amostra fracionária se o tipo de conteúdo é um tipo de conteúdo de vídeo de câmera.
BR122022001655-3A 2014-01-08 2015-01-07 Método, dispositivo de memória legível por computador e sistema de codificador BR122022001655B1 (pt)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US61/925,108 2014-01-08
US61/934,506 2014-01-31
US14/530,625 2014-10-31

Publications (1)

Publication Number Publication Date
BR122022001655B1 true BR122022001655B1 (pt) 2024-05-07

Family

ID=

Similar Documents

Publication Publication Date Title
US11546629B2 (en) Representing motion vectors in an encoded bitstream
KR102310752B1 (ko) 슬라이스 레벨 인트라 블록 카피 및 기타 비디오 코딩 개선
TWI663869B (zh) 區塊可適性顏色空間轉換寫碼
KR102271780B1 (ko) 화면 콘텐츠 데이터의 비디오 인코딩
KR20230002335A (ko) 컬러 포맷 지원을 위한 적응적 루프 필터링
CN111416977B (zh) 视频编码器、视频解码器及相应方法
CN118509589A (zh) 用于视频编解码的残差和系数编解码
BR122022001655B1 (pt) Método, dispositivo de memória legível por computador e sistema de codificador
BR112016015618B1 (pt) Decodificador, método e dispositivo de hardware de rede para representação dos vetores de movimento em um fluxo contínuo de bits codificado