Указание информации о цветовом пространстве для пиксельных буферов
Q: Почему делает AVAssetWriterInputPixelBufferAdaptor appendPixelBuffer:withPresentationTime: сбой метода с AVAssetWriter ошибочный набор свойств к-12917 (kVTInsufficientSourceColorDataErr) когда я пытаюсь записать пиксельные буферы, не выделенные от предоставленного CVPixelBufferPool к выходному файлу?
A:-12917 (kVTInsufficientSourceColorDataErr) ошибка указывает, что цветовое пространство не было указано для буферов исходного пикселя. Если Вы не используете пиксельные буферы, выделенные от предоставленного CVPixelBufferPool для AVAssetWriterInputPixelBufferAdaptor экземпляры необходимо указать информацию о цветовом пространстве для буферов.
Для RGB исходные буферы, набор kCVImageBufferICCProfileKey или kCVImageBufferCGColorSpaceKey присоединение на буфере. Вот пример того, как установить присоединение цветового пространства для RGB пиксель буферизует на OS X:
Перечисление 1 , Указывающее присоединение цветового пространства для RGB пиксель буферизует на OS X.
CGColorSpaceRef sRGBColorSpace = CGColorSpaceCreateWithName(kCGColorSpaceSRGB); |
if (sRGBColorSpace != NULL) |
{ |
CFDataRef sRGBProfileData = CGColorSpaceCopyICCProfile(sRGBColorSpace); |
if (sRGBProfileData != NULL) |
{ |
NSDictionary *pbAttachements = |
@{(id)kCVImageBufferICCProfileKey : (id)sRGBProfileData}; |
CFRelease(sRGBProfileData); |
CVBufferRef pixelBuffer = <#Your pixel buffer#>; |
/* set the color space attachment on the buffer */ |
CVBufferSetAttachments(pixelBuffer, |
(CFDictionaryRef)pbAttachements, kCVAttachmentMode_ShouldPropagate); |
} |
else |
{ |
NSLog(@"CGColorSpaceCopyICCProfile returned NULL"); |
/* handle the error */ |
} |
CFRelease(sRGBColorSpace); |
} |
else |
{ |
NSLog(@"CGColorSpaceCreateWithName returned NULL"); |
/* handle the error */ |
} |
Установите kCVImageBufferYCbCrMatrixKey, kCVImageBufferColorPrimariesKey, и kCVImageBufferTransferFunctionKey присоединения для описания YUV буферы. Вот пример:
Перечисление 2 , Указывающее присоединение цветового пространства для YUV пиксельные буферы.
NSDictionary *pbAttachments = |
@{(id)kCVImageBufferYCbCrMatrixKey:(id)kCVImageBufferYCbCrMatrix_ITU_R_709_2, |
(id)kCVImageBufferColorPrimariesKey:(id)kCVImageBufferColorPrimaries_ITU_R_709_2, |
(id)kCVImageBufferTransferFunctionKey:(id)kCVImageBufferTransferFunction_ITU_R_709_2}; |
CVBufferRef pixelBuffer = <#Your pixel buffer#>; |
CVBufferSetAttachments(pixelBuffer, |
(CFDictionaryRef)pbAttachments, kCVAttachmentMode_ShouldPropagate); |
История версии документа
| Дата | Примечания |
|---|---|
| 05.06.2014 | Новый документ, описывающий, как указать информацию о цветовом пространстве для пиксельных буферов |