Formato de imagem Ultra HDR v1.0

Introdução

Neste documento, definimos o comportamento de um novo formato de arquivo que codifica uma imagem do mapa de ganho de intervalo logarítmico em um arquivo JPEG. Os leitores legados que não oferecem suporte ao novo formato leem e exibem a imagem convencional de baixo intervalo dinâmico do arquivo de imagem.Os leitores com suporte ao formato combinam a imagem principal com o mapa de ganho e renderizam uma imagem de High Dynamic Range em telas compatíveis.

No restante deste documento, descrevemos os métodos dos processos necessários para usar esse formato. De modo geral, o ciclo de vida de uma imagem em conformidade com esse formato é:

  1. Codificação

    1. Geração de mapas de ganho
    2. Usar a compactação de mapas
    3. Obter a geração de contêiner do mapa
  2. Decodificação


Exemplo
de layout de arquivo de formato de imagem Ultra HDR, com metadados associados e informações
de deslocamento

Figura 1. Exemplo de layout de arquivo e metadados relevantes.

Motivação

O objetivo desse formato de arquivo é codificar outras informações em arquivos de imagem SDR, que podem ser usadas em combinação com a técnica de exibição para produzir as interpretações ideais de HDR em um único arquivo.

Para isso, o formato do arquivo precisa:

  • Ser compatível com versões anteriores, para que a imagem SDR convencional seja exibida nos espectadores mais simples.
  • Não ocupa muito espaço extra.

Além disso, a técnica de exibição precisa:

  • Não exigem processamento intenso para decodificação.
  • Adapte-se a qualquer proporção entre os pontos brancos HDR e SDR de uma tela, que podem variar significativamente entre dispositivos ou até mesmo temporariamente em um único dispositivo.

E, por fim, a técnica precisa realizar todas as ações anteriores sem nunca:

  • Realces cortados.
  • Sombras arrasadoras.
  • Alterar ou comprimir o contraste local.
  • Alterar as relações tonais relativas (entre objetos na cena).

Dependências

Veja a seguir referências regulatórias para esta especificação:

Definições

  • Tela SDR

    • Uma tela convencional não projetada para exibir conteúdo HDR. Essas telas normalmente produzem um brilho máximo nominal de cerca de 400 cd/m2 ou menos.
  • Tela HDR

    • Uma tela projetada para conteúdo HDR. Essas telas normalmente produzem um pico de brilho nominal maior do que o de uma tela SDR, normalmente 800 cd/m2 ou superior, e normalmente têm taxas de contraste melhores do que as telas SDR.
  • Imagem principal

    • A primeira instância de uma imagem em um arquivo GContainer com arquivos de mídia secundários anexados a ele. A imagem principal contém metadados XMP do GContainer que definem a ordem e as propriedades dos arquivos de itens de mídia secundários subsequentes no contêiner de arquivos.
  • Imagem secundária

    • Arquivos subsequentes de itens de mídia anexados à imagem principal em um arquivo GContainer.
  • Compactação de intervalo

    • Na fotografia, cenas reais costumam ter um alcance dinâmico mais amplo do que uma tela SDR pode representar. Operações como compactação de intervalo, também chamada de mapeamento de tons locais, são necessárias para reduzir o intervalo dinâmico de uma imagem. Essa redução precisa evitar recortar destaques ou esmagar sombras, preservando o máximo possível o contraste local.Você tenta reduzir o tamanho de bordas grandes de luminância na imagem, o que contribui mais para o contraste global, ao mesmo tempo em que tenta preservar o tamanho das bordas pequenas de luminância, que são os detalhes.Embora existam muitas implementações diferentes, essa operação é padrão na maioria das câmeras digitais modernas atualmente.
  • Ponto branco SDR

    • A luminosidade linear máxima do conteúdo SDR em uma tela em um determinado momento.
  • Ponto branco HDR

    • A luminosidade linear máxima do conteúdo HDR em uma tela em um determinado momento. Esse valor normalmente é maior do que o ponto branco do SDR.
  • Aumentar

    • O ponto branco HDR dividido pelo ponto branco SDR.
  • Otimização máxima de conteúdo (max_content_boost nas equações)

    • Esse valor permite que o criador de conteúdo restrinja o nível de brilho de uma imagem quando exibida em uma tela HDR em relação à renderização SDR.
    • Esse valor é uma constante para uma imagem específica. Por exemplo, se o valor for quatro, para qualquer pixel específico, a luminância linear da renderização HDR exibida vai precisar ser, no máximo, 4 vezes a luminância linear da execução de SDR. Na prática, isso significa que as partes mais claras da cena podem ser exibidas até quatro vezes mais.
    • Na prática, esse valor é normalmente maior que 1,0.
    • Sempre maior ou igual ao Aumento mínimo de conteúdo.
  • Aumento mínimo de conteúdo (min_content_boost nas equações)

    • Esse valor permite que o criador de conteúdo restrinja o nível de escurecimento que uma imagem pode ficar quando mostrada em uma tela HDR, em relação à renderização SDR.Esse valor é uma constante para uma imagem específica.
    • Se, por exemplo, o valor for 0,5, para qualquer pixel específico, a luminosidade linear da renderização HDR exibida precisará ser (no mínimo) 0,5x a luminância linear da renderização SDR.
    • Na prática, esse valor normalmente é igual ou pouco menor que 1,0.
    • Sempre menor ou igual à Otimização máxima de conteúdo.
  • Aumento máximo da Rede de Display (max_display_boost nas equações)

    • A otimização máxima disponível com suporte de uma tela em um determinado momento. Esse valor pode mudar ao longo do tempo com base nas configurações do dispositivo e em outros fatores, como condições de luz ambiente ou quantos pixels brilhantes há na tela.
    • Por exemplo, se esse valor for 4,0, a tela será capaz de exibir um pixel que seja no máximo quatro vezes mais brilhante do que o ponto branco do SDR. Esse valor é sempre maior ou igual a 1,0, já que a tela sempre pode exibir uma cor branca HDR com uma intensidade pelo menos tão clara quanto a cor branca SDR.
  • Otimização da Rede de Display

    • Igual ao menor aumento máximo de conteúdo e de exibição. Esse valor é sempre >= 1,0.
    • Por exemplo, se a otimização máxima de conteúdo for 4,0 e a otimização máxima de exibição for 3,0, a otimização de exibição será 3,0. Os pixels são mostrados três vezes mais brilhantes do que o SDR, já que os recursos de exibição são o fator limitante.
    • Em outro exemplo, se a otimização máxima de conteúdo for 4,0 e a otimização máxima de exibição for 5,0, a otimização de exibição será 4,0. Os pixels são exibidos com até quatro vezes mais brilho do que o SDR, já que a intent do conteúdo é o fator limitante.
  • Execução em HDR de destino

    • A execução em HDR ideal, de acordo com o criador do conteúdo.
  • Renderização adaptada em HDR

    • A renderização final em HDR que é mostrada na tela, depois de adaptar a execução de HDR de destino para a otimização de tela atual.
  • Mapa da ganho (recovery(x, y) nas equações)

    • Um mapa indicando o quanto iluminar cada pixel, na execução SDR, para produzir a execução HDR de destino. Esse mapa pode ser de canal único ou multicanal. Um mapa multicanal indica um ganho separado para cada canal de cor, como vermelho, verde e azul. Neste documento, ilustramos o caso de um mapa de canal único.
  • clamp(x, a, b)

    • Fixar o valor x no intervalo [a, b].
  • exp2(x)

    • Exponenciação de base 2; 2x.
  • floor(x)

    • Retorna o número inteiro mais próximo igual ou menor que x.
  • log2(x)

    • Logaritmo de base 2; log2(x)
  • pow(b, x)

    • Exponenciação; bx.
  • XMP

  • Formato com várias imagens

    • O formato de várias imagens é uma técnica desenvolvida pela Associação de produtos de câmera e imagem (CIPA, na sigla em inglês) para armazenar várias imagens codificadas em JPEG em um único arquivo JPEG.
    • Para mais informações, consulte a dependência relacionada, White Paper of CIPA DC-x 007-2009 Multi-Picture Format.
  • Contêiner do Google

    • GContainer é um método para armazenar várias imagens em um contêiner, em que uma é considerada a principal. Quaisquer imagens adicionais são consideradas versões alternativas ou auxiliares. Os metadados XMP são usados para comunicar a presença e o significado de quaisquer outras imagens. Para mais informações, consulte a seção Detalhes do GContainer.

Codificar

Esta seção descreve como codificar um arquivo JPEG em conformidade. Consulte T.81 (09/92) Compactação digital e codificação de imagens estáticas em tons contínuos, na seção Dependências, para mais informações sobre o formato JPEG.

Geração de mapas de ganho

Os pipelines de imagens de câmera geralmente executam uma operação de compactação de intervalo para compactar dados de luminância de maior alcance dinâmico para o menor intervalo de telas SDR convencionais. O mapa de ganho oferece um mecanismo para armazenar dados suficientes para recuperar os dados originais de luminância de maior alcance dinâmico.

Os seguintes cálculos nesta seção pressupõem aritmética de ponto flutuante.

As funções a seguir descrevem a imagem SDR:

  • SDR'(x, y) é a imagem principal não linear (normalmente codificada em gama) de três canais.
  • SDR(x, y) é a versão linear da imagem principal de três canais, obtida pela transformação para uma versão linear do espaço de cor da imagem principal. Por exemplo, de um espaço de cor com uma função de transferência sRGB para um espaço de cores linear que preserva as cores primárias sRGB.

A função Ysdr(x, y) é definida no intervalo de 0,0 a 1,0 e é a luminância linear da imagem principal do intervalo dinâmico padrão:

Ysdr(x, y) = primary_color_profile_to_luminance(SDR(x, y))

Existem definições semelhantes para a imagem HDR.

  • HDR'(x, y) é a imagem não linear de três canais, ou seja, uma imagem codificada PQ ou HLG.
  • HDR(x, y) é a imagem HDR linear de três canais.

Yhdr(x, y) é a luminosidade em um determinado ponto da imagem HDR:

Yhdr(x, y) = primary_color_profile_to_luminance(HDR(x, y))

Yhdr(x, y) é definido no intervalo de 0,0 até a otimização máxima de conteúdo.

As imagens SDR e HDR precisam ter a mesma resolução. O perfil de cores da imagem SDR define o espaço de cores da imagem HDR.

Por exemplo, se a imagem principal SDR tiver um perfil de cor Display-P3, a imagem HDR vai ser definida em relação às cores primárias desse perfil. Isso significa que a imagem HDR também tem cores primárias Display-P3.

O mapa de ganho é calculado a partir de duas imagens lineares que contêm a luminância de imagem HDR pretendida, Yhdr(x, y), e a imagem de luminância de intervalo padrão, Ysdr(x, y).

A função pixel_gain(x, y) é definida como a proporção entre a função Yhdr(x, y) e a função Ysdr(x, y):

pixel_gain(x, y) = (Yhdr(x, y) + offset_hdr) / (Ysdr(x, y) + offset_sdr)

O comportamento da função pixel_gain(x, y), em que Ysdr(x, y) e offset_sdr são zero, é definido pela implementação.

Por exemplo, as implementações podem processar o caso em que Ysdr(x, y) e offset_sdr são zero, definindo pixel_gain(x, y) como 1.0. Como alternativa, as implementações também evitam esse cenário usando um offset_sdr diferente de zero.

A implementação pode escolher os valores de offset_sdr e offset_hdr.

O mapa de ganho é uma função escalar que codifica pixel_gain(x, y) em um espaço logarítmico em relação à otimização máxima de conteúdo e à otimização mínima de conteúdo:

map_min_log2 = log2(min_content_boost)
map_max_log2 = log2(max_content_boost)

log_recovery(x, y) = (log2(pixel_gain(x, y)) - map_min_log2)
                   / (map_max_log2 - map_min_log2)
clamped_recovery(x, y) = clamp(log_recovery(x, y), 0.0, 1.0)
recovery(x, y) = pow(clamped_recovery(x, y), map_gamma)

O comportamento da função recovery(x, y), em que pixel_gain(x, y) é zero, é definido pela implementação, porque log2(0) é indefinido.

map_gamma é um número de ponto flutuante que precisa ser maior que 0,0 e é escolhido pela implementação.

Os valores de otimização máxima de conteúdo e de aumento mínimo de conteúdo são definidos pela implementação e podem ser decididos arbitrariamente pelo criador do conteúdo. A otimização máxima de conteúdo precisa ser maior ou igual a 1,0. A otimização mínima de conteúdo precisa estar no intervalo (0,0, 1,0].

Os valores em recovery(x, y) são limitados ao intervalo [0,0, 1,0].

O mapa de ganho é armazenado em um JPEG de imagem secundária e, portanto, precisa ser codificado usando valores inteiros não assinados de 8 bits, portanto, no intervalo [0, 255]. Cada valor representa um valor recovery(x, y) e é armazenado em um pixel da imagem secundária.

Para armazenamento com números inteiros de 8 bits, o valor codificado é definido da seguinte maneira:

encoded_recovery(x, y) = floor(recovery(x, y) * 255.0 + 0.5)

O cálculo da função de codificação é feito em ponto flutuante e convertido no final para o resultado inteiro não assinado de 8 bits por arredondamento conforme indicado.

Essa codificação resulta em uma representação de número inteiro não assinado de 8 bits de valores recovery(x, y), de 0,0 a 1,0. O mapa de ganho codificado precisa ser armazenado em um item de imagem secundário como um JPEG. A implementação escolhe a quantidade de compactação a ser usada durante a codificação JPEG.

Depois que o mapa de ganhos é armazenado em uma imagem secundária, ele é anexado a uma imagem principal com metadados MPF e GContainer XMP. O diretório GContainer da imagem principal precisa conter um item para a imagem de mapa de ganho.

A resolução do mapa de ganho armazenado é definida pela implementação e pode ser diferente da resolução da imagem principal. Caso o mapa de ganho seja dimensionado para uma resolução diferente da imagem principal para armazenamento, o método de amostragem precisa ser bilinear ou melhor, e a implementação é definida.

A orientação do mapa de ganho precisa corresponder à orientação da imagem principal. Se estiver presente, quaisquer metadados de orientação na imagem do mapa de ganho armazenada, como em EXIF, não serão usados.

Se estiver presente, o perfil de cores do mapa de ganho não será usado.

Coletar o contêiner do mapa

Perfil de cor

O perfil de cores da imagem precisa ser indicado por um perfil ICC para a imagem principal.

Atributos XMP

A imagem principal contém metadados XMP para definir pelo menos duas imagens com informações semânticas extras para o formato de mapa de ganho de HDR.

As subseções a seguir contêm detalhes específicos desse formato. Outras informações sobre conformidade geral com o GContainer estão especificadas na seção Detalhes do GContainer.

Os valores de atributos descritos nas tabelas a seguir são armazenados como valores simples de XMP dos tipos de valores básicos de XMP especificados.

Valores semânticos do item

A propriedade Item:Semantic define o significado específico do aplicativo de cada item de mídia no diretório do contêiner.

Valor Descrição
Principal Indica que o item de mídia é a imagem principal, pronta para exibição, no contêiner. O diretório precisa conter um item "Primary".
GainMap Indica que o item de mídia é um mapa de ganho. O diretório pode conter no máximo um item "GainMap".

Metadados do mapa de recebimento de HDR

Os metadados do mapa de recebimento codificam informações sobre como interpretar e aplicar o mapa de ganho para produzir a representação HDR da imagem principal.

O URI de namespace XMP para a extensão XMP de metadados do mapa de ganhos é http://ns.adobe.com/hdr-gain-map/1.0/. O prefixo de namespace padrão é hdrgm.

Esses metadados são armazenados no pacote XMP da imagem do mapa de recebimento, e as seguintes propriedades precisam aparecer no rdf:Description do XMP da imagem do mapa de recebimento:

Nome Tipo Descrição
hdrgm:Versão Texto A versão do formato de mapa de ganho em uso. Esta versão é "1.0". Obrigatório.
hdrgm:BaseRenditionIsHDR Booleano Indica o intervalo dinâmico da imagem principal. "False" indica que a imagem principal é SDR e o mapa de ganho pode ser combinado com ela para produzir uma execução em HDR. "Verdadeiro" indica que a imagem principal é HDR e o mapa de ganho pode ser combinado com ela para produzir a execução em SDR. Precisa ser "Falso". Opcional. O valor padrão é "False".
hdrgm:GainMapMin Matriz real ou ordenada de reais Armazena os valores de map_min_log2. Esse valor é log2 da otimização mínima de conteúdo, que é a proporção mínima permitida da luminância linear para a renderização HDR de destino em relação à da imagem SDR (dividida por) em um determinado pixel. Pode ser um único Real ou uma matriz ordenada de reais. Quando uma matriz ordenada de reais, ela pode conter um item que se aplica a todos os canais ou três itens para os canais vermelho, verde e azul, respectivamente. Precisa ser menor ou igual a hdrgm:GainMapMax. Opcional.O valor padrão é 0,0.
hdrgm:GainMapMax Matriz real ou ordenada de reais Armazena os valores de map_max_log2. Esse valor é log2 da otimização máxima de conteúdo, que é a proporção máxima permitida da luminância linear para a renderização HDR de destino em relação à (dividida por) da imagem SDR, em um determinado pixel. Pode ser um único Real ou uma matriz ordenada de reais. Quando uma matriz ordenada de reais, ela pode conter um item que se aplica a todos os canais ou três itens para os canais vermelho, verde e azul, respectivamente. Precisa ser maior ou igual a hdrgm:GainMapMin. Obrigatório.
hdrgm:Gama Matriz real ou ordenada de reais Armazena os valores de map_gamma. Essa é a gamma a ser aplicada aos valores de mapa armazenados. Pode ser um único Real ou uma matriz ordenada de reais. Quando uma matriz ordenada de reais, ela pode conter um item que se aplica a todos os canais ou três itens para os canais vermelho, verde e azul, respectivamente. Precisa ser maior que 0,0. Opcional.O valor padrão é 1,0.
hdrgm:OffsetSDR Matriz real ou ordenada de reais Armazena os valores de offset_sdr. Esse é o deslocamento a ser aplicado aos valores de pixels SDR durante a geração e aplicação do mapa de ganho. Pode ser um único real ou uma matriz ordenada de reais. Quando uma matriz ordenada de reais, ela pode conter um item que se aplica a todos os canais ou três itens para os canais vermelho, verde e azul, respectivamente. Precisa ser 0,0 ou maior. Opcional.O valor padrão é 0,015625 (1/64).
hdrgm:OffsetHDR Matriz real ou ordenada de reais Armazena os valores de offset_hdr. Esse é o deslocamento a ser aplicado aos valores de pixels HDR durante a geração do mapa e a aplicação dele. Pode ser um único real ou uma matriz ordenada de reais. Quando uma matriz ordenada de reais, ela pode conter um item que se aplica a todos os canais ou três itens para os canais vermelho, verde e azul, respectivamente. Precisa ser 0,0 ou maior. Opcional.O valor padrão é 0,015625 (1/64).
hdrgm:HDRCapacityMin Reais Armazena o valor de hdr_capacity_min. Esse valor é log2 do valor mínimo de otimização de exibição a que o mapa é aplicado. Esse valor também afeta a aplicação do mapa de ganho com base na otimização de tela. Precisa ser 0,0 ou maior. Opcional.O valor padrão é 0,0.
hdrgm:HDRCapacityMax Reais Armazena o valor de hdr_capacity_max. Esse valor é log2 do valor máximo de otimização de exibição para o qual o mapa é aplicado completamente. Esse valor também afeta a aplicação do mapa de ganho com base na otimização de tela. Precisa ser maior que hdrgm:HDRCapacityMin. Obrigatório.

Exemplo de XMP do mapa de ganhos

O exemplo a seguir de um pacote XMP de mapa de ganho válido contém metadados extraídos do arquivo de exemplo ilustrado na seção Introdução.

<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="XMP Core 5.5.0">
  <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
    <rdf:Description rdf:about=""
     xmlns:hdrgm="http://ns.adobe.com/hdr-gain-map/1.0/"
     hdrgm:Version="1.0"
     hdrgm:GainMapMin="-0.57609993"
     hdrgm:GainMapMax="4.7090998"
     hdrgm:Gamma="1"
     hdrgm:OffsetSDR="0.015625"
     hdrgm:OffsetHDR="0.015625"
     hdrgm:HDRCapacityMin="0"
     hdrgm:HDRCapacityMax="4.7090998"
     hdrgm:BaseRenditionIsHDR="False"/>
  </rdf:RDF>
</x:xmpmeta>

Armazenamento MPF do mapa de ganho

A imagem do mapa de ganho precisa ser armazenada como uma imagem extra, conforme definido no Formato de várias imagens CIPA DC-x 007-2009, conforme mencionado na seção Dependências.

Decodificar

Esta seção descreve como decodificar o mapa de ganhos a partir de um arquivo JPEG em conformidade.

Indicador do formato

Um arquivo JPEG em conformidade com esse formato pode ser identificado pela presença de hdrgm:Version="1.0" no pacote XMP da imagem principal, em que hdrgm é o URI do namespace http://ns.adobe.com/hdr-gain-map/1.0/.

Localizar a imagem do mapa de ganho

Para detalhes sobre como analisar e decodificar a imagem, consulte a seção Detalhes do GContainer a seguir. Um item semântico "GainMap" no XMP rdf:Directory é usado para sinalizar o local de uma imagem de mapa de ganho. Como alternativa, o IFD do índice MPF e o XMP de leitura de imagens são usados para determinar a localização de um mapa de ganho.

Lidar com metadados inválidos

Os metadados serão considerados inválidos se um campo obrigatório não estiver presente ou se houver algum campo com um valor inválido. Um valor pode ser inválido porque não é analisável para o tipo especificado ou porque está fora do intervalo esperado.

Se metadados inválidos forem encontrados, o mapa de ganhos será ignorado e a imagem SDR será exibida.

Tela

Os arquivos codificados no formato de mapa de ganho HDR podem ser renderizados em telas SDR convencionais ou em HDR com saída de maior luminância.

Use o mapa de ganho para criar a execução adaptada em HDR.

Os seguintes cálculos nesta seção pressupõem aritmética de ponto flutuante.

encoded_recovery(x, y) é o valor inteiro não assinado de 8 bits de canal único da imagem do mapa de ganho.

Se o mapa de ganho tiver uma resolução diferente da imagem principal, o encoded_recovery(x, y) vai ser determinado por uma amostragem filtrada da imagem do mapa para x e y no intervalo da largura e altura da imagem principal, respectivamente. O método de filtragem precisa ser bilinear ou melhor, além de ser definido pela implementação.

map_gamma é determinado pelo campo de metadados hdrgm:Gamma.

log_recovery(x, y) é o ganho de pixel de ponto flutuante normalizado em um espaço logarítmico:

recovery(x, y) = encoded_recovery(x, y) / 255.0
log_recovery(x, y) = pow(recovery(x, y), 1.0 / map_gamma)

A otimização máxima de exibição é um valor de ponto flutuante escalar definido como a proporção entre o ponto branco HDR atual e dividido pelo ponto branco SDR atual. Esse valor é fornecido pelo sistema de exibição e pode mudar ao longo do tempo.

hdr_capacity_max é determinado pelo campo de metadados hdrgm:HDRCapacityMax. hdr_capacity_min é determinado pelo campo de metadados hdrgm:HDRCapacityMin.

weight_factor é determinado da seguinte maneira quando hdrgm:BaseRenditionIsHDR é "False":

unclamped_weight_factor = (log2(max_display_boost) - hdr_capacity_min)
                        / (hdr_capacity_max - hdr_capacity_min)
weight_factor = clamp(unclamped_weight_factor, 0.0, 1.0)

Quando hdrgm:BaseRenditionIsHDR for "Verdadeiro", a segunda equação será:

weight_factor = 1.0 - clamp(unclamped_weight_factor, 0.0, 1.0)

gain_map_max é determinado pelo campo de metadados hdrgm:GainMapMax. gain_map_min é determinado pelo campo de metadados hdrgm:GainMapMin. offset_sdr é determinado pelo campo de metadados hdrgm:OffsetSDR. offset_hdr é determinado pelo campo de metadados hdrgm:OffsetHDR.

A renderização linear adaptada de HDR pode ser calculada da seguinte maneira:

log_boost(x, y) = gain_map_min * (1.0f - log_recovery(x, y))
                + gain_map_max * log_recovery(x, y)
HDR(x, y) = (SDR(x, y) + offset_sdr) * exp2(log_boost(x, y) * weight_factor)
          - offset_hdr

Se necessário, a implementação pode aplicar uma transformação a HDR(x, y) para colocar os dados no espaço esperado pela tela. Essas transformações precisam ser colorimetricamente corretas.

Detalhes do GContainer

Esta seção especifica requisitos adicionais para que esse formato esteja em conformidade com os metadados XML do GContainer. Os metadados são serializados de acordo com a especificação ISO 166841:2011(E) XMP Specification Part 1 (link em inglês) e incorporados no arquivo de imagem principal, conforme descrito em Armazenamento em arquivos da especificação Adobe XMP 3. O arquivo de imagem principal contém os itens a seguir, formatados como RDF/XML.

Requisitos do pacote XMP

O pacote XMP precisa incluir a extensão XMP de metadados do mapa de ganho usando o URI do namespace http://ns.adobe.com/hdr-gain-map/1.0/. O prefixo de namespace padrão é hdrgm.

O pacote XMP precisa definir hdrgm:Version="1.0".

Elemento do contêiner

O namespace XMP da extensão XMP do GContainer é http://ns.google.com/photos/1.0/container/. O prefixo de namespace padrão é Container.

A imagem principal contém um elemento Container:Directory nos metadados XMP que definem a ordem e as propriedades do arquivo de mídia subsequente no contêiner do arquivo. Cada arquivo no contêiner tem um item de mídia correspondente em Container:Directory. O item de mídia descreve o local no contêiner de arquivos e as propriedades básicas de cada arquivo concatenado.

O elemento do contêiner é codificado nos metadados XMP da imagem principal e define um diretório de itens de mídia no contêiner. Os itens de mídia precisam estar localizados no arquivo do contêiner na mesma ordem que os elementos de item de mídia no diretório e ser bem compactados.

O diretório pode conter apenas um item de imagem "Primary" e ele precisa ser o primeiro item no diretório.

Nome do elemento Tipo Descrição
Contêiner:diretório Matriz ordenada de estruturas Matriz ordenada de structs, cada uma contendo um struct Container:Item que define o layout e o conteúdo do contêiner.

Elemento do item

Os elementos do item descrevem como cada item de mídia é usado pelo aplicativo.

O URI do namespace XMP para a extensão XMP do GContainer Item é http://ns.google.com/photos/1.0/container/item/. O prefixo de namespace padrão é Item.

O primeiro item de mídia precisa ser a imagem principal.Ele precisa especificar Item:Semantic = "Primary" e um Item:Mime listados em Valores de tipo MIME do item.

O comprimento do item de imagem principal é determinado pela análise dela com base no tipo MIME, começando pelo início do contêiner do arquivo.

Os itens de mídia podem conter um atributo Item:Padding especificando o padding extra entre o final do item de mídia e o início do próximo item. Quando presente no último item de mídia no Container:Directory, Item:Padding indica o padding entre o final do item e o final do arquivo.

Cada item de mídia precisa conter o tipo Item:Mime e os atributos Item:Semantic. Os itens de mídia da imagem secundária precisam conter atributos Item:Length.

Os itens de mídia sequenciais podem compartilhar dados de recursos no contêiner de arquivos. O primeiro item de mídia determina o local do recurso no contêiner do arquivo, e os itens de mídia compartilhados subsequentes têm Item:Length definido como 0. Caso os dados do recurso sejam um contêiner, Item:URI pode ser usado para determinar o local dos dados do item de mídia no recurso.

O local dos recursos de item de mídia no contêiner é determinado pela soma do comprimento da codificação de imagem principal, dos valores Item:Length dos recursos de item de mídia secundários anteriores e de todos os valores Item:Padding anteriores. O Item:Padding é considerado 0 em recursos de item de mídia que não especificam o valor dele.

Nome do atributo Tipo Descrição
Item:Mime Texto String simples que indica o tipo MIME do item de mídia no contêiner. Para ver uma definição, consulte a seção "Valores do tipo MIME do item". Obrigatório.
Item:Semântico Texto String simples que indica o significado específico do aplicativo do item de mídia. Para ver uma definição, consulte a seção "Valores semânticos do item". Obrigatório.
Item:Comprimento Número inteiro String simples com um número inteiro positivo em bytes do item. O comprimento 0 indica que o recurso do item de mídia é compartilhado com o item de mídia anterior. Obrigatório para itens de mídia secundários. Opcional para o item de mídia de imagem principal.
Item:Rótulo Texto String definida pela implementação usada para remover a ambiguidade de vários elementos de item com o mesmo Item:Semantic. Opcional.
Item:Espaçamento interno Número inteiro Uma string contendo um tamanho inteiro positivo em bytes de padding extra entre o final do item de mídia e o início do próximo item de mídia, ou o fim do arquivo, quando usado no último item de mídia na Container:Directory. Um valor 0 é presumido quando não está presente. Opcional.
Item:URI Texto Uma string de URI em conformidade com a seção 8.11.9 da ISO/IEC 14496-12, contendo o URI relativo dos dados de mídia dentro do recurso de item de mídia. O padrão é o recurso de imagem principal. Opcional para os tipos MIME do formato de arquivo de mídia ISO base ISO/IEC 14496-12. Não pode ser usada de outra forma.

Valores do tipo MIME do item

O atributo Item:Mime define o tipo MIME de cada dado de item de mídia.

Valor Descrição
imagem/jpeg Imagem JPEG.

Exemplo de GContainer XMP

O exemplo a seguir de um pacote XMP válido do GContainer tem metadados extraídos do arquivo de exemplo ilustrado na seção Introdução.

<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 5.1.2">
  <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
    <rdf:Description
     xmlns:Container="http://ns.google.com/photos/1.0/container/"
     xmlns:Item="http://ns.google.com/photos/1.0/container/item/"
     xmlns:hdrgm="http://ns.adobe.com/hdr-gain-map/1.0/"
     hdrgm:Version="1.0">
      <Container:Directory>
        <rdf:Seq>
          <rdf:li rdf:parseType="Resource">
            <Container:Item
             Item:Semantic="Primary"
             Item:Mime="image/jpeg"/>
          </rdf:li>
          <rdf:li rdf:parseType="Resource">
            <Container:Item
             Item:Semantic="GainMap"
             Item:Mime="image/jpeg"
             Item:Length="66171"/>
          </rdf:li>
        </rdf:Seq>
      </Container:Directory>
    </rdf:Description>
  </rdf:RDF>
</x:xmpmeta>