MPEG-1

 

O MPEG-1 é a primeira geração de normas de vídeo a ser propostos pelo Motion Picture Experts Groups como norma, para fornecer codificação para suportes de armazenamento digital, tal como o CD, DAT, Winchester discs e drives ópticas.

A codificação para armazenamento digital e tida como um concorrente ao então domínio dos VCR, logo isso implicou que, aos débitos propostos entre 1 a 1.5 Mbit/s, a qualidade de vídeo obtida fosse pelo menos igual à obtida nos VCR. Além disso, a norma tem que estabelecer funcionalidades que já se tinham com os VCR, como, forward play, reverse play, freeze picture, fast forward, slow forward e acesso aleatório.

Tanto o H.261 e o MPEG-1, são normas definidas para débitos relativamente baixos, com resolução espacial baixa. Tal como o H.261, o MPEG-1 utiliza o DCT para codificação lossy dos erros de predição dos modos inter e intraframe. O algoritmo de codificação é uma extensão do H.261, tendo muitas ferramentas em comum. No entanto, os bitstreams gerados pelos dois, são incompatíveis, apesar das unidades de codificação serem similares.

 

Sistema MPEG-1:

 

A norma MPEG-1 define a sintaxe de como é que o áudio, vídeo e dados são combinados, usando apenas um stream de dados. Esta sequência é definida formalmente por stream ISO 11172. Tal como se pode observar na figura abaixo:

Ilustração 11 - Estrutura do Stream ISO 11172

A norma do sistema MPEG-1, define a estrutura de pacotes para a multiplexagem de áudio e vídeo num stream e também como mantê-lo sincronizado. A camada de sistema está organizada em duas sub-camadas conhecidas como camadas pack e packet. A camada pack consiste no header do pack que dá o relógio de referência do sistema (SCR) e o débito do stream multiplexado seguido de um ou mais pacotes. Cada pacote tem o seu próprio cabeçalho que contem informação essencial acerca do tipo de dados que carrega. O objectivo da camada de sistema, é suportar a combinação dos streams elementares de vídeo e áudio. As funções básicas desta camada são as seguintes:

·         Apresentação Sincronizada dos streams descodificados;

·         Construção do stream multiplexado;

·         Inicialização de buffering para começar o playback;

·         Controlo continuo do buffer;

·         Identificação do tempo.

Na camada do sistema, os elementos que tem interesse directo para a codificação e descodificação do vídeo, são específicos de operações em streams, nomeadamente multiplexagem e sincronização.

Multiplexação de streams elementares:

 

A multiplexagem de áudio, vídeo e dados é realizada ao nível do packet. Cada packet contém um tipo de dados elementar. A camada de sistema tem capacidade de juntar até 32 streams de áudio, 16 de vídeo e 2 de dados. Se forem necessários mais do que 2 streams de dados, então podem ser definidos substreams.

Sincronização

 

Streams elementares múltiplos são sincronizados através da Presentation Time Stamps (PTS) do stream ISSO 11172. Sincronização ponto-a-ponto é conseguida quando os codificadores guardam os Time Stamps (TS) durante a captura de raw data. Os receptores fazem então uso destes PTS associados a cada stream descodificado de modo a calendarizar as apresentações. A sincronização de playback está associada ao Master Time Base, que pode ser extraído de um dos streams elementares, ou do DSM (Digital Storage Media). Este tipo de sincronização pode ser esquematizado tal como se vê na figura seguinte:

Ilustração 12 - Codificador e Descodificador MPEG - 1

A ocorrência de PTS e outras informações como por exemplo Systems Clock Reference (SCR) e cabeçalhos de sistema vão ser essenciais para facilitar o acesso aleatório do bitstream de MPEG-1. Este conjunto de códigos deve então estar localizado perto da parte elementar do stream, de modo a que a descodifiação possa começar. No caso do vídeo, encontra-se perto do cabeçalho de uma interframe.

De modo a que a descodificação para um buffer seja garantida, a camada de sistema do MPEG-1 utiliza um Systems Target Decoder (STD) e Decoding Time Stamp (DTS). O DTS difere do PTS apenas no caso de imagens vídeo que requerem atraso adicional para reordenar durante o processo de descodificação.

Pré-processamento

A fonte de material pode existir em varias formas e formatos, como o MPEG-1 codifica vídeo na mesma resolução que o VCR, então é necessário que o material antes de ser codificado precisa de sofrer um pré-processamento de modo a ficar em SIF.

No MPEG-1 também é necessário realizar outro tipo de pré-processamento que consiste em reorganizar as imagens que entram para codificar. Este processo é chamado por reordenamento das imagens.

Devido aos requerimentos do acesso aleatório e à necessidade de alta eficiência na codificação, foi sugerido pelo MPEG que as imagens numa sequência de vídeo não deveriam ser codificadas todas da mesma maneira. Isto levou à criação de três tipos de tramas na sequência de vídeo:

Tramas I: são codificadas no modo intra. Estas tramas fornecem acesso directo à sequência de vídeo;

Tramas P: são codificadas utilizando o modo interframe, só utilizando predição nas tramas I e P previamente codificadas. Esta trama é utilizada ela própria (Ancora) para codificar futuras tramas. A codificação destas tramas é semelhante à da norma H.261;

Tramas B: são codificadas usando predição temporal para a frente e para trás, ou então combinações de ambas as imagens. Isto permite aumentar a eficiência da MC.

 

As tramas B dão origem a duas aplicações muito importantes:

 

·         Se as tramas B não forem usadas para fazer predições de tramas futuras, então estas podem ser codificadas com a compressão máxima possível sem que haja efeitos secundários. Isto é devido, a que se uma trama for mal codificada e for usada como predição, as distorções são transferidas para a próxima trama. Consequentemente, a próxima trama precisaria de mais bit de modo a corrigir a distorção, levando a que o bitrate aumenta-se em vez de diminuir.

·         Em aplicações em que se faça transmissão de vídeo sobre uma rede de comutação de pacotes, as tramas B podem ser descartadas (por exemplo: overflow de um buffer de um router) sem que isso afecte a descodificação da próxima trama. No entanto se alguma parte de uma imagem H.261 ou das tramas I e P no MPEG-1, forem corrompidas durante a transmissão, então efeito irá propagar-se até que estas sejam refrescadas.

 

A figura seguinte demonstra a relação entre cada uma das tramas.

Ilustração 13 - Exemplo de um GOP de MPEG-1

Como as tramas B usam as tramas I e P para realizar a predição, então estas (B) terão que ser codificadas depois destas (I e P). Este requer que se reordene as imagens recebidas pela fonte, sendo isto realizado pelo pré-processador.

Existe um quarto tipo de tramas, denominado por tramas D. Estas são codificadas em modo intraframe, onde apenas os coeficientes DC são retidos. Logo a qualidade da imagem é pobre, sendo normalmente utilizada para aplicações como o fast forward. As tramas D não fazem parte do GOP, logo estas não estão presentes nas sequências que contem os outros tipos de tramas.

Estrutura do vídeo

GOP (Group of pictures)

 

Na norma H.261, todas as tramas eram codificadas semelhantemente, sendo a trama (imagem) o topo da hierarquia de codificação no H.261. No MPEG-1 como existem vários tipos de tramas, foi definido como topo da Hierarquia o GOP. Ver figura 13.

 O tamanho do GOP é definido como a distância entre tramas I, que é representado pelo parâmetro N na norma. A distância entre as ancoras I/P e as tramas P e representada por M. Na figura apresentada N=12 e M=3. O GOP pode ter qualquer tamanho, mas deve ter pelo menos uma trama I em cada GOP. Aplicações que precisem de acesso aleatório, fast forward play ou fast e normal reverse devem usar GOPs pequenos. Os GOP podem começar em mudanças de cena, ou e, outros casos onde a compensação de movimento não é efectiva. O número de tramas B consecutivas é variável.

Imagem

 

Todos os três tipos de imagem, I, P e B, têm o mesmo tamanho, ou seja SIF com o formato 4:2:0.

Slice

 

Cada imagem está dividida em grupos de MBs chamados slices. No H.261 cada grupo de MB era denominado por GOB. A razão pela qual se define o slice, é a mesma pela qual se definiu o GOB, ou seja, para aumentar a resiliência aos erros. Numa imagem podem existir várias slices com tamanhos diferentes. Sendo a divisão dos slices diferente de imagem para imagem. Os slices podem começar e acabar em qualquer MB da imagem, tendo no entanto algumas limitações. O primeiro slice deve começar no primeiro MB da imagem e o último slice deve acabar no último MB da imagem. Concluindo-se que no formato SIF que tem 396 MB o máximo de slices é 396 e o mínimo 1.

Cada slice começa com um slice start code, e depois é seguido por um código que indica a posição e depois o tamanho do passo de quantificação. No H.261 o passo de quantificação era definido para cada GOB ou linha de GOBs, em MPEG-1 o passo de quantificação é definido para cada MB. Logo, em MPEG-1 a razão principal para definir slices não é para realizar o reset do quantificador, mas evitar a propagação de erros de canal.

Devido ás slices terem um grande overhead, é necessário optimizar a estrutura dos slices nas imagens, de modo a minimizar o efeito dos erros de canal ao mesmo tempo que se minimiza o overhead. Ou seja, usar slices pequenos para MB com energia significativa (intra-MB), e slices longos para aqueles com menos significância (MB das imagens B).

Macroblocos

 

A diferença entre os MB do H.261 e do MPEG-1 é no seu endereçamento, ou seja em MPEG-1 cada MB está endereçado em relação ao primeiro MB da imagem. Sendo o endereçamento feito por linhas ou seja no inicio da imagem o primeiro MB tem posição 0, o segundo 1 e assim sucessivamente até ao fim dos MB da imagem. De modo a reduzir o overhead do endereçamento, o MB são endereçados através de uma associação que consiste no endereço do último MB codificado menos o endereço do MB actual.

Bloco

 

A parte elementar da estrutura da imagem é o bloco, que consiste no bloco de 8 x 8 pixels, tanto para a luminância como para a crominância. Sendo aqui que é aplicado a codificação DCT.

 

Codificação

Quantificação através de uma matriz de pesos.

 

A insensibilidade do sistema visual humano ás altas-frequências pode ser explorado de modo a comprimir ainda mais o bit stream. Neste caso os coeficientes DCT de ordem superior são quantificados com passos de quantificação maiores do que os coeficientes de baixa frequência.

Ilustração 14 - Matrix com Pesos e Matrix Fixa.

Se a resolução da imagem for diferente do formato SIF, então tem-se que usar outra matriz, para obter melhores resultados. Isto deve-se a que a matriz é derivada da curva da sensibilidade visual ao contraste, a distâncias da ordem de 4 a 6 vezes a altura da imagem.

No entanto, não se pode usar pesos diferentes, ao codificar os MB no modo inter. Isto deve-se a que, as altas-frequências do erro de interframe não significam altas-frequências em termos espaciais. No H.261 só se usa matrizes com passo de codificação constante porque a maior parte das imagens em H.261 são codificadas no modo inter.

Estimação de movimento

 

A estratégia que se optou no MPEG-1 em relação à estimação de movimento é diferente da seguida no H.261, visto que houve grandes modificações a esse respeito, sendo elas as seguintes:

·         A estimação do movimento passou a ser obrigatória, o que não se verificava no caso do H.261;

·         Maior raio de procura;

·         Estimação de movimento com precisão de meio pixel;

·         Estimação bidirecional.

Controlo de Débito

 

Um bitstream de MPEG-1 contém diferentes tipos de imagens, tendo cada tipo de imagem a necessidade de um número diferente de bits para ser codificada. Além disso a complexidade da sequência de vídeo pode variar ao longo do tempo, sendo normalmente preferível gastar mais bits numa parte da sequência do que no resto.

·        Tamanho do buffer e atraso:

Quando o débito tem que ser constante, cada imagem vai ter um cabeçalho que irá conter um parâmetro que define o atraso para essa imagem (variable_delay_parameter, vbv_delay) de modo a deixar que os descodificadores sincronizem a descodificação. Este tempo representa o delay sendo medido em unidades de 1/90000s. Este número foi escolhido porque é quase um factor exacto da duração da imagem nos vários formatos (1/24,1/25, /1/29.97 e 1/30), e porque é comparável à duração de uma amostra de áudio. O atraso é dado por:

O bit rate é definido por R, sendo então o numero de bits no buffer de entrada dado por,

·        Controlo do débito e quantificação adaptativa:

O codificador tem que fazer com que o buffer de entrada do descodificador modelo, não sofra nem overflow nem underflow. Como o descodificador modelo retira instantaneamente do buffer todos os bits associados a uma imagem, é necessário controlar o número total de bit por imagem. No H.261, para o codificador controlar o débito bastava observar o conteúdo do buffer de saída, aumentando depois o passo de quantificação caso o buffer estivesse a encher rapidamente, e diminuir o passo de quantificação caso contrário. No MPEG-1, devido à existência de três tipos diferentes de imagens, onde cada uma delas gera um débito diferente, o processo de controlo é mais complexo. O codificador deve então alocar o número total de bits disponíveis nos vários tipos de imagem dentro de um GOP, de modo a que qualidade de imagem seja balançada ao longo do stream. Logo isto vai implicar que o controlo agora do passo de quantificação não seja geral para os três tipos de imagem, mas sim, cada tipo de imagem irá ter uma variação de passo diferente de modo a que a qualidade de imagem global se mantenha ao mesmo tempo que se faz este tipo de controlo.

 

Modos de Acesso Especiais

Acesso Aleatório

 

Para que o acesso aleatório seja possível, é necessário que se possa aceder a qualquer trama num tempo limitado e tão pequeno quanto possível (sendo normalmente 0.5 s), isto vai impor o uso de tramas de referência, as denominadas ancoras. O suporte de gravação deve possuir uma tabela de endereços que irá permitir o acesso rápido às tramas de referência, podendo-se a partir dai chegar à trama pretendida.

Fast Forward & Fast Reverse

 

O fast forward e Fast Reverse são suportados pelas imagens do tipo I ou P, desde que estas estejam suficientemente afastadas uma das outras. Por exemplo se as imagens I estiverem espaçadas entre si 12 imagens, então o descodificador será capaz de reproduzir a sequência a 12 vezes o ritmo normal, descodificando e reproduzindo apenas as imagens do tipo I. No entanto este esquema está dependente do tipo de dispositivo que é utilizado para armazenar a sequência de vídeo, devido a limitações a nível da velocidade de leitura.

Pausa e Step (Câmara Lenta)

 

A descodificação neste modo requer que o descodificador seja capaz de controlar o bitstream, e fazer o display da imagem descodificada sem que sejam descodificadas imagens adicionais.

Normal Reverse

 

De modo a fazer o play em reverse, é necessário primeiro descodificar cada GOP na direcção normal, armazenar as imagens descodificadas desse GOP e depois fazer o display destas pela ordem inversa. O problema deste método é que o descodificador precisa de memória suficiente para guardar as imagens todas do GOP. Uma maneira de reduzir a memoria é ter GOP pequenos, no entanto isso não está explicitado na norma. Outra maneira de reduzir a memória será através da reordenação das imagens, seja através de alteração da ordem de transmissão vinda da unidade de armazenamento, quer através da reordenação das imagens codificadas no buffer do descodificador. Tal como se mostra no seguinte exemplo:

Ilustração 15 - Exemplo de Descodificação e Reordenamento.

O descodificador irá descodificar as imagens na nova ordem, depois irá fazer o display destas em reverse. Como as imagens B não são descodificadas até que estejam prontas para o display, sendo então o buffer de display minimizado. A duas primeiras imagens B, 0 e 1, continuariam armazenadas no buffer de entrada até que a ultima imagem P do último grupo fosse descodificada.

Constrained Parameters:

 

Como a norma MPEG-1 oferece uma grande flexibilidade para os parâmetros da sequência de vídeo e uma vasta gama de resoluções espaço/temporais, aspect ratio e débitos binários. De modo a garantir interoperabilidade entre os fabricantes, definiu-se um conjunto de valores para os parâmetros de codificação que permite gerar Constrained Parameters Bitstreams. De seguida tem-se o quadro mostra as limitações impostas pela norma:

Dimensão horizontal da imagem

Menor ou igual a 768 pixels

Dimensão vertical da imagem

Menor ou igual a 576 pixels

Área da imagem

Menor ou igual a 396 pixels

Ritmo de pixel

Menor ou igual a 396x25 MB/s

Resolução temporal

Menor ou igual a 30 Hz

Gama de variação de vectores de movimento

-64 a + 63.5 usando ½ pixel

Dimensão da memória de entrada (modelo VBV)

Menor ou igual a 327680 bits

Débito binário

Menor ou igual a 1856000 bit/s (constante)

 

Conclusão

 

O MPEG-1 foi uma evolução em relação ao H.261, note-se também que os objectivos das duas normas eram diferentes, o H.261 tinha como objectivo as comunicações audiovisuais em tempo real, enquanto que o MPEG-1 tinha como objectivo substituir o VCR.

Apresentam-se de seguida as principais diferenças entre as duas normas:

·         Reordenamento das tramas: para codificar uma trama B é preciso que a codificação desta seja primeiro adiada até que sejam codificadas as imagens I e P.

·         Quantificação: MB codificados no modo intra são pesados subjectivamente de modo a simular distorções que sejam perceptíveis.

·         Estimação de movimento: o alcance da procura foi estendido e também foi aumentada a precisão da procura para 1/2 pixel. As imagens B usam MC bidireccional.

·        Não tem Filtro Loop

·        Armazenamento de tramas e os preditores: de modo a guardar as imagens ancora (I e P) para realizar a predição das imagens B.

·         Regulador do débito: como existe mais de que um tipo de imagem, então cada uma delas gera débitos diferentes.