AVFoundation HDR And Apple Log: Pro Video Workflows On iPhone

iPhone 15 Pro and later record Apple Log alongside the standard HEVC and Apple ProRes codecs, and AVFoundation surfaces the full pro-video stack through AVCaptureDevice and AVCaptureSession for apps that want to participate1. The HDR side of the same framework supports HLG, HDR10, and Dolby Vision through AVPlayer.HDRMode, plus video display as EDR through AVKit. The two pieces (capture and display) connect through codec choice, color space metadata, and the post-production handoff to grading apps.

The post walks the AVFoundation surface for pro video against Apple’s documentation. The frame is “what an app needs to expose for filmmakers, video editors, and HDR-conscious apps,” because the framework’s pro-video features are documented but not advertised; most apps that could benefit don’t expose them.

TL;DR

  • AVFoundation supports three HDR delivery formats: HLG (Hybrid Log-Gamma), HDR10, and Dolby Vision. iOS 26 introduced the simpler AVPlayer.eligibleForHDRPlayback Boolean as the recommended check; the legacy AVPlayer.HDRMode (an OptionSet struct with .hlg, .hdr10, .dolbyVision) and the class-level availableHDRModes are deprecated but still resolvable2.
  • AVCaptureDevice.isVideoHDREnabled reads whether the device is streaming HDR buffers; setting videoHDREnabled (after disabling automaticallyAdjustsVideoHDREnabled) forces it on for compatible formats.
  • Apple Log is iPhone 15 Pro+ and iPhone 16 Pro+ territory: a flat, desaturated color profile for grading in post. Apps capture it through AVCaptureDevice’s active format selection on devices that support the Apple Log color space, encoded as HEVC (10-bit) or Apple ProRes3.
  • Apple ships official Apple Log → Rec.709 and Apple Log → Rec.2020 LUTs through the developer site; apps that handle the post-production handoff include the LUT or document where to find it4.
  • AVKit displays HDR content as EDR (Extended Dynamic Range) on supporting devices; SDR devices receive tone-mapped output automatically. Apps using AVPlayerViewController or VideoPlayer get the right behavior without per-display branching.

The Three HDR Formats

AVFoundation supports three HDR formats. The legacy way to enumerate them was the AVPlayer.HDRMode OptionSet struct (cases .hlg, .hdr10, .dolbyVision) plus the class-level AVPlayer.availableHDRModes property; iOS 26 deprecates both in favor of the simpler instance-level AVPlayer.eligibleForHDRPlayback Boolean2.

HLG (Hybrid Log-Gamma). The broadcast standard, designed to be backward-compatible with SDR displays that interpret the signal correctly. HLG content can play on an SDR TV without crushed shadows or blown highlights; the same signal looks better on an HDR display. Apps that need broadest device compatibility default to HLG.

HDR10. The TV / streaming standard. Static metadata (peak brightness, color volume) embedded in the stream; less detail than Dolby Vision but more universal. Most streaming services that mark content as “HDR” use HDR10 or Dolby Vision.

Dolby Vision. Frame-by-frame HDR metadata, typically the highest-quality HDR experience. Requires a Dolby Vision-capable display chain (decoder, display) for full benefit; tone-maps gracefully on lower-tier displays.

For modern code, AVPlayer.eligibleForHDRPlayback reads whether the current item plays in HDR on the device. Apps that need explicit format introspection (legacy code paths, format-specific UI) can still query AVPlayer.availableHDRModes, but new code should reach for the simpler Boolean.

Capturing HDR Video Through AVCaptureDevice

Capture-side HDR uses AVCaptureDevice properties. The two control points are the format and the HDR toggle:

import AVFoundation

guard let device = AVCaptureDevice.default(for: .video) else { return }

try device.lockForConfiguration()
device.automaticallyAdjustsVideoHDREnabled = false
device.isVideoHDREnabled = true
device.unlockForConfiguration()

The automaticallyAdjustsVideoHDREnabled property defaults to true; iOS picks HDR or SDR per format based on the operating conditions. Apps that want explicit control set it to false and toggle isVideoHDREnabled directly. Note: the property is observable; reading isVideoHDREnabled reflects the current state, which may differ from a manual setting if the format doesn’t support HDR.

AVCaptureDevice.activeFormat exposes the format’s HDR support through isVideoHDRSupported; not every format on a device supports HDR. The pattern for HDR-capable apps is to enumerate the device’s formats, find ones with isVideoHDRSupported == true at the desired resolution and frame rate, and set the active format explicitly before enabling HDR.

Apple Log: The Pro Color Workflow

Apple Log is a flat color profile available on iPhone 15 Pro / Pro Max / iPhone 16 Pro / Pro Max and later. The profile records video with a logarithmic gamma curve and minimal in-camera tone mapping; the image looks washed out straight out of the camera but preserves the maximum dynamic range for grading in post-production3.

The capture path: 1. Select an AVCaptureDevice.Format that supports Apple Log. The format exposes this through its supportedColorSpaces list, which includes .appleLog on supporting devices. 2. Set the device’s activeColorSpace to .appleLog after locking for configuration. 3. Configure the recording codec (HEVC for the iPhone-internal path, Apple ProRes for the higher-bandwidth path). 4. Record. The captured video carries Apple Log color metadata.

The post-production handoff is the value proposition: Apple Log gives the editor maximum flexibility to grade highlights and shadows independently, pull color in directions the camera couldn’t, and match footage from other Log-capable cameras.

For apps that handle Apple Log footage (video editors, color-grading utilities, asset management tools), the framework exposes the color metadata through the asset’s track properties; the app reads AVAssetTrack.formatDescriptions and inspects the kCVImageBufferTransferFunctionKey to confirm Apple Log content.

Encoding: HEVC, ProRes, ProRes Log

Three codec paths matter for HDR / Apple Log video:

HEVC (H.265). The default consumer codec. 10-bit HEVC supports HDR (HLG, HDR10, Dolby Vision metadata). Smallest file sizes among HDR-capable codecs. iPhone records most consumer HDR video through HEVC.

Apple ProRes. The professional codec. Larger file sizes (10-50× HEVC at equivalent quality) but lossless intra-frame compression that grades cleanly. iPhone 15 Pro+ records ProRes either to internal storage (4K30 max, sustained limited) or to an external USB-C SSD (4K60 sustained, longer durations).

Apple ProRes Log. ProRes encoded with the Apple Log color profile. The “pro filmmaker” path: maximum grading flexibility, biggest files, requires an external SSD for sustained 4K60 capture. The handoff target is DaVinci Resolve, Final Cut, or another grading-capable NLE.

The codec choice is exposed through AVCaptureMovieFileOutput’s output settings. Apps that handle the recording flow set the output format dictionary with the AVVideoCodecKey set to one of .hevc, .proRes422, .proRes422HQ, .proRes422LT, .proRes422Proxy, .proRes4444, etc. These are the AVVideoCodecType static constants; note no “apple” prefix on the modern Swift API. The AVCaptureDevice.Format constrains which codecs the device can stream into; not every codec is available at every resolution.

Color Grading Handoff: LUTs

Apple Log footage looks washed out. The grading workflow applies a LUT (Look-Up Table) to map Apple Log’s color space into the delivery target (Rec.709 for SDR, Rec.2020 for HDR). Apple ships official LUTs through the Final Cut Pro / Pro Apps support documentation hub4:

  • Apple Log to Rec.709. SDR delivery. The standard YouTube / web video color space.
  • Apple Log to Rec.2020 HLG. HDR delivery via HLG. Broadcast / general HDR.
  • Apple Log to Rec.2020 HDR10. HDR delivery via HDR10. Streaming HDR.

Apps that handle Apple Log footage either: 1. Embed the LUT directly and apply it on import (Final Cut, DaVinci Resolve, Photoshop with the LUT plug-in) 2. Document the LUT path so editors can apply it manually

For app developers building an Apple Log-aware tool, the right pattern is option 1: bundle the LUT, apply it on import, and let users export through the standard delivery format. The Apple-provided LUTs are free to redistribute through Apple’s developer-tools licensing.

Display: EDR Through AVKit

The display side is largely automatic. AVKit’s AVPlayerViewController (UIKit) and SwiftUI’s VideoPlayer both render HDR content as EDR (Extended Dynamic Range) on supporting displays:

  • iPhone OLED displays (iPhone X and later, Pro models with ProMotion).
  • iPad Pro mini-LED displays.
  • Mac XDR displays.
  • External HDR-capable displays through AirPlay.

For SDR-only displays, the system tone-maps HDR content automatically. Apps don’t branch on display capability for the playback path; the system handles it.

Apps with custom video pipelines (Metal-based players, AVSampleBufferDisplayLayer with custom processing) need to opt into EDR explicitly through CAMetalLayer.wantsExtendedDynamicRangeContent or the equivalent layer property. The default for custom Metal layers is SDR; HDR support requires the explicit opt-in plus a corresponding pixel format that supports >1.0 component values (typically bgr10a2Unorm or an HDR-capable float format).

Common Failures

Three patterns from the AVFoundation HDR / Apple Log failure logs:

Capturing HDR but recording to a codec that doesn’t support it. Setting isVideoHDREnabled = true on a session that records to 8-bit HEVC produces silent SDR output. The HDR signal is captured but the encoding strips it. Fix: pair HDR capture with a 10-bit codec (10-bit HEVC, ProRes, or ProRes Log).

Apple Log capture without a LUT in the delivery pipeline. Apple Log video looks washed out by design; viewers seeing un-graded Apple Log footage assume the camera or app is broken. Fix: either apply the Apple Log → Rec.709 LUT before display in the app, or surface the footage to the user as “log” with clear labeling so they understand the post-processing requirement.

Display HDR through wantsExtendedDynamicRangeContent without bgr10a2Unorm (or float HDR pixel format). A Metal layer with EDR opted-in but rendering to 8-bit-per-channel pixel format produces clipped highlights. Fix: pair the EDR opt-in with the correct pixel format (10-bit unsigned-norm or 16-bit float).

What This Pattern Means For iOS 26+ Apps

Three takeaways.

  1. Default to HEVC for general apps; reach for ProRes only when professional workflow earns it. A consumer video app capturing HDR through 10-bit HEVC delivers full HDR with reasonable file sizes. ProRes is for filmmakers and editors who need lossless grading flexibility; the file-size cost is real.

  2. Apple Log is iPhone 15 Pro+ territory; document the device requirement. Apps that promise Apple Log capture need to check AVCaptureDevice.Format.supportedColorSpaces for .appleLog at runtime and gracefully degrade on devices that don’t support it. The format check is per-device, not per-iOS-version.

  3. Bundle the LUT or document the workflow for Apple Log footage. Apps that handle Apple Log video need a path from raw Log to graded delivery. Either embed the LUT and apply it on import, or surface the Apple-provided LUT to users with clear documentation of how to apply it in their NLE of choice.

The full Apple Ecosystem cluster: typed App Intents; MCP servers; the routing question; Foundation Models; the runtime vs tooling LLM distinction; three surfaces; the single source of truth pattern; Two MCP Servers; hooks for Apple development; Live Activities; the watchOS runtime; SwiftUI internals; RealityKit’s spatial mental model; SwiftData schema discipline; Liquid Glass patterns; multi-platform shipping; the platform matrix; Vision framework; Symbol Effects; Core ML inference; Writing Tools API; Swift Testing; Privacy Manifest; Accessibility as platform; SF Pro typography; visionOS spatial patterns; Speech framework; SwiftData migrations; tvOS focus engine; @Observable internals; SwiftUI Layout protocol; custom SF Symbols; what I refuse to write about. The hub is at the Apple Ecosystem Series. For broader iOS-with-AI-agents context, see the iOS Agent Development guide.

FAQ

Do I need iPhone 15 Pro to record HDR video in my app?

No. HDR video (HLG, HDR10) is supported on iPhone 12 Pro and later through 10-bit HEVC. iPhone 15 Pro and later add Apple Log specifically; the broader HDR pipeline works on more devices.

What’s the difference between Apple Log and Dolby Vision?

Apple Log is a capture color profile (designed for grading). Dolby Vision is a delivery HDR format (designed for playback). They occupy different stages of the pipeline. Apple Log footage gets graded and exported to a delivery format; Dolby Vision is one of the delivery options.

How do I detect Apple Log support at runtime?

Enumerate AVCaptureDevice.formats, then for each format check supportedColorSpaces. Apple Log support shows up as .appleLog in that list. Apps that want to expose Apple Log capture only on supporting devices key off this check rather than parsing iPhone model identifiers.

What’s the file size difference between HEVC HDR and ProRes Log?

Roughly 10-50× per minute, depending on bitrate and resolution. 4K30 HEVC HDR is around 50-100 MB/min; 4K30 ProRes 422 HQ is around 1.5-2.5 GB/min. ProRes Log files require an external USB-C SSD for sustained 4K60 capture; the iPhone’s internal storage is rate-limited for sustained ProRes write.

Can I display Apple Log footage without a LUT?

You can display the raw video, but it will look washed out and desaturated. The Apple Log color profile is intended for grading, not direct viewing. Apps that need to surface raw Apple Log footage to users should label it as “log” so users understand the post-processing requirement; otherwise, apply the Apple Log → Rec.709 LUT for display.

Does AVFoundation handle HDR-to-SDR tone mapping automatically?

Yes for AVKit’s standard players (AVPlayerViewController, SwiftUI’s VideoPlayer). Custom Metal video pipelines need to opt into EDR explicitly and select an HDR-capable pixel format; without those, HDR content displays as clipped SDR.

References


  1. Apple Developer Documentation: AVFoundation. The framework reference covering capture, editing, and playback APIs across iOS, iPadOS, macOS, tvOS, watchOS, and visionOS. 

  2. Apple Developer Documentation: AVPlayer.HDRMode. The three HDR cases (.hlg, .hdr10, .dolbyVision) and the availableHDRModes query for what an AVPlayer instance supports for the current item. 

  3. Apple Developer Documentation: AVCaptureDevice and AVCaptureDevice.Format. The capture device’s format properties including supportedColorSpaces for Apple Log detection and isVideoHDRSupported for HDR feasibility. 

  4. Apple Pro Apps Support: Apple Pro Apps support and downloads. The Pro Apps hub linking to the Apple Log Profile resources and downloadable LUTs for converting Apple Log footage to standard delivery color spaces; LUTs ship bundled with Final Cut Pro and Logic Pro and as standalone downloads. 

Related Posts

SwiftData Migrations: Lightweight vs Custom, And When You Don't Need a V2

SwiftData's migration model uses VersionedSchema, MigrationStage, and SchemaMigrationPlan. Most schema changes don't nee…

13 min read

The Privacy Manifest Deep Dive: What Counts As Data Collection

Apple's privacy manifest is a structured contract, not a checkbox: four sections, five required-reason API categories, S…

14 min read

The Cleanup Layer Is the Real AI Agent Market

Charlie Labs pivoted from building agents to cleaning up after them. The AI agent market is moving from generation to pr…

15 min read