We capture Apple Log video using AVCaptureVideoDataOutput with:
- AVCaptureDevice.activeColorSpace = .appleLog or .appleLog2
kCVPixelFormatType_422YpCbCr10BiPlanarVideoRange(x422)- AVAssetWriter for the final ProRes/HEVC recording
We need to bake spatial operations such as a centre crop and optional anamorphic desqueeze into the recorded raster. We want the result to remain Apple Log for subsequent grading; we do not want to display-transform or convert it to HLG.
Core Image/Core Graphics does not appear to expose a public Apple Log or Apple Log 2 CGColorSpace. Core Video instead identifies the signal using kCVImageBufferLogTransferFunctionKey.
Would this be the supported Core Image approach for spatial-only processing?
let image = CIImage(
cvPixelBuffer: sourceBuffer,
options: [.colorSpace: NSNull()]
)
let context = CIContext(
mtlDevice: metalDevice,
options: [
.workingColorSpace: NSNull(),
.outputColorSpace: NSNull(),
.cacheIntermediates: false
]
)
let outputImage = image
.cropped(to: cropRect)
.transformed(by: spatialTransform)
context.render(
outputImage,
to: destinationX422Buffer,
bounds: outputBounds,
colorSpace: nil
)
We would then copy the source buffer’s Apple Log colour and Log-transfer attachments to the destination buffer and append it to an AVAssetWriterInputPixelBufferAdaptor.
Could an Apple engineer clarify the following?
-
Does
CIImage(cvPixelBuffer:)natively interpretkCVImageBufferLogTransferFunctionKey, even though no public Apple Log CGColorSpace exists? -
When
NSNull()/nilis supplied as above, does Core Image leave the Apple Log values unmanaged during crop and affine operations? -
When rendering x422 to x422, can Core Image preserve the Log signal apart from expected resampling/rounding, or does it internally perform a colour conversion such as YCbCr → RGB → YCbCr?
-
For scaling or anamorphic desqueeze, is Apple’s recommended workflow to:
- resample the encoded Apple Log values with colour management disabled, or
- explicitly decode Apple Log to a linear working space, resample, and encode back using a custom Metal implementation?
-
Is copying kCVImageBufferLogTransferFunctionKey and the related colour attachments from source to destination sufficient for AVAssetWriter, assuming the writer settings were obtained from recommendedVideoSettingsForAssetWriter(writingTo:)?
-
Is there ever a supported reason to use HLG as an intermediate for Apple Log processing, or should that be avoided?
This this part, we are concerned about preserving the captured Log signal in a recording pipeline, not applying a viewing LUT or displaying Apple Log.
Next, we also support optional LUT processing with CIColorCube. Some LUTs are technical Apple Log-to-display transforms, while others expect linear or Rec.709 input. If the image is created with .colorSpace: NSNull(), we understand that the LUT receives unmanaged Apple Log code values and that the LUT itself must perform the required transfer-function and gamut conversion.
Does Core Image synthesize an Apple Log-aware input color space from kCVImageBufferLogTransferFunctionKey, or must applications implement Apple Log/Apple Log 2 decoding explicitly before using ordinary Core Image filters? Is there a supported CGColorSpace, ColorSync profile, or Core Image conversion API for this?
Additionally, what numeric range does CIColorCube receive when its source is an x422 video-range Apple Log buffer— normalized Log RGB values, or values requiring explicit video-range conversion?