Я изо всех сил пытался заставить это работать с AVSampleBufferDisplayLayer
.
У меня есть 4 канала 8-битной кодированной матрицы BGRA, которую я хочу преобразовать в CMSampleBufferRef
со следующим кодом:
- (CMSampleBufferRef) convertGBRAToCMSampleBuffer:(cv::Mat) bgraImage
{
CVPixelBufferRef pixelBuffer;
CMSampleBufferRef sampleBuffer;
CMSampleTimingInfo timingInfo = { CMTimeMake(1, 60), kCMTimeZero, kCMTimeInvalid };
CMVideoFormatDescriptionRef videoFormatDescription;
size_t width = bgraImage.cols;
size_t height = bgraImage.rows;
size_t bytesPerRow = width*bgraImage.elemSize();
CVPixelBufferCreateWithBytes(
kCFAllocatorDefault,
width,
height,
kCVPixelFormatType_32BGRA,
bgraImage.data,
bytesPerRow,
nil,
nil,
nil,
&pixelBuffer);
CMVideoFormatDescriptionCreateForImageBuffer(
kCFAllocatorDefault,
pixelBuffer,
&videoFormatDescription);
CMSampleBufferCreateForImageBuffer(
kCFAllocatorDefault,
pixelBuffer,
YES,
nil,
nil,
videoFormatDescription,
&timingInfo,
&sampleBuffer);
return sampleBuffer;
}
Проверка pixelBuffer
в отладчике правильно отображает изображение, однако, когда я ставлю sampleBuffer
в AVSampleBufferDisplayLayer
, я по какой-то причине всегда получаю белый экран.Я не слишком уверен в том, как я реализую CMSampleTimingInfo
, но, оглядываясь по сторонам, мне кажется, это то, что мне нужно.
Любой совет специалиста о том, почему я всегда получаю белый экран, будетвысоко ценится.
Спасибо