Преобразование cv :: Mat (BGRA) в CMSampleBufferRef - PullRequest
0 голосов
/ 03 декабря 2018

Я изо всех сил пытался заставить это работать с 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, но, оглядываясь по сторонам, мне кажется, это то, что мне нужно.

Любой совет специалиста о том, почему я всегда получаю белый экран, будетвысоко ценится.

Спасибо

...