A. Yargısal Denetim
2. Özel Hayata Müdahale ve Ulusal Yargı Kararları
Para analisar o desempenho do controlador DM368 na compressão de vídeo de acordo com o padrão H.264, foi desenvolvida uma aplicação em linguagem C (Anexo K) para ser executada na LeopardBoard. Devido às limitações do sensor utilizado (ver secção 3.3) os vídeos comprimidos nesta aplicação são obtidos a partir de ficheiros.
3.4.1 Seleção dos ficheiros alvo de compressão
Para testar o H.264 procuraram-se ficheiros com diferentes resoluções e com diferentes níveis de complexidade, por exemplo em termos de quantidade de movimento. Relativamente à resolução, a máxima testada foi de 1440x1440. A Tabela 3.3 apresenta uma breve descrição dos ficheiros utilizados, os quais podem ser encontrados no Anexo L.
Tabela 3.3. Descrição dos ficheiros de vídeo utilizados nos testes.
Nome Resolução Duração Descrição
Stefan CIF
(352x288)
300 frames
(30 fps) Vídeo com muito movimento e muito detalhe.
Hall CIF
(352x288)
300 frames (30 fps)
Câmara parada, em ambiente interior. Cena com pouco movimento. Vídeo típico de
videovigilância.
Davinci 720P
(1280x720)
100 frames (30 fps)
Vídeo computorizado, com fundo de cor constante, a qual muda gradualmente entre
47
Nome Resolução Duração Descrição
BigBuckBunny 1920x1088 100 frames
(30 fps)
Vídeo computorizado, com fundo estático. Tem pouco movimento, mas algum detalhe.
SolarCoronalHoles 1440x1440 103 frames
(30 fps)
Imagem estática, com o objeto a executar movimento lento de rotação.
Todos os ficheiros foram utilizados no formato NV12, uma vez que este é o único suportado pelo codificador [57].
3.4.2 Aplicação desenvolvida para analisar o codificador H.264
O estudo do padrão H.264 foi realizado com base nas referências [2], [15], [24], [25], [33], [34], [57], [61]–[63], a partir do qual foi realizado um resumo que pode ser analisado no Anexo F. A partir deste resumo (e como já se referiu na secção 3.2.2) verifica-se que o codificador H.264 permite configurar uma multiplicidade de parâmetros (ver Anexo J). Neste trabalho procurou-se analisar como varia o desempenho da codificação em função de alguns deles, nomeadamente: a utilização do filtro de remoção de artefactos, o nível de quantização, a periodicidade de frames do tipo I, o algoritmo de controlo da taxa de bits, e a taxa de transmissão de bits do canal. Para além disso, procurou-se também avaliar o desempenho de codificador configurado segundo as recomendações sugeridas pela TI em [61], para os seguintes diferentes tipos de aplicações: broadcasting/streaming, videovigilância, videoconferência e armazenamento.
O broadcasting consiste na transmissão de sinais de áudio e vídeo contendo programas para uma dada audiência. Aplicações broadcast podem transmitir em “tempo real”, como eventos de desporto, ou podem transmitir dados pré-gravados, como filmes e séries [61]. O streaming distingue-se do broadcast na medida em que a transmissão ocorre para apenas um cliente, o qual reproduz o conteúdo recebido sem que o armazene no dispositivo recetor [61]. Um servidor de streaming distribui
48
conteúdo como vídeo “on demand”, eventos em direto e listas de reprodução de conteúdo pré-gravado.
Uma vez que o conteúdo transmitido nestes tipos de aplicações é variável, pode incluir sequências de vídeo com muitas mudanças de cena (muito movimento, por exemplo). Assim sendo, as configurações recomendadas para estes tipos de aplicações incluem frames do tipo I em intervalos curtos, e a utilização da transformada de blocos 8x8 na codificação das frames do tipo I.
Quanto às aplicações de videovigilância, são mais exigentes em termos de requisitos quando comparadas com outras aplicações de vídeo. Estas requerem elevada compressão devido às limitações de armazenamento e de largura de banda, baixa complexidade de forma a reduzir os custos, e escalabilidade para servir vários clientes na rede [61]. As aplicações de videovigilância envolvem tipicamente dois streams, um para a reprodução da sequência de vídeo em tempo real e outro de alta fidelidade para armazenamento ou análise [61]. No primeiro caso normalmente são usadas baixas taxas de bits e são requeridos atrasos reduzidos, enquanto no segundo caso são permitidas elevadas taxas de bits e maiores atrasos.
Numa aplicação de videoconferência a comunicação é interativa, permitindo a transmissão simultânea de sinais de áudio e vídeo entre duas ou mais localizações. Difere da videochamada na medida em que é desenvolvido não só para a comunicação entre 2 dispositivos, mas também para servir as necessidades para conferência, que envolve mais que 2 indivíduos [61]. São requeridos atrasos reduzidos, e a taxa de bits também é condicionada pelas limitações da rede. A recomendação da TI inclui também a utilização de fatias para evitar os erros de transmissão e para melhor se ajustar aos limites dos pacotes na rede.
Aplicações de armazenamento, como DVR, gravam vídeos no formato digital para um disco ou meio de memória local dentro de um dispositivo como STB e leitores de multimédia portáteis [61]. Uma vez que o conteúdo comprimido destina-se ao armazenamento local, não é necessário efetuar o controlo da taxa de bits para que seja constante, e são permitidos elevados atrasos. Quanto se tratam de dispositivos high-end como um DVR, o armazenamento é menos limitado que aquele em dispositivos low-end, como é o caso de smartphones, de modo que a taxa de bits máxima alcançável deve ser superior.
Para a realização dos vários testes foram criados “modos de compressão”, nos quais os diferentes parâmetros são configurados de forma específica, conforme as caraterísticas de codificação desejadas para cada teste. Os diferentes modos de compressão encontram-se descritos no Anexo L.
49
O fluxograma da Figura 3.5 apresenta o funcionamento da aplicação em linguagem C desenvolvida para analisar o desempenho do padrão H.264 no controlador selecionado. Esta aplicação começa por abrir um ficheiro cujo nome e dimensões (incluindo o número total de frames, NumFrames) lhes são indicados, e a compressão é realizada de acordo com os parâmetros do modo de compressão selecionado pelo utilizador.
Início
Inicialização do Codec Engine Run Time
Alocação de memória para guardar dados estatisticos
Abrir ficheiro YUV
Abrir Codec Engine
Selecionar e definir um conjunto de parâmetros para o codificador
Alocar e inicializar o codificador
Alocação de memória para os buffers dos dados de entrada e dados codificados
Inicializar os descritores dos buffers
FrameId < NumFrames? Codificar frame
Não
Escrever dados comprimidos no ficheiro .264
Ler frame Sim
Gerar ou atualizar o ficheiro dos dados estatísticos FrameId = FrameId + 1
Sincronização dos dados nos ficheiros
Fechar o ficheiro de entrada
Fim Criar e abrir o novo ficheiro .264
Fechar o codificador e Codec Engine
Libertar memória alocada
FrameId = 0
Fechar ficheiro .264
Figura 3.5. Fluxograma descritivo da aplicação desenvolvida para analisar o codificador H.264.
Para cada vídeo, esta aplicação cria um ficheiro de texto onde regista os diferentes modos com que o mesmo vídeo foi comprimido durante as diversas vezes que a aplicação foi corrida. Para cada modo com que o vídeo foi comprimido, são registadas também algumas caraterísticas desse modo, bem como o tempo que demorou a comprimir todo o vídeo, o tempo dedicado a cada frame e o tamanho de cada frame codificada.
50
O Matlab [64] foi utilizado para calcular o EQM entre um dado vídeo original e cada versão comprimida do mesmo. O ficheiro original e uma versão descomprimida são abertos, o EQM entre cada frame é calculado e o valor é guardado num ficheiro de texto. O código desenvolvido pode ser analisado no Anexo K.
Os vídeos foram descomprimidos recorrendo à ferramenta avconv [65], e o comando utilizado para tal poderá ser
avconv –i video.264 –pix_fmt nv12 video.yuv .