5 CONTROLE DE COMPLEXIDADE DO H.264/AVC COM TREINAMENTO OFF-LINE E IMPLEMENTAÇÕES DE
5.3 ESCALABILIDADE EM COMPLEXIDADE USANDO O CODIFICADOR IPP
5.3.1 Implementação H.264/AVC da Intel R
O codificador IPP é disponibilizado pela Intel R IPP por meio de códigos fonte exemplos de casos
de uso de sua biblioteca de primitivas de alto desempenho. O aplicativo umc_video_enc_con
apresenta a interface para um codificador H.264/AVC em perfil HIGH [16]. Além dos parâmetros de compressão presentes em outras implementações do codificador H.264/AVC, a implementação IPP oferece um conjunto extra de parâmetros para escalonar a complexidade computacional e, portanto, a distorção de uma sequência de vídeo comprimida.
O primeiro dos parâmetros adicionais, Sub-block split, é responsável pelo controle de como o codificador irá percorrer o esquema de particionamento de macroblocos em estrutura quadtree durante as predições Inter quadros. Há três opções:
(i) permitir compensação de movimentos usando apenas blocos de16 × 16 pixels;
(ii) permitir compensação de movimentos usando blocos de tamanhos até8 × 8 pixels e
(iii) permitir compensação de movimentos usando blocos de tamanhos até4 × 4 pixels.
Speed/Quality Grade é o segundo parâmetro, responsável pela habilitação/desabilitação de
ferramentas de otimização de forma que seja possível trocar velocidade por ganho de compressão. Sua função é gerenciar o processo de otimização RD, a precisão da estimação de movimentos (o nível de refinamento sub-pixel) e o tamanho do buffer de quadros de referência.
Durante a codificação, ele é representado por uma variável inteira. É permitido ao usuário ajustar a sua faixa de valores de acordo com a lista abaixo:
• 0: As funções de custo são avaliadas a partir da SAD, Sum of Absolute Differences.
• 1: Além da opção anterior, inclui partições Intra-quadro nas predições de quadros P.
• 2: Além da opção anterior, inclui a estimação de movimentos independentes para os planos de crominância e os custos de um macrobloco em termos de taxa e distorção.
• 3: Além da opção anterior, inclui quadros B e ativa a otimização das predições usando otimização por taxa vs. distorção.
• 4: Além da opção anterior, permite que a estimação de movimentos seja realizada em precisões fracionárias de pixels.
• 5: Além da opção anterior, permite que a utilização de todos os quadros de referência na estimação de movimentos.
O último parâmetro de relevância, Optimal Quantization, é basicamente auto-explicativo: habilita ou desabilita o processo de otimização na quantização dos coeficientes transformados.
Os parâmetros expostos acima manipulam o desempenho do estágio de predição e podem ser ajustados para prover escalabilidade em complexidade. A seguir, apresenta-se uma alteração aplicada à semântica do parâmetroSub-block splitpara restringir de maneira suave a complexidade de codificação.
5.3.1.1 Refinamento do parâmetro Sub-block split
O parâmetroSub-block splité limitado originalmente quanto ao arranjo possível de partições de predição a que um macrobloco pode ser submetido. O codificador IPP teve suas partições arranjadas em uma árvore do tipo quadtree que é cortada para reduzir a complexidade computacional. A ideia básica é que, quanto mais próximo da raiz for aplicado o corte (ou quanto maior for o tamanho das partições de macrobloco a ser testado), menores serão as opções de testes de predições disponíveis.
As alterações propostas visam a refinar a forma como se descartam os modos de predição. Em vez de ficar vinculado ao conceito de quadtree, a contribuição proposta por esta tese consiste em utilizar subconjuntos das partições disponíveis utilizando arranjos de partições agrupados em ordem crescente de complexidade.
Convém definir alguns símbolos empregados na modificação proposta do parâmetros. Sejam:
• I16MBCDONLY: macrobloco de 16×16 pixels predito por técnica Intra-quadro que usa no contexto apenas o nível DC dos macroblocos vizinhos;
• I16MB: macrobloco de 16×16 pixels predito por técnica Intra-quadros;
• I8MB: macrobloco de 8×8 pixels predito por técnica Intra-quadros;
• I4MB: macrobloco de 4×4 pixels predito por técnica Intra-quadros;
• ZMV: macrobloco de 16×16 pixels predito por técnica Inter-quadros e vetor de movimentos nulo (predição pelo macrobloco colocalizado no quadro de referência);
• P16x16: macrobloco de 16×16 pixels predito por técnica Inter-quadros;
• P16x8: macrobloco de 16×8 pixels predito por técnica Inter-quadros;
• P8x16: macrobloco de 8×16 pixels predito por técnica Inter-quadros;
• P8x8: macrobloco de 8×8 pixels predito por técnica Inter-quadros;
• P8x4: macrobloco de 8×4 pixels predito por técnica Inter-quadros;
• P4x8: macrobloco de 4×8 pixels predito por técnica Inter-quadros;
Assume-se que partições de macroblocos maiores são menos complexas computacionalmente, já que é menor o número de subunidades necessárias para montar o macrobloco. Além disso, são demandados menos parâmetros na sua codificação. Em contrapartida, uma partição menor é capaz de ajustar-se melhor às particularidades do sinal de vídeo, mas exigirá um número maior de subunidades na montagem de um macrobloco e, para cada uma dessas subunidades, haverá um número maior de parâmetros de codificação.
Exceto por I16MBCDONLY e ZMV, todos os outros elementos possuem um representante sintático no padrão H.264/AVC. I16MBCDONLY foi escolhido como sendo a partição mais simples para a codificação de um macrobloco usando prediçao Intra-quadros; ZMV, por sua vez, é a versão mais simples para codificação Inter-quadros.
Para aumentar a granularidade das escalas de complexidade originalmente fornecidas pelo IPP, em vez de usar o corte em árvore quadtree em nós quadrados, como originalmente implementado no codificador IPP, o parâmetroSub-block splitfoi estendido para adotar os valores da Tabela 5.1.
Tabela 5.1: Tabela de valores estendidos do parâmetro Sub-block split.
Valor Descrição
-3 predição sem estimação de movimentos, usando apenas I16MBCDONLY
-2 predição sem estimação de movimentos, usando I16MB
-1 predição sem estimação de movimentos, usando I16MB, I8MB e I4MB
0 predição com estimação de movimentos, usando apenas ZMV
1 predição com estimação de movimentos, usando ZMV e I16MB, I8MB e I4MB
2 predição usando P16x16, I16MB, I8MB e I4MB
3 predição usando P16x16, P8x8, I16MB, I8MB e I4MB
4 predição usando P16x16, P16x8, P8x8, I16MB, I8MB e I4MB
5 predição usando P16x16, P16x8, P8x16, P8x8, I16MB, I8MB e I4MB
6 predição usando P16x16, P16x8, P8x16, P8x8, P4x4, I16MB, I8MB e I4MB
7 predição usando P16x16, P16x8, P8x16, P8x8, P8x4, P4x4, I16MB, I8MB e I4MB