"MÉTODO PARA COMPRIMIR UMA ÁRVORE HIERÁRQUICA QUE DESCREVE UM SINAL MULTIMÍDIA, MÉTODO PARA DECODIFICAR UM SINAL MULTIMÍDIA COMPRIMIDO e SINAL GERADO PELO REFERIDO MÉTODO PARA COMPRIMIR" O campo da invenção é o da compressão de dados. Mais particularmente, a invenção diz respeito a compressão de documento baseado em XML ("Linguagem de Marcação Estendida"). A invenção tem aplicações, em particular, mas não apenas, nos seguintes campos: aplicações de multimídia; ferramentas de indexação; ferramentas de manipulação de metadados; especificação MPEG-7; SMIL; TV a gualguer momento; a terceira geração de radiocomunicações (3GPP). Técnicas de compressão da tecnologia anterior para XML têm diversos inconvenientes. Em particular, elas não suportam ao mesmo tempo acesso rápido aos dados, altas taxas de compressão e construção progressiva do documento. Em outras palavras, na maior parte do tempo, quando uma das características supramencionadas é suportada, todas as outras características falham.
Uma das técnicas de compressão da tecnologia anterior é conhecida como BiM (MPEG Binário). Uma técnica como essa fornece um método para comprimir um documento XML bina-rizando a estrutura do documento, isso quer dizer, os nós de uma estrutura de árvore associados como o documento XML. Conseqüentemente, a taxa de compressão alcançada pela imple- mentação da técnica BiM é muito baixa, embora a técnica BiM permita um acesso rápido aos dados, construção progressiva do documento e capacidade de salto. É um objetivo da invenção compensar esses inconvenientes das técnicas anteriores.
Mais precisamente, a invenção visa fornecer uma técnica de compressão eficiente para documentos baseados em XML. A invenção também visa fornecer uma técnica de compressão para XML que forneça capacidade de salto, altas taxas de compressão e construção progressiva do documento. A invenção também visa comprimir eficientemente descritores MPEG-7.
Um outro objetivo da invenção é implementar um método para comprimir um documento XML que melhore bastante a taxa de compressão fornecida por uma técnica do tipo BiM, mas que forneça as mesmas funcionalidades fornecidas pela BiM.
Os objetivos supramencionados da invenção, bem como outros objetivos da invenção que surgirão posteriormente, são alcançados, de acordo com a invenção, por meio de um método para comprimir uma árvore hierárquica que descreve um sinal multimídia, a dita árvore compreendendo nós e folhas, que podem ser associados com dados de pelo menos duas naturezas distintas, chamadas de tipos de dados, em que o dito método implementa uma compressão de dados pelo menos para algumas das ditas folhas por meio de pelo menos duas técnicas de codificação de compressão, cada uma das técnicas sendo seletivamente associada a pelo menos um dos ditos tipos de dados.
De acordo com uma modalidade preferida da invenção, um método como esse compreende uma etapa de identificar pelo menos uma subárvores e uma etapa de alocar uma das ditas técnicas de codificação de compressão à dita subárvore.
Vantajosamente, um método como esse compreende uma etapa de implementar a dita técnica de codificação de compressão alocada à dita subárvore somente para as folhas da dita subárvore cujo conteúdo seja do tipo associado com a dita técnica de codificação de compressão, e as outras folhas da dita subárvore não são submetidas a nenhuma codificação de compressão.
De acordo com uma característica vantajosa da invenção, um método como esse implementa uma descrição paramé-trica das ditas técnicas de codificação de compressão.
Preferivelmente, um método como esse também compreende uma etapa de comprimir a estrutura da dita árvore.
Vantajosamente, a dita árvore é do tipo BiM (MPEG Binário) de acordo com o padrão MPEG7.
Preferivelmente, uma das ditas técnicas codificação de compressão implementa quantização linear.
Vantajosamente, uma das ditas técnicas de codificação de compressão implementa um algoritmo de compressão estatística.
Preferivelmente, o dito algoritmo é do tipo GZip.
Vantajosamente, o dito algoritmo é implementado simultaneamente para um conjunto de dados correspondente ao conteúdo de pelo menos duas folhas.
Preferivelmente, a dita árvore representa a estrutura de um documento do tipo XML (Linguagem de Marcação Estendida) . A invenção também diz respeito a um método para decodificar um sinal multimídia comprimido de acordo com o método supramencionado para comprimir uma árvore hierárquica.
Vantajosamente, um método como esse implementa uma etapa de refrescar um contexto de decodificação atual de acordo com informação do contexto de codificação levado pelo dito sinal.
Preferivelmente, o dito contexto atual define pelo menos um tipo de conteúdo, o dito método compreendendo uma etapa de implementação de uma técnica de decodificação de compressão associada com o dito tipo de conteúdo para as folhas que têm um conteúdo do dito tipo de conteúdo. A invenção também diz respeito a um sinal gerado pelo método supramencionado para comprimir uma árvore hierárquica .
Outras características e recursos da invenção ficarão mais claros sob a luz da descrição seguinte, dada como mero exemplo ilustrativo, mas não restritivo, e das figuras seguintes: A Figura 1 ilustra o conceito de contexto de codificação ; A Figura 2 descreve a estrutura de um elemento codificado de acordo com a técnica BiM; A Figura 3 ilustra algumas etapas implementadas de acordo com a invenção para comprimir o conteúdo das folhas de uma árvore hierárquica.
Antes de descrever com detalhes como implementar a invenção, primeiro recordaremos as principais características da técnica de compressão da tecnologia anterior, conhecida como técnica BiM.
Para facilitar o entendimento do documento, algumas referência estão reunidas no anexo 9 e referidas por todo o documento.
Todos os anexos fornecidos com o presente documento são parte da presente descrição da invenção. 1. Tecnologia Anterior Introdução Um contexto de codificação, ilustrado na figura 1, é um conjunto de informação de decodificação necessário enquanto se decodifica o fluxo de bits. Um contexto de codificação é aplicável a toda a subárvore do nó onde ele está definido. Em cada um dos nós da árvore, o contexto de codificação pode ser modificado, levando à criação de um novo contexto de codificação, aplicável a subárvore correspondente.
Um contexto pode levar diversas informações gue edita características aplicáveis a subárvore em guestão. Atualmente, no formato de codificação de subárvore BiM [1], essas características são capacidade de salto de uma subár-vore/contexto e codificação de múltiplos esguemas de uma su-bárvore/contexto (a fim de fornecer a característica de compatibilidade para trás e para frente) . Finalmente, o mecanismo de contexto pode ser descapacitado em cada subárvore a fim de economizar largura de banda; este é o modo congelado de contexto. 0 mecanismo de contexto de codificação fornece flexibilidade máxima em cada subárvore de uma árvore de documento e permite que características extensíveis sejam plu-gadas no mecanismo de codificação BiM.
Apresentamos agora o mecanismo de contexto atual usado em BiM.
Mecanismo de Contexto de Codificação Atual Definições CodingContext Um codingContext é um conjunto de informações, a informação contextual, necessário pelo decodificador para decodificar um fluxo de bits. Um codingContext é aplicável ao nó onde ele foi definido, e toda a subárvore correspondente a este nó. 0 codingContext atual (isto é, o contexto aplicável a um nó especifico de uma descrição) pode ser modificado dentro do documento (quer dizer, uma modificação de seu conjunto subjacente de informação). Cada modificação de um codingContext leva à criação de um novo codingContext, que levará o conjunto modificado de informação. É de se esperar que todos os codingContexts sejam empilhados, a fim de trazê-los de volta, quando o decodificador tiver terminado a decodificação de um contexto da subárvore correspondente.
Decodificador 0 BiM decoder é composto de três decodificadores: o decofificador de contexto: este decodificador é dedicado a decodificar a informação contextual. Conforme estabelecido anteriormente, a informação contextual não é parte da descrição. Este é um conjunto de informação que leva algumas características externas, compatibilidade à trás e à frente, salto rápido. o decodificador de elemento: este decodificador, o BiM regular um [1] é dedicado a decodificar a informação de elemento.
Partes do arquivo Cada elemento de uma descrição é codificado como o 3-pleto ilustrado na figura 2, onde à parte do cabeçalho é constituída de dois partes do arquivo, cujos tamanhos podem ser nulos: MC é à parte do arquivo de metacontexto; C é a parte do arquivo de contexto;
Elemento é à parte do arquivo de elemento, que é a parte do arquivo de codificação do elemento regular, ver [1] . À parte do arquivo de metacontexto MC contém a informação necessária pelo decodificador para decodificar a parte do arquivo C seguinte. Isso quer dizer que a parte do arquivo MC é a parte do arquivo de contexto da parte do arquivo de contexto C. À parte do arquivo de contexto C contém a informação capaz de alterar o conjunto de informações do contexto de codificação atual, e necessário pelo decodificador para decodificar a parte do arquivo do elemento seguinte. Isso quer dizer que à parte do arquivo C é a parte do arquivo de contexto da parte do arquivo de elemento.
Conjunto de Informação 0 contexto de codificação BiM atual leva um conjunto de informação, a informação contextual, que pode ser dividido em duas classe principais seguintes: a seção de metacontexto: se a informação estiver contida nesta seção, afeta somente o processo de decodifica-çao de contexto,- a seção de contexto: se a informação estiver contida nesta seção, afeta somente o processo de decodificação do elemento. 0 conjunto de informação atual é o conjunto de variáveis seguinte:____________________________________________ As classes definidas estão codificando exatamente as partes do arquivo supradescritos (a parte do arquivo de metacontexto MC e a parte do arquivo de contexto C).
Parte do arquivo de Metacontexto Definição À parte do arquivo de metacontexto MC, cujo tamanho pode ser nulo, contém informação para saber se o decodificador tem que ler a parte do arquivo de contexto C seguinte, descrito na seção seguinte.
Variáveis Envolvidas Valores Padrões 0 valor padrão do freezlng_state é falso; isso quer dizer, pelo valor padrão, que a subárvore raiz/contexto pode ser alterado dinamicamente.
Regras de Propagação Na criação de um novo contexto: o valor de freèzing_state é estabelecido como o valor freezing_state de seu contexto pai.
Regras de Modificação Dinâmica Em cada nó de uma descrição e a fim de criar um novo contexto: o valor freezing_state pode ser comutado do valor falso para o valor verdadeiro.
Regras de Decodificaçào Se o valor £reezing_state for verdadeiro, a parte do arquivo de metacontexto MC (e a parte do arquivo de contexto C que chega) não é codificado no fluxo de bits. De outra forma, a parte da parte do arquivo de metacontexto do cabecalho é codificada como se seoue: 0 context_chunk é uma variável local, inicializada em falso.
Conforme estabelecido na seção anterior, a modificação das variáveis do contexto atual implica na criação de um novo contexto.
Influência do processo de decodificação de contexto Se o valor context_chunk for verdadeiro, o decodi-ficador tem. que ler a parte do arquivo de contexto C seguinte.
Parte do arquivo de Contexto Definição h parte do arquivo de contexto C, cujo tamanho pode ser nulo, contém um conjunto de informação capaz de mudar dinamicamente as variáveis do contexto atual. Essas variáveis são denominadas codingProperties, em virtude de elas afetarem no processo de decodificação do elemento BiM.
CodinaProoerties envolvidas Valores Padrões A variável allows_skip é inicializada no começo do fluxo de bits pelos primeiros dois bits do campo de bits de 4 bits especial, definido no documento FCD Systems [1]. A variável allows_part ial_instant iat ion é inicia-lizada no inicio do fluxo de bit pelos terceiros dois bits do campo de bits de 4 bits especial. A variável allows_subtyping é inicializada no inicio do fluxo de bits pelos quartos dois bits do campo de 4 bits especial. 0 valor padrão do schema_mode é mono: isso quer dizer, pelo valor padrão, a subárvore raiz/contexto é codificado com um esquema.
Regras de Propagação Na criação de um novo contexto: o valor allows_skip é estabelecido no valor al-lows_skip de seu contexto pai; o valor allows_partial_instantiation é estabelecido no valor de seu contexto pai; o valor allows_subtyping é estabelecido no valor de seu contexto pai; o valor schema_mode é estabelecido no seu valor padrão.
Regras de Modificação Dinâmica Em cada nó de uma descrição e a fim de criar um novo contexto: allows_skip pode ser modificado dinamicamente; allows_partial_instantiation não pode ser modificado dinamicamente; allows_subtyping não pode ser modificado dinamicamente ; schema_mode pode ser modificado dinamicamente.
Regras de Decodificação À parte do arquivo de Contexto C está presente somente se à parte do arquivo de metacontexto MC já estiver presente e se seu context_chunk variável local prévio for verdadeiro. A modificação dinâmica do contexto atual está descrita com um elemento XML que é codificado com o esquema de codificação regular BiM. 0 modifyContext de elemento global do esquema BiM é usado. 0 esquema de codificação http://mpeg7.org/2001/BiMCoding está descrito no anexo 1. À parte do arquivo de contexto C tem que ser decodificada com o esquema regular BiM, com o esquema referido.
Conforme supraestabelecido, a modificação do co-dingProperties atual no contexto implica na criação de um novo contexto. Portanto, a presença da parte do arquivo de contexto C implica na criação de um novo contexto, que levará o codingProperties modificado.
Se o elemento allowsSkip for instanciado dentro do elemento modifyContext, então o valor de allows_skip será atualizado no novo contexto.
Se o elemento schema_mode for instanciado dentro do elemento modifyContext, então o valor de schema_mode será atualizado no novo contexto.
Influência no processo de decodificação de elemento Os valores allows_skip e schema_mode afetam o processo de decodificação de elemento, quando se trata com a característica de salto. Este comportamento está descrito em [1] · 0 valor schema_mode afeta o processo de decodifi-cação de elemento, a fim de saber se o elemento está codificado com apenas um esquema ou diversos deles. Este mecanismo está descrito em [1]. 0 valor allows_partial_instantiation afeta o processo de decodificação de elemento, adicionando um tipo par-tiallylnstantiated do tipo especial a possíveis subtipos do elemento. Ver [1]. 0 valor allows_subtyping afeta o processo de deco- dificação de elemento e permite que um elemento ou um atributo tenha diferentes tipos possíveis, no caso de polimor-fismo de elemento (com o atributo xsi:type) ou união. Ver [1] . 2. Descrição da Invenção 2.1 Extensão do mecanismo de contexto para fornecer uma estrutura para compressão de folha A invenção propõe estender o mecanismo de contexto BiM atual a fim de suportar uma nova e interessante característica: o uso de compressores locais para comprimir folhas de um documento, a fim de reduzir o tamanho do fluxo de bits resultante.
Esta seção descreve como estender o mecanismo de contexto BiM atual para suportar o uso de compressores locais. Isto é tipicamente um novo conjunto de variáveis, co-dingProperties, ligado com regras de semântica, propagação e codificação específicas. Portanto, este novo conjunto de co-dingProperties estenderá a parte do arquivo de contexto atual.
Introdução E uma subárvore, todas as instâncias de um ou vários tipos simples especificados podem ser comprimidos com um ou vários compressores especificados. Isto basicamente define um mapeamento entre um compressor e um ou diversos tipos simples.
Além do mais: em alguns casos, um compressor precisa de alguns parâmetros externos; um mapeamento pode ser ativado/desativado, a fim de usar um compressor em algumas subárvores, mas não nas outras.
Finalmente, a fim de ser ativado/desativado, um mapeamento dever ser referenciável e, portanto, deve ter um identificador exclusivo em um contexto.
Portanto, cada contexto pode levar zero, um ou diversos codecTypeMapper; onde um codecTypeMapper é um 4-pleto, que consiste de um identificador, um ou diversos tipos simples, um codec, parâmetros codec externo opcionais e um estado de ativação.
Definições CodecTypeMapper Um codecTypeMapper é um 4-pleto que consiste de: um identificador usado como uma chave de referência exclusiva em uma subárvore/contexto; um ou diversos tipos simples para os quais o mapeamento é aplicável; um codec; parâmetros codec externos opcionais (depende do codec); um estado de ativação.
Identificador 0 identificador é um número exclusivo que identifica um mapeamento dentro de um contexto de uma maneira não ambiqua. 0 esquema de codificação BiM restrinqe o número máximo de codecTypeMappers em um contexto a 32.
Tipo simples Todos os tipos simples definidos em um esquema podería ser a priori codificados por cada codec mas cada codec pode restrinqir esta escolha. Por exemplo, um quantizador linear, tal como anteriormente definido neste documento, pode ser usado somente com tipos simples numéricos.
Um tipo simples é identificado pelo seu nome, e pelo URL do esquema a que ele pertence. Os prefixos XML Schema devem ser usados a fim de apontar para o esquema correto. 0 esquema de codificação BiM define um tipo especial para codificar este par; este tipo deve ser codificado como par de inteiros; o primeiro inteiro está restrito ao número atual de esquemas conhecidos (esta peça de informação pode ser buscado na parte DecoderConfig ['] e o segundo inteiro é restrito ao número de tipos simples globais presentes no esquema correspondente.
Codec Um codec, que apoia compressor/descompressor, é um módulo que leva bits de entrada e grava bits de saida. Ele pode necessitar alguns parâmetros externos opcionais.
Um codec é identificado por um nome, entre os nomes de codecs não-abstratos definidos no esquema de codificação BiM. 0 esquema de codificação BiM atual, definido em uma seção anterior, não define nenhum codec não-abstrato, mas §2.2 do presente documento o faz.
Estado de ativação 0 estado de ativação é uma bandeira booleana.
Regras esquemáticas CodecTypeMapper Cada contexto: pode levar zero, um ou diversos codecTypeMappers; pode definir um ou diversos codecTypeMappers; pode ativar ou desativar um ou diversos codecTypeMappers existentes.
Se um CodecTypeMapper for definido em um contexto, ele permanece em todos seus subcontextos.
Um codecTypeMapper existente, dentro de um contexto, não pode ser deletado nem modificado (exceto seu estado de ativação).
Identificador 0 identificador de um mapeamento deve ser exclusivo entre todos os codecTypeMappers de um contexto.
Tipo simples Quando se associa em um codecTypeMapper um ou vários tipos simples e um codec, o codec codifica-rá/decodificará os próprios tipos simples e todos os tipos simples que derivaram deles.
Em um contexto, deve existir no máximo um tipo simples que pode ser aplicável com um codec.
Codec Existem dois tipos de codec: codecs sem memória e codecs contextuais.
Um codec sem memória é um módulo que codifica sempre os mesmos bytes de entrada nos mesmos bytes de saída; independentemente da história do codec. Um codec sem memória tipico é um quantificador linear. A compressão de folha BiM (ver §2.2 do presente documento) descreve um codec como esse.
Um codec contextual é um módulo que usa os bytes anteriores alimentados nele (mudando assim o contexto do codec) . Um codec como esse não qera os mesmos bytes de saída para os mesmo bytes de entrada que ele recebe. Um codec tipicamente contextual é um codec local tipo Zip, um está descrito em §2.2 do presente documento.
Um codec sem memória não induz nenhum problema na arquitetura de contexto atual, ma um codec contextual induz, no caso de subárvore saltável. Em tais casos, um codec contextual é reinicializado, a fim de não confundir o decodifi- cador, quando este primeiro tiver saltado a subárvore.
Estado de ativação Em cada subárvore/contexto, um codecTypeMapper pode ser ativado ou desativado.
Este mecanismo permite definir um codecTypeMapper em um nível mais alto da árvore de documento, e ativá-lo somente nas subárvores em que ele é usado, sem redefinir o codecTypeMapper .
Um novo codingProperty t codecTypeMapper Nesta parte, adicionamos um novo codingProperty ao conjunto anterior de variáveis da seção de contexto supra-descrita, Este novo codingProperty é denominado codecTypeMapper e é uma lista dos codecTypeMapper anteriores descritos na seção anterior, Novo codingProperty envolvido 0 contexto leva uma lista de codecTypeMapper: Novos valores padrões Pelo valor padrão, não existe nenhum codecTypeMap-per em uma subárvore/contexto.
Se um codecTypeMapper for definido dentro de um contexto, seu identificador, codec e valor simple_type devem ser definidos. Se não especificados, o estado de ativação de um codecTypeMapper recém-definido é estabelecido em verdadeiro por valor padrão; isso quer dizer que um codecTypeMapper recém-definido é ativado pelo valor padrão.
Novas regras de propagação Regra 1: Na criação de um novo contexto, a lista codecTypeMapper é a cópia de seu contexto pai: o valor do identificador é copiado; o valor simple_type é copiado; o valor codec é copiado de acordo com a regra 2; os valores codec_parameters são copiados; o activation_state é copiado.
Regra 2: 0 valor codec é copiado e se: o codingProperty. codec do codec pai é um codec contextual, e; se o contexto atual for saltável, então, espera-se que o decodificador crie uma nova instância do codec, copiando a instância do codec pai (não apenas seu valor) e reconfigurando-o.
Por exemplo, um codec ZLib seria copiado e reini-cializado quando entrar em um nó saltável.
Novas regras de modificação dinâmica A lista de codecTypeMapper pode ser modificada dinamicamente, dentro da descrição; um novo codecTypeMapper pode ser definido; o activation_state de um codecTypeMapper existente (então referenciável) pode ser modificado dinamicamente.
Um codecTypeMapper existente não pode ser deleta-do, e seus componentes não podem ser modificados dinamicamente (exceto seu activation_state).
Novas regras de decodificação As mesmas regras anteriores aplicam-se à decodifi-cação de parte do arquivo de contexto C, mas o novo esquema, descrito no anexo 2, deve ser usado, a fim de adicionar as novas funcionalidades de modificação dinâmica de codecTypeMapper .
Parte informativa Exemplos 0 exemplo, ilustrado no anexo 3, apresenta a definição de um quantificador linear ativado (ver §2.2 do presente documento) em uma descrição. 0 exemplo, ilustrado no anexo 4, apresenta a defini- ção de um quantificador linear desativado em uma descrição.
2.2 Compressão de folha BiM É apresentado agora o mecanismo implementado pela invenção para codificar dados com diferentes codec. Mais precisamente, estão ilustrados agora dois exemplos, um, onde um codec de guantização linear é usado para comprimir, por exemplo, valores de ponto flutuante, e o outro, onde um codec gzip é usado para comprimir, por exemplo, valores de cadeia.
Um mecanismo como esse está estritamente relacionado com o contexto de codificação e permite o uso de diversos outros tipos de codec. Além disso, ele permite lidar devidamente com características de contexto de codificação, por exemplo, subárvores saltáveis. Finalmente, ele permite a reutilização de codec em diferentes contextos de codificação.
Introdução A codificação de subárvore BiM [1] não comprime as folhas de dados de uma descrição. Atualmente, valores de folha são codificados com relação aos seus tipos (IEEE 754 flutuantes e duplos, cadeias UTF...).
Em muitos casos, podería ser útil usar algumas técnicas de compressão clássica como guantização linear ou compressão estatística para melhorar a taxa de compressão de BiM sem perder suas características principais (análise encadeada, característica de salto rápido, decodificação teclada) .
Este documento mostra como a compressão de folhas de dados de um documento pode ser feita dentro do mecanismo de codificação de contexto descrito em §2.1, a fim de conseguir melhores taxas de compressão. 2.2.1 Quantização linear Definição Quantização linear é uma maneira usual e sem perda para reduzir o tamanho de números codificados no fluxo de bits, quando a fonte da informação é conhecida e portanto quando as perdas são controladas.
Como um exemplo, o envelope de um sinal de áudio amostrado é geralmente conhecido com uma quantização de tamanho de bits precisa, e esta técnica podería ser frutifera-mente usada para codificação de descrições de áudio MPEG-7.
Se v for um número real, ele pode ser codificado com vq com os bits nbits, onde: onde: vq é o valor quantizado codificado de v; nbits é a precisão exigida em bits;
Vmin é o valor mínimo inclusive que v pode alcançar;
Vmax é o valor máximo inclusive que v pode alcançar. E o valor decodificado de v é v, com: onde: v é o valor decodificado aproximado de v.
Integração com o mecanismo de contexto: o Linear-QuantizerCodec Quantização linear pode ser usada como um codec, na forma definida no mecanismo de contexto de codificação descrito em §2.1 do presente documento. Com este mecanismo, a quantização linear pode ser aplicada a folhas de dados nu- méricos, de um tipo simples desejado em qualquer subárvore de uma descrição.
Usado desta maneira, o mecanismo de contexto de codificação, associado com o codec de quantização linear, está aqindo como o nó QuantizationParameter, usado em MPEG-4 BIFS [3].
Restrição a tipos simples aplicáveis De acordo com a definição de um codec em §2.1 do presente documento, este codec é um codec sem memória, que pode ser aplicado em cada um dos tipos numéricos simples atômico e não-atômico; cujo tipo primitivo de Esquema XML é float, double ou decimal.
Parâmetros externos de codec 0 codec do quantizador linear precisa dos três parâmetros mandatórios sequintes: bitSize: a variável nbits supradescrita; minlnclusive: a variável vmin supradescrita; maxlnclusive: a variável Vmax supradescrita.
Definição de esquema do codec 0 codec de quantização linear é um novo codec do tipo LinearQuantizerCodecType, baseado no tipo CodecType abstrato (ver §2.1) e definido pelo esquema dado no anexo 5, no URL de espaço de nome de contexto de codificação xmlns:cc=http://www.mpeq7.orq/2001/BiMCodinq.
Codificação (informativo) Uma folha de dados numéricos de valor v é codificada com o inteiro não associado vq nos bits nbits, onde: Decodificação 0 inteiro não associado vg, codificado em bits nbits, deve ser decodificado como v, onde: Exemplo (informativo) 0 exemplo ilustrado no anexo 6 apresenta a definição de um quantizador linear em uma descrição. 2.2.2 Compressão estatística Algoritmos de compressão sem perda estatísticos clássicos podem ser usados como codec, na forma definida no mecanismo de contexto de codificação (ver § 2.1). Com este mecanismo, folhas de dados, de um tipo simples desejado, podem ser comprimidas eficientemente em qualquer subárvore de uma descrição.
Este codec é útil para reduzir significativamente o tamanho do fluxo de bits, especialmente quando a descrição contiver muitas cadeias repetitivas ou similares.
Definição Algoritmos de compressão estatística sem perda clássicos (tipo Zip ou GZip) podem ser usados em BiM para comprimir qualquer folha de uma descrição.
Mas, na maioria dos casos, quando folhas de dados são cadeias curtas que contêm menos de 10 caracteres, isto leva a baixos desempenhos, em virtude de os algoritmos de compressão estatística usuais exigirem um maior armazenamento provisório de busca antecipada de instruções. A fim de conseguir taxa de compressão ideal, as folhas de um documento têm que ser armazenadas provisoriamente em um armazenamento provisório pequeno antes de ser comprimidas. A seção seguinte define um codificador estatístico armazenado temporariamente como esse, que baseia-se em um algoritmo de compressão estatística sem perda subjacente.
Definições de um codificador estatístico armazenado temporariamente Um codificador estatístico armazenado temporariamente baseia-se em um codificador estatístico subjacente que deve conter os métodos primitivos seguintes genéricos: initialize_stream(): que inicializa um fluxo de compressão ou de descompressão; reset_mode(): que reinicializa o modelo estatístico atual do codificador; feed_imput_bytes(): que pega os bytes descomprimidos de entrada e coloca-os na cadeia de compressão; flush_output_bytees(): que esvazia a cadeia de compressão, comprimindo os bytes de entrada já processados e eliminando os bytes de saída comprimidos correspondentes; decompress_imput_bytes(): que toma uma quantidade especificada de bytes comprimidos de entrada e decodifica-os emitindo os bytes de saída descomprimidos correspondentes.
Um codec armazenado temporariamente tem uma estrutura FIFO de armazenamento temporário de byte de comprimento de bytes bufferSize.
Pelo lado do codificador, o valor bufferSize indica quantos bytes de entrada o codificador pode processar antes do esvaziamento. Pelo lado do decodif icador, este é o tamanho de armazenamento temporário mínimo necessário para decodificar o fluxo de bits através da API do codificador estatístico subjacente. 0 armazenamento temporário também tem uma variável fillingLevel, que contém o nivel de enchimento real, em bytes, do armazenamento temporário.
Uso da API ZLib como um codificador estatístico A API da biblioteca pública ZLib [4], usada no esquema de compressão GZip, fornece uma API eficiente e útil para usar compressão estatística em folhas de documento. A API ZLib atende os métodos genéricos anteriores, com o seguinte mapeamento: initialize_stream () pode ser mapeado com as funções inflatelnit() ou deflatelinit() de ZLib, com o parâmetro do valor de eficiência Z_DEFAULT_COMPRESSION. reset_model() pode ser mapeado com uma chamada in-flateEnd() ou deflateEnd() de ZLib e uma chamada initiali-ze_stream() seguinte. feed_input_bytes() pode ser mapeado com o método def iate () de ZLib com o parâmetro Z_NO_FLUSH. flush_output_bytes() pode ser mapeado com o método deflate () de ZLib com o parâmetro Z_SYNC_FLUSH. decompress_input_bytes() pode ser mapeado com o método inf iate () de ZLib. 0 codec armazenado temporariamente ZLib deve ser inicializado com o valor de eficiência Z_DEFAULT_COMPRESSION, definido em [4], que fornece um bom balanço entre as exigências de base de memória e eficiência de compressão.
Integração com o mecanismo de contexto: o ZLibCodec Esta seção descreve a integração do codificador estatístico armazenado temporariamente previamente que ba- seia-se na API ZLib dentro do mecanismo de contexto de codificação .
Restrição sobre tipos simples aplicáveis De acordo com a definição de um codec em §2.1, este codec é um codec contextual, que pode ser aplicado em cada um dos tipos de cadeia atômica e não-atômica. 0 ZLibCodec está baseando na codificação primitiva subjacente de folhas de um documento, descrito em [1] . Por exemplo, folhas int são codificadas com um número interior de 32 bits, string com uma codificação UTF-8, float e double são codificados como o formato IEEE 754, ... Portanto, o ZLibCodec comprimirá a fo- lha codificada.
Parâmetros externos do codec 0 codec ZLib armazenado temporariamente não precisa de nenhum parâmetro externo, já que a eficiência do ZLib subjacente é estabelecido em Z_DEFAULT_COMPRESSION e já que o parâmetro bufferSize não é necessário por parte do decodi-ficador.
Definição do esquema do codec 0 codec ZLib é um novo codec do tipo ZLibCode-cType, baseado no tipo CodecType abstrato (ver §2.1) e definido pelo esquema ilustrado no anexo 7, no espaço de nome do contexto de codificação.
Codificação (informativo) Na ativação/instanciação do codec: supõe-se que a estrutura de armazenamento temporário FIFO seja clara, seu fillingLevel é estabelecido em 0; o referencable_chunck variável global é iniciali-zado em nuii · 0 referencable_chunck deve conter uma parte do arquivo referenciável de bits, que deve ser contido pelo codificador, porque seu valor será conhecido posteriormente durante o processo de codificação. A função de sinalização signal_refernce_chunk_konwn() deve ser chamada quando este parte do arquivo for conhecido. 0 tamanho, em bytes, de cada um dos parte do arquivo não-nulo deve ser gravado antes da parte do arquivo propriamente dito, durante a chamada de flush_output_bytes(), com a codificação 4+1 inteira infinita não associada padrão, definida em [1].
Uma íeaf de entrada é o valor codificado de uma leaf textual, com relação ao seu tipo primitivo. 0 comprimento da leaf, em bytes, é dado pelo campo leaf.length. Por exemplo [1], uma folha string é um código UTF-8, precedido pelo tamanho em bytes da cadeia (codificado com a codificação inteira infinita [1]; uma folha double é o valor de 64 bits do padrão IEEE 754 correspondente... A função encode_leaf seguinte é capaz de codificar uma íeaf em uma parte do arquivo de bytes de saida: while (leaf is not empty) { if (fillingLevel + leaf.length < bufferSize) { feed_input_bytes(leaf,leaf.length) fillingLevel = fillingLevel + leaf.length if (referencable_chunk is null) { referencable_chunk = new chunk retum referencable_chunk } else { retum nil_size_chunk } } else { remaining_bytes = bufferSize - fillingLevel - leaf.length feed_input_bytes(leaf,remaining_bytes) referencable_chunk = flush_output_bytes() signal_reference_chunk_known() fillingLevel = 0 leaf = leaf.remove„beginning_bytes(remaining_bytes) referencable_chunk = null } } Decodificação Deixe string_fifo ser uma cadeia FIFO.
Os métodos seguintes get() e put() respectivamente tomam um elemento out resp. put um elemento de resp no FIFO. 0 método é sinais Empty() se o Fifo estiver vazio. Deixe sub ser a função eu toma a subcadeia.
Deixe concat ser a função de concatenação.
Deixe getDataO a função que retorna o char[]holding de-zip dados de uma folha.
Deixe split(char[], char sep, Fifo, char[] remainder) ser o método que divide um arranjo de caracteres em cada separador 'sep' e armazena os elementos de cadeia separados no Fifo e retorna o resto (isto é, o última parte do arquivo que não tem 'sep' para finalizá-lo). split(char [] data, char sep, FIFO string_fifo,char[] remainder) { if (data==null) retum; int BEGIN=0; for (int I=0;I<data.length;I++) { if (data[I]==sep) { char[] str= concat(remainder, sub(data,BEGIN,I)); put(string_fifo, str); BEGIN=I+1; } } if (BEGIN!=data.length) { //there's a remainder. remainder = sub(data,BEGIN,dataJength); } } String decode() { if (isEmpty(string_fifo) { data = getData(); split(data,OxOO,string_fifo,remainder); } retum get(string_fifo); } Na inicialização, string_fifo está vazio.
Na ativação/instanciação do codec: supõe-se que a estrutura FIFO seja clara, seu num-berOfleaves é estabelecido em 0 a variável first_chunk é estabelecida em verdadeira. Deixe o byte separador em 0x00. A função decode_leaf seguinte é capaz de decodificar uma folha comprimida do fluxo de bits: string decode-_leaf() { if (numberOfLeaves == 0) { read_and_decompressed„byte() numberOfLeaves = count_number_ofJeave_in_buffer() } else { } > A decodificação é definida por: 1. Se o FIFO estiver vazio: a. decodificar os dados codificados, b. empilha em um FIFO todos elementos separados por 0x00 c. se o último caracter não for 0x00, armazenar a primeira cadeia inacabada temporariamente.
d. se "last_element" não estiver vazio, inseri-lo no inicio do primeiro elemento em FIFO e. colocar a cadeia inacabada desta rodada no last_element. f. remover e retornar o primeiro elemento. 2. Se o FIFO não estiver vazio, então remover e retornar o primeiro elemento. É equivalente a dizer: "o FIFO não está vazio" e a dizer "não existe nenhum dado codificado na folha atual".
Exemplo (informativo) A descrição dada no anexo 8 é um exemplo do uso do codec ZlibCodecType, mapeado com os tipos string e o anyURI.
Resultados (informativo) Os valores seguintes mostram os desempenhos do uso do ZLibCodec de maneira a comprimir folhas textuais de descrições (aquelas derivadas dos tipos primitivos de string e anyURI XML Schema). Um armazenamento temporário de bufferSi-ze - 256 bytes foi usado durante o processo de codificação.
Os arquivos usados foram providos pelo subgrupo MPEG-7 MDS ._______________________________________ Serão agora descritas rapidamente as etapas implementadas de acordo com a invenção para comprimir o conteúdo das folhas de uma árvore hierárquica. A etapa 1 consiste em associar uma técnica de codificação de compressão a um tipo de conteúdo. Por exemplo, quantização linear pode ser associada com valores de ponto flutuante.
Na etapa 2, uma subárvore é identificada dentro da árvore hierárquica correspondente à estrutura do documento XML considerado. A etapa 3 consiste em alocar uma técnica de codificação de compressão à subárvore identifícada. A etapa 4 então consiste em checar se o codec que implementa a técnica de codificação de compressão está ou não ativado. Se não, nenhuma compressão <5} das folhas da subárvore é conseguida.
Caso sim, a invenção implementa (6} compressão do conteúdo das folhas da subárvore cujo conteúdo é do tipo de conteúdo associado (1) com a técnica de codificação de compressão . ANEXO 1 <schema targetNamespace="http://www.mpeg7.org/2001/BiMCoding" xmlns:cc="http://www.mpeg7.org/2001/BiMCoding" xmlns="http://w ww. w3 .org/2000/10/XMLSchema" > <element name="modifyContext"> <complexType> <sequence> <element name="allowsSkip" minOccurs="0"> <simpleType> <restriction base="string"> <enumeration value=" mandatory '7> <enumeration value="optional7> <enumeration value=" forbidden" /> </restriction> </simpleType> </element> <element name="schemaMode" minOccurs="0"> <simpleType> <restriction base="string"> <enumeration value="mono'7> <enumeration value="multi'7> </restriction> </simpleType> </element> </sequence> </complexT ype> </element> </schema> ANEXO 2 <schema targetNamespace="http://www.mpeg7.org/2001/BiMCoding" xmlns:cc=" http://www.mpeg7.org/2001/BiMCodíng" xmlns="http://www.w3.org/2000/10/XMLSchema" > <element name="context"> <complexType> <sequence> <element name="allowsSkip" min0ccurs="0"> <simpleType> crestriction base="string"> <enumeration value="mandatory"/> <enumeration value="optional"/> <enumeration value="forbidden"/> </restriction> </simpleType> </element> <element name="schemaMode" minOccurs="0"> <simpleType> crestriction base="string">
Cenumeration value="mono"/> Cenumeration value="multi"/> </restriction> </simpleType> </element>
Celement name="codecTypeMappers" minOccurs="0"> <complexType> <sequence> celement name="codecTypeMapper" type="cc:codecTypeMapper" maxOccurs="unbounded"/> c/sequence> c/complexType> c/element> c/sequence> c/complexType> c/element> c!-- a type can be pointed with the help of a XML Schema prefix, in order to know the schema it is belonging to —> csimpleType name="coupleSchemaTypeType">
Crestriction base="string"/> c/simpleType> <!— restriction of 32 maximal codecTypeMappers in a context <simpleType name="codecIDType"> <restriction base="integer"> <minInclusive="0"/> <maxlnclusive="31"/> </restriction> </simpleType> <complexType name="codecTypeMapperType"> <sequence> <element name="type" type="coupleSchemaTypeType" maxOccurs="unbounded"/> <element name="codec" type="cc:codecType"/> </sequence> <attribute name="id" use="required" type="codecIDType"/> <attribute narae="state"> <simpleType> <restriction base="string"> <enumeration value="activated"/> <enumeration value="deactivated"/> </restriction> </simpleType> </attribute> </complexType> <complexType name="codecType" abstract="true"/> </schema> ANEXO 3 <Example xmlns:cc="http://www.mpeg7.org/2001/BiMCoding"> <AudioEnvelope>
<cc: modify Cont ex O <codingProperties> <codingProperty id=" 1 "> <type>audioFloat</íype> <codec xsi:type="LinearQuantifierType"> <bi tS i ze>8 </bit Size> <min I nc 1 u si ve>-1 .()</mi ninei us i v e> <maxlnclus:ive>l .0</max!nclusive> </codec> </codingProperty > </codingProperties> </cc: modifyContext> <Values> <Raw> -0.25411 0.88541 0.2141946 0.3652541 -0.148941 0.8814 0.145544-0.847 </Raw> </Values> </AudioEnvelope> </Example> ANEXO 4 <Example xmlns:cc="http://www.mpeg7.org/2001/BiMCoding"> <AudioEnvelope> <cc:modiíyContext> <codingProperties> <cod:ingProperty id=" 1" state="deactivated"> <type>audloFloat</type> <codec xsi: type=" LinearQu antifierTvpe" > <bitSize>8</bitSize> <minlndusive>- i .0</minInclusíve> <maxlncl.usive>1.0</maxlnclusive> </codec> </codingProperty> </codingProperti.es> </cc: modifyCo:ntext> <Values> <Raw> <!— quantization here —> <cc:modi.fyContext> <codingProperties> <codingProperty id="l" st.ate="acüvat.ed"/> </codingProperties> </cc:modlfyContext> -0.25411 0.88541 0.2141946 0.3652541 -0.148941 0.8814 0.145544 -0.847 </Raw> <Variance> > <!— but no quantization here —> 0.1777441 0.2094511 0.349411 0.548444 -0.445445 -0.3654847 0.9541 </Variance> </Values> </AudioEnvelope> </Example> ANEXO 5 ccomplexType name="LinearQuantizerCodecType"> <complexContent> <extension base="cc:CodecType"> <element name="bitSize"> <simpleType> <restriction base="int"> <minlnclusive value=" 1 "/> <maxlnclusive value="327> </restriction> </simpleType> </element> <element name="minlnclusive" value="float"/> <element name="maxlnclusive" value="float"/> </extension> </complexContent> </complexT ype> ANEXO 6 <Example xmlns:cc="http://www.mpeg7.org/2001/BiMCoding"> <AudioEnvelope> <cc:modifyContext> <codecT ypeMappers> <codecTypeMapper id="l“ state=''deactivated"> <type>audioEloat</type> <codec xshtype-XinearQuantizerCodecType1^ <bitsSíze>S</bitSize> <minlnclusive>-i.0</minlnclus.íve> <maxlnclusive>1.0</maxlnclusive> </codeo </codecT vpe]V1 apper> </codecT ypeMappers> </cc;]TK)difyConlex(> <Values> <Raw> <!— quantization here —> <cc:modifyContexl> <codecTy peM a ppers> <codecTypeMapper id=" 1 ” state="activated"/> </codecT ypeM appers> </cc:modifyContext> -0.25411 0.88541 0.2141946 0.3652541 -0.148941 0.8814 0.145544-0.847 </Raw> <Variance> > <!— but no quantization here —> 0.1777441 0.2094511 0.349411 0.548444-0.445445 -0.3654847 0.9541 </Variance> </Values> </AudioEnvelope> </Example> ANEXO 7 ccomplexType name=,'ZLibCodecType"> <complexContent> <extension base=" cc: CodecT ype" /> </complexContent> </complexType> ANEXO 8 <MdsExampleTest xmlns-'http://www.mpeg7.org/2001/MPEG-7_Schema" xmlns:cc="hltp://www.mpeg7.org/2001/BiMCoding" <cc: mod ify Co rife x t> <codecTypeMappers> <codecTypeMapper id=" 1" > <type>string</type> < ty pe>any U RI </ty pe> <codec xsi:type="ZLibCodecType7> </codecTypeMapper> </codecTypeMappers> </cc:rnodifyContext> <!— the termld attributes, Name elements and Definitions elements will be catched by the ZLibCodecType —> <ClassificationScheme uri="um:mpeg:MPEG7AudioDomainCS" domain="/.."> <Term termld-' 1 "> <Name xml:lang="en">Source</Name> <Definition xml: lang=" en ">Type of audio source</Definition> <Term termld-' 1.1"> <Name xml:lang="en">Synthetic</Name> </Term> <Term termld="1.2"> <Namexml:lang="en" >N atural</N amo </Term> </Term> <Term termld="2"> <Name xml:lang="en">Acquisition</Name> <Definition xml:lang="en">Type of Content</Definition> <Term termld=''2.1"> <Name xml:lang="en">Music</Name> </Term> <Term termld="2.2"> <Name xml:lang="en">Speech</Name> </Term> <Term termld="2.3"> <Name xml:lang="en">Mixed</Namo </Term> <Term termld=''2.4"> <Name xml:lang="en">Multi-track</Name> </Term> </Term>
REIVINDICAÇÕES