HDR do AVFoundation e Apple Log: fluxos de vídeo profissionais no iPhone
O iPhone 15 Pro e posteriores gravam em Apple Log junto com os codecs padrão HEVC e Apple ProRes, e o AVFoundation expõe toda a stack de vídeo profissional através de AVCaptureDevice e AVCaptureSession para apps que queiram participar1. O lado HDR do mesmo framework suporta HLG, HDR10 e Dolby Vision através de AVPlayer.HDRMode, além de exibição de vídeo como EDR via AVKit. As duas peças (captura e exibição) se conectam pela escolha do codec, metadados do espaço de cor e o handoff de pós-produção para apps de colorização.
Este post percorre a superfície do AVFoundation para vídeo profissional com base na documentação da Apple. O recorte é “o que um app precisa expor para cineastas, editores de vídeo e apps conscientes de HDR”, porque os recursos de vídeo profissional do framework são documentados, mas não divulgados; a maioria dos apps que poderiam se beneficiar não os expõe.
TL;DR
- O AVFoundation suporta três formatos de entrega HDR: HLG (Hybrid Log-Gamma), HDR10 e Dolby Vision. O iOS 26 introduziu o Boolean mais simples
AVPlayer.eligibleForHDRPlaybackcomo a verificação recomendada; o legadoAVPlayer.HDRMode(uma structOptionSetcom.hlg,.hdr10,.dolbyVision) e oavailableHDRModesno nível da classe estão obsoletos, mas ainda resolvíveis2. AVCaptureDevice.isVideoHDREnabledlê se o dispositivo está transmitindo buffers HDR; definirvideoHDREnabled(após desabilitarautomaticallyAdjustsVideoHDREnabled) força a ativação para formatos compatíveis.- Apple Log é território do iPhone 15 Pro+ e iPhone 16 Pro+: um perfil de cor plano e dessaturado para colorização em pós. Apps capturam isso através da seleção de formato ativo do
AVCaptureDeviceem dispositivos que suportam o espaço de cor Apple Log, codificado como HEVC (10-bit) ou Apple ProRes3. - A Apple disponibiliza LUTs oficiais Apple Log → Rec.709 e Apple Log → Rec.2020 através do site para desenvolvedores; apps que lidam com o handoff de pós-produção incluem o LUT ou documentam onde encontrá-lo4.
- O AVKit exibe conteúdo HDR como EDR (Extended Dynamic Range) em dispositivos compatíveis; dispositivos SDR recebem saída tone-mapped automaticamente. Apps que usam
AVPlayerViewControllerouVideoPlayerobtêm o comportamento correto sem ramificação por display.
Os três formatos HDR
O AVFoundation suporta três formatos HDR. A maneira legada de enumerá-los era a struct OptionSet AVPlayer.HDRMode (casos .hlg, .hdr10, .dolbyVision) mais a propriedade AVPlayer.availableHDRModes no nível da classe; o iOS 26 deprecia ambos em favor do Boolean mais simples AVPlayer.eligibleForHDRPlayback no nível de instância2.
HLG (Hybrid Log-Gamma). O padrão de broadcast, projetado para ser retrocompatível com displays SDR que interpretam o sinal corretamente. Conteúdo HLG pode ser reproduzido em uma TV SDR sem sombras esmagadas ou highlights estourados; o mesmo sinal fica melhor em um display HDR. Apps que precisam da maior compatibilidade entre dispositivos usam HLG por padrão.
HDR10. O padrão de TV / streaming. Metadados estáticos (brilho de pico, volume de cor) embutidos no stream; menos detalhes que Dolby Vision, mas mais universal. A maioria dos serviços de streaming que marca conteúdo como “HDR” usa HDR10 ou Dolby Vision.
Dolby Vision. Metadados HDR quadro a quadro, tipicamente a experiência HDR de mais alta qualidade. Requer uma cadeia de exibição compatível com Dolby Vision (decodificador, display) para benefício total; faz tone-map graciosamente em displays de menor categoria.
Para código moderno, AVPlayer.eligibleForHDRPlayback lê se o item atual é reproduzido em HDR no dispositivo. Apps que precisam de introspecção explícita de formato (caminhos de código legados, UI específica de formato) ainda podem consultar AVPlayer.availableHDRModes, mas código novo deve usar o Boolean mais simples.
Capturando vídeo HDR através de AVCaptureDevice
HDR no lado da captura usa propriedades de AVCaptureDevice. Os dois pontos de controle são o formato e o toggle HDR:
import AVFoundation
guard let device = AVCaptureDevice.default(for: .video) else { return }
try device.lockForConfiguration()
device.automaticallyAdjustsVideoHDREnabled = false
device.isVideoHDREnabled = true
device.unlockForConfiguration()
A propriedade automaticallyAdjustsVideoHDREnabled tem padrão true; o iOS escolhe HDR ou SDR por formato com base nas condições de operação. Apps que querem controle explícito definem como false e alternam isVideoHDREnabled diretamente. Observação: a propriedade é observável; ler isVideoHDREnabled reflete o estado atual, que pode diferir de uma configuração manual se o formato não suportar HDR.
AVCaptureDevice.activeFormat expõe o suporte HDR do formato através de isVideoHDRSupported; nem todo formato em um dispositivo suporta HDR. O padrão para apps com suporte a HDR é enumerar os formats do dispositivo, encontrar aqueles com isVideoHDRSupported == true na resolução e taxa de quadros desejadas, e definir o formato ativo explicitamente antes de habilitar HDR.
Apple Log: o fluxo de cor profissional
Apple Log é um perfil de cor plano disponível no iPhone 15 Pro / Pro Max / iPhone 16 Pro / Pro Max e posteriores. O perfil grava vídeo com uma curva gama logarítmica e tone mapping mínimo na câmera; a imagem parece desbotada direto da câmera, mas preserva a faixa dinâmica máxima para colorização em pós-produção3.
O caminho de captura:
1. Selecione um AVCaptureDevice.Format que suporte Apple Log. O formato expõe isso através de sua lista supportedColorSpaces, que inclui .appleLog em dispositivos compatíveis.
2. Defina o activeColorSpace do dispositivo como .appleLog após bloquear para configuração.
3. Configure o codec de gravação (HEVC para o caminho interno do iPhone, Apple ProRes para o caminho de maior largura de banda).
4. Grave. O vídeo capturado carrega os metadados de cor Apple Log.
O handoff de pós-produção é a proposta de valor: Apple Log dá ao editor flexibilidade máxima para colorizar highlights e sombras independentemente, puxar a cor em direções que a câmera não conseguiria, e combinar imagens de outras câmeras compatíveis com Log.
Para apps que lidam com material em Apple Log (editores de vídeo, utilitários de colorização, ferramentas de gerenciamento de assets), o framework expõe os metadados de cor através das propriedades de track do asset; o app lê AVAssetTrack.formatDescriptions e inspeciona o kCVImageBufferTransferFunctionKey para confirmar conteúdo Apple Log.
Codificação: HEVC, ProRes, ProRes Log
Três caminhos de codec importam para vídeo HDR / Apple Log:
HEVC (H.265). O codec de consumo padrão. HEVC 10-bit suporta HDR (metadados HLG, HDR10, Dolby Vision). Os menores tamanhos de arquivo entre os codecs com suporte a HDR. O iPhone grava a maioria do vídeo HDR de consumo através de HEVC.
Apple ProRes. O codec profissional. Tamanhos de arquivo maiores (10-50× HEVC com qualidade equivalente), mas compressão intra-frame sem perdas que faz colorização limpa. O iPhone 15 Pro+ grava ProRes seja para armazenamento interno (4K30 máx, sustentado limitado) ou para um SSD USB-C externo (4K60 sustentado, durações mais longas).
Apple ProRes Log. ProRes codificado com o perfil de cor Apple Log. O caminho do “cineasta profissional”: flexibilidade máxima de colorização, arquivos maiores, requer um SSD externo para captura sustentada em 4K60. O alvo do handoff é DaVinci Resolve, Final Cut, ou outro NLE com capacidade de colorização.
A escolha do codec é exposta através das configurações de saída do AVCaptureMovieFileOutput. Apps que lidam com o fluxo de gravação definem o dicionário de formato de saída com a AVVideoCodecKey definida como uma de .hevc, .proRes422, .proRes422HQ, .proRes422LT, .proRes422Proxy, .proRes4444, etc. Estas são as constantes estáticas AVVideoCodecType; observe que não há prefixo “apple” na API Swift moderna. O AVCaptureDevice.Format restringe quais codecs o dispositivo pode transmitir; nem todo codec está disponível em toda resolução.
Handoff de colorização: LUTs
Material em Apple Log parece desbotado. O fluxo de colorização aplica um LUT (Look-Up Table) para mapear o espaço de cor do Apple Log no alvo de entrega (Rec.709 para SDR, Rec.2020 para HDR). A Apple disponibiliza LUTs oficiais através do hub de documentação de suporte do Final Cut Pro / Pro Apps4:
- Apple Log para Rec.709. Entrega SDR. O espaço de cor padrão para vídeo no YouTube / web.
- Apple Log para Rec.2020 HLG. Entrega HDR via HLG. Broadcast / HDR geral.
- Apple Log para Rec.2020 HDR10. Entrega HDR via HDR10. HDR de streaming.
Apps que lidam com material em Apple Log fazem uma de duas coisas: 1. Embutem o LUT diretamente e o aplicam na importação (Final Cut, DaVinci Resolve, Photoshop com o plug-in de LUT) 2. Documentam o caminho do LUT para que editores possam aplicá-lo manualmente
Para desenvolvedores de app construindo uma ferramenta consciente de Apple Log, o padrão correto é a opção 1: agrupar o LUT, aplicá-lo na importação, e deixar usuários exportarem através do formato de entrega padrão. Os LUTs fornecidos pela Apple são livres para redistribuir através do licenciamento de ferramentas para desenvolvedores da Apple.
Exibição: EDR através do AVKit
O lado da exibição é amplamente automático. O AVPlayerViewController (UIKit) do AVKit e o VideoPlayer do SwiftUI ambos renderizam conteúdo HDR como EDR (Extended Dynamic Range) em displays compatíveis:
- Displays OLED do iPhone (iPhone X e posteriores, modelos Pro com ProMotion).
- Displays mini-LED do iPad Pro.
- Displays XDR do Mac.
- Displays externos compatíveis com HDR através do AirPlay.
Para displays apenas SDR, o sistema faz tone-map do conteúdo HDR automaticamente. Apps não ramificam na capacidade do display para o caminho de reprodução; o sistema cuida disso.
Apps com pipelines de vídeo customizados (players baseados em Metal, AVSampleBufferDisplayLayer com processamento customizado) precisam optar por EDR explicitamente através de CAMetalLayer.wantsExtendedDynamicRangeContent ou a propriedade de layer equivalente. O padrão para layers Metal customizados é SDR; suporte a HDR requer o opt-in explícito mais um formato de pixel correspondente que suporte valores de componente >1.0 (tipicamente bgr10a2Unorm ou um formato float compatível com HDR).
Falhas comuns
Três padrões dos logs de falha de HDR / Apple Log do AVFoundation:
Capturar HDR mas gravar em um codec que não o suporta. Definir isVideoHDREnabled = true em uma sessão que grava em HEVC 8-bit produz saída SDR silenciosa. O sinal HDR é capturado, mas a codificação o descarta. Solução: combine captura HDR com um codec 10-bit (HEVC 10-bit, ProRes ou ProRes Log).
Captura em Apple Log sem um LUT no pipeline de entrega. Vídeo Apple Log parece desbotado por design; espectadores vendo material Apple Log sem colorização assumem que a câmera ou app está com defeito. Solução: ou aplique o LUT Apple Log → Rec.709 antes da exibição no app, ou apresente o material ao usuário como “log” com rotulagem clara para que ele entenda o requisito de pós-processamento.
Exibir HDR através de wantsExtendedDynamicRangeContent sem bgr10a2Unorm (ou formato de pixel HDR float). Um layer Metal com EDR habilitado mas renderizando em formato de pixel 8-bit por canal produz highlights cortados. Solução: combine o opt-in EDR com o formato de pixel correto (unsigned-norm de 10-bit ou float de 16-bit).
O que esse padrão significa para apps iOS 26+
Três conclusões.
-
Use HEVC por padrão para apps gerais; recorra a ProRes apenas quando o fluxo profissional justificar. Um app de vídeo de consumo capturando HDR através de HEVC 10-bit entrega HDR completo com tamanhos de arquivo razoáveis. ProRes é para cineastas e editores que precisam de flexibilidade de colorização sem perdas; o custo em tamanho de arquivo é real.
-
Apple Log é território do iPhone 15 Pro+; documente o requisito de dispositivo. Apps que prometem captura em Apple Log precisam verificar
AVCaptureDevice.Format.supportedColorSpacespor.appleLogem runtime e degradar graciosamente em dispositivos que não o suportam. A verificação de formato é por dispositivo, não por versão de iOS. -
Agrupe o LUT ou documente o fluxo para material em Apple Log. Apps que lidam com vídeo Apple Log precisam de um caminho do Log bruto até a entrega colorizada. Ou embuta o LUT e o aplique na importação, ou apresente o LUT fornecido pela Apple aos usuários com documentação clara de como aplicá-lo no NLE de sua escolha.
O cluster completo do Ecossistema Apple: App Intents tipados; servidores MCP; a questão do roteamento; Foundation Models; a distinção LLM entre runtime e tooling; três superfícies; o padrão de fonte única da verdade; Dois Servidores MCP; hooks para desenvolvimento Apple; Live Activities; o contrato de runtime do watchOS; internals do SwiftUI; o modelo mental espacial do RealityKit; disciplina de schema do SwiftData; padrões do Liquid Glass; shipping multi-plataforma; a matriz de plataformas; framework Vision; Symbol Effects; inferência Core ML; API Writing Tools; Swift Testing; Privacy Manifest; Acessibilidade como plataforma; tipografia SF Pro; padrões espaciais do visionOS; framework Speech; migrações do SwiftData; focus engine do tvOS; internals do @Observable; protocolo Layout do SwiftUI; SF Symbols customizados; sobre o que me recuso a escrever. O hub está na Série Ecossistema Apple. Para contexto mais amplo de iOS com agentes de IA, veja o guia de Desenvolvimento de Agentes iOS.
FAQ
Preciso do iPhone 15 Pro para gravar vídeo HDR no meu app?
Não. Vídeo HDR (HLG, HDR10) é suportado no iPhone 12 Pro e posteriores através de HEVC 10-bit. O iPhone 15 Pro e posteriores adicionam Apple Log especificamente; o pipeline HDR mais amplo funciona em mais dispositivos.
Qual a diferença entre Apple Log e Dolby Vision?
Apple Log é um perfil de cor de captura (projetado para colorização). Dolby Vision é um formato de entrega HDR (projetado para reprodução). Eles ocupam estágios diferentes do pipeline. Material em Apple Log é colorizado e exportado para um formato de entrega; Dolby Vision é uma das opções de entrega.
Como detecto suporte a Apple Log em runtime?
Enumere AVCaptureDevice.formats, depois para cada formato verifique supportedColorSpaces. Suporte a Apple Log aparece como .appleLog nessa lista. Apps que querem expor captura em Apple Log apenas em dispositivos compatíveis se baseiam nessa verificação em vez de fazer parsing dos identificadores de modelo do iPhone.
Qual a diferença em tamanho de arquivo entre HEVC HDR e ProRes Log?
Aproximadamente 10-50× por minuto, dependendo do bitrate e resolução. HEVC HDR em 4K30 fica em torno de 50-100 MB/min; ProRes 422 HQ em 4K30 fica em torno de 1,5-2,5 GB/min. Arquivos ProRes Log requerem um SSD USB-C externo para captura sustentada em 4K60; o armazenamento interno do iPhone tem limite de taxa para escrita ProRes sustentada.
Posso exibir material em Apple Log sem um LUT?
Você pode exibir o vídeo bruto, mas ele parecerá desbotado e dessaturado. O perfil de cor Apple Log é destinado para colorização, não para visualização direta. Apps que precisam apresentar material Apple Log bruto aos usuários devem rotulá-lo como “log” para que usuários entendam o requisito de pós-processamento; caso contrário, aplique o LUT Apple Log → Rec.709 para exibição.
O AVFoundation faz tone mapping de HDR para SDR automaticamente?
Sim para os players padrão do AVKit (AVPlayerViewController, VideoPlayer do SwiftUI). Pipelines de vídeo Metal customizados precisam optar por EDR explicitamente e selecionar um formato de pixel compatível com HDR; sem isso, conteúdo HDR é exibido como SDR cortado.
Referências
-
Documentação para Desenvolvedores Apple: AVFoundation. A referência do framework cobrindo APIs de captura, edição e reprodução em iOS, iPadOS, macOS, tvOS, watchOS e visionOS. ↩
-
Documentação para Desenvolvedores Apple:
AVPlayer.HDRMode. Os três casos HDR (.hlg,.hdr10,.dolbyVision) e a consultaavailableHDRModespara o que uma instância deAVPlayersuporta para o item atual. ↩↩ -
Documentação para Desenvolvedores Apple:
AVCaptureDeviceeAVCaptureDevice.Format. As propriedades de formato do dispositivo de captura incluindosupportedColorSpacespara detecção de Apple Log eisVideoHDRSupportedpara viabilidade de HDR. ↩↩ -
Suporte de Pro Apps da Apple: Suporte e downloads de Pro Apps da Apple. O hub de Pro Apps com links para os recursos do Apple Log Profile e LUTs para download para converter material em Apple Log para espaços de cor de entrega padrão; LUTs vêm agrupados com Final Cut Pro e Logic Pro e como downloads independentes. ↩↩