O Sistema MUAN foi desenvolvido para a plataforma Linux e a parte do software utiliza várias bibliotecas ou código de programas que são livremente distribuídos, tornando o aplicativo bastante flexível. A idéia principal do sistema MUAN é mostrar imagens vindas de uma câmera de video e permitir ao usuário selecionar as imagens desejadas. Um grupo de imagens selecionadas/capturadas formará uma animação. A maneira como esse processo funciona e quais as suas necessidades são descritas abaixo.
O software MUAN prove características muito importantes para a animação quadro-a-quadro, tais como alternar entre uma imagem já capturada e uma imagem da câmera, prévia instantânea da animação, apagar ou inserir quadros (frames), marcação de frames e "flip".
Esta última característica é muito útil para a animação quadro-a-quadro porque permite a comparação do último frame capturado com a imagem proveniente da câmera ( imagem ao vivo ), para que o usuário possa checar se o frame que será capturado é o desejado, permitindo o ajuste da cena. Marcadores de frames são utilizados para modificar a duração, exibir ou ainda apagar um intervalo de frames. Por “duração” de um frame, queremos dizer o tempo que este será repetido dentro da seqüência de animação, como mostrado na figura abaixo.

Para implementar os recursos de animação quadro-a-quadro, criamos uma lista de imagens que guarda os frames da animação, ou seja, as imagens capturadas com suas propriedades como tempo de permanência, marcação, duração e posição na lista. Com esta lista, podemos manipular as posições, visualizando qualquer frame da animação a qualquer momento. Assim, na interface do usuário são fornecidos componentes para exibir ou parar a animação, voltar, avançar, ir ao primeiro frame, ao último ou a uma posição de frame qualquer na lista, limpar toda a lista ou remover frames da lista. Além disso, o usuário pode escolher se a aplicação está no modo câmera, mostrando a imagem atual vista pela lente, ou no modo memória, mostrando as imagens já capturadas. Em ambos os modos, as imagens são mostradas numa janela OpenGL. Assim, uma imagem a ser mostrada e' um conjunto ordenado (vetor) de pixels no sistema de cores RGB, embora na lista, os frames armazenados estejam no formato DV. Apesar desse formato conter informação de imagem e som, seu tamanho é mais comprimido que um simples vetor de pixels.
Devido ao fato da aplicação precisar mostrar as imagens atuais vindas da câmera, trabalhamos com processos paralelos, onde um deles está continuamente recebendo imagens da câmera em tempo real. Quando utilizamos uma camera com firewire, a aplicação estabelece comunicação com a câmera e captura os dados no formato DV. Imagens no formato DV têm a proporção de 3:2, ou seja, widescreen. Para o nosso propósito, não estamos trabalhando com som, nosso foco esta em capturar apenas imagens, então o frame DV capturado tem sua trilha de áudio apagada. Quando a conexão com a câmera é feita através da entrada RCA/composta ou S-video, a aplicação abre comunicação direta com o dispositivo, através do video4linux (v4l), capturando as imagens como um conjunto ordenado de pixels no sistema de cores RGB com 24 bits por pixel. Nesse caso, as imagens capturadas estão na proporção de 4:3, por isso colocamos tarjas pretas nas laterais da imagem e convertemos ao formato DV para incluirmos na lista de frames capturados.
Uma vez que todos os frames desejados foram capturados, o usuário pode salvar a animação gerarando um arquivo de vídeo. O Muan pode gravar arquivos de vídeo nos formatos AVI ou MPEG. Outra opção é salvar cada frame como um arquivo de imagem no formato JPEG. Assim, fornecemos funções para ler arquivos de vídeo no formato AVI ou MPEG e arquivos de imagem no formato RAS ou JPG. O usuário pode abrir um desses arquivos e editá-lo, ou pode inserir arquivos nesses formatos numa animação que está sendo criada.
Tornando a aplicação mais amigavel, também estão presentes na interface com o usuário opções como:
Podemos descrever as interações do nosso sistema da seguinte maneira :

Para implementar as funcionalidades listadas na seção Descrição do Sistema, usamos algumas bibliotecas comumente utilizadas na plataforma Linux e que são distribuídas livremente.
Criamos uma biblioteca de vídeo que faz a interface de comunicação com os dispositivos de entrada e saida (I/O) utilizando as bibliotecas e drivers do proprio linux de acordo com o tipo de conexão ( firewire ou V4L ). No caso da conexão firewire, a interface com ieee1394 ( ver seção Captura e Exibição de Imagem no Linux ) foi baseada na classe IEEE1394 Reader, que é parte do aplicativo Kino e captura dados DV de forma assincrona através da biblioteca libraw1394. Assim, os frames que estao sendo continuamente capturados por um processo paralelo vao sendo armazenados numa memoria. No caso da conexão V4L, a biblioteca de vídeo interage diretamente com o driver V4L capturando uma imagem toda vez que o aplicativo precisa.
Para implementar as funções de armazenamento de animaçoes em arquivos de vídeo, usamos as bibliotecas libavcodec e libavformat, que fazem parte do projeto FFmpeg (htto://ffmpeg.mplayer.hu). FFmpeg tem as funções de gravar, converter e fazer stream de áudio e vídeo e é desenvolvido sobre Linux, embora possa ser compilado na maioria dos sistemas operacionais, o que inclui o Windows. A biblioteca Libavcodec contém todos os COdificadores e DECodificadores (codecs) de áudio e vídeo do FFmpeg. A maioria desses codecs foi programada do zero para garantir melhor performance e alto re-uso de código. A biblioteca libavformat contém parsers e geradores para todos os formatos comuns de áudio e vídeo. Com essas bibliotecas o aplicativo é capaz de ler e escrever arquivos MPEG.
Para importar imagens em JPEG para uma animação ou exportar os frames de uma animação no formato JPEG, utilizamos a biblioteca libjpeg versão 6b que é livre e bastante utilizada para manusear o formato de imagens JPEG. Ela foi escrita e é distribuída pelo IJG (http://www.ijg.org). Nosso código para a conversão de e para esse formato foi baseado, respectivamente, nos programas djpeg e cjpeg, que são incluídos nessa biblioteca.
A classe ImgList implementa a representação da animação com uma lista utilizada para guardar frames. E para representar imagens ou os frames de uma animação, utilizamos duas classes: uma que implementa o frame apenas como uma imagem, ou seja, um vetor de pixels (cores), e outra que implementa o frame como dados de vídeo digital (DV), como os vindos de dispositivos digitais conectados por firewire. Essa segunda representação também foi implementada com base no aplicativo Kino, usando a classe Frame que fornece utilitários para processar frames de video digital através da biblioteca libdv do Linux. O codec Quasar DV (libdv) é um software codec para o formato DV, formato este utilizado pela maioria das filmadoras digitais, normalmente aquelas com interface IEEE1394. A Libdv (http://libdv.sourceforge.net) foi desenvolvida de acordo com os padrões oficiais para video DV : IEC 61834 e SMPTE 314M.
Outra biblioteca C livre bastante utilizada que usamos no MUAN é a libsndfile. Libsndfile é uma API simples e fácil de usar para leitura e gravação de um grande número de formatos de arquivo de audio que trabalham com amostras de som e pode ser utilizado em Unix, Win32, MacOS e outros. No linux, a libsndfile pode trabalhar sobre o driver ALSA ( Arquitetura Avançada de Som do Linux ), que fornece funcionalidades de áudio e MIDI ao sistema operacional, e 'e como estamos funcionando. Como já foi dito, não estamos trabalhando com áudio para animação, mas às vezes precisamos de áudio na interface com o usuário, o que permite uma interação melhor e mais fácil. Desta forma, estamos utilizamos a libsndfile e, para tal, necessitando do driver ALSA no computador.