Поверните CMSampleBuffer/cvpixelbufferIOS

Программируем под IOS
Ответить Пред. темаСлед. тема
Anonymous
 Поверните CMSampleBuffer/cvpixelbuffer

Сообщение Anonymous »

В настоящее время я пытаюсь изменить ориентацию CMSampleBuffer, сначала преобразовав его в CVPixelBuffer, а затем с использованием Vimagerotate90_argb8888 для преобразования буфера. Проблема с моим кодом заключается в том, что когда Vimagerotate90_argb8888 выполняется, сразу же сбой. Я знаю, что есть ответы (например, один или этот), но все эти решения не могут работать в моем случае, и я действительно не могу найти никаких ошибок или думать обо всем, что вызовет такое поведение. Мой текущий код ниже: < /p>

- (CVPixelBufferRef)rotateBuffer:(CMSampleBufferRef)sampleBuffer {
CVPixelBufferRef pixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer);
CVPixelBufferLockBaseAddress(pixelBuffer, 0);

size_t bytesPerRow = CVPixelBufferGetBytesPerRow(pixelBuffer);
size_t width = CVPixelBufferGetWidth(pixelBuffer);
size_t height = CVPixelBufferGetHeight(pixelBuffer);
size_t currSize = bytesPerRow * height * sizeof(unsigned char);
size_t bytesPerRowOut = 4 * height * sizeof(unsigned char);

OSType pixelFormat = CVPixelBufferGetPixelFormatType(pixelBuffer);

void *baseAddress = CVPixelBufferGetBaseAddress(pixelBuffer);
unsigned char *outPixelData = (unsigned char *)malloc(currSize);

vImage_Buffer sourceBuffer = {baseAddress, height, width, bytesPerRow};
vImage_Buffer destinationBuffer = {outPixelData, width, height, bytesPerRowOut};

uint8_t rotation = kRotate90DegreesClockwise;

Pixel_8888 bgColor = {0, 0, 0, 0};
vImageRotate90_ARGB8888(&sourceBuffer, &destinationBuffer, rotation, bgColor, kvImageNoFlags); // Crash!

CVPixelBufferRef rotatedBuffer = NULL;
CVPixelBufferCreateWithBytes(kCFAllocatorDefault, destinationBuffer.width, destinationBuffer.height, pixelFormat, destinationBuffer.data, destinationBuffer.rowBytes, freePixelBufferData, NULL, NULL, &rotatedBuffer);

CVPixelBufferUnlockBaseAddress(pixelBuffer, 0);

return rotatedBuffer;
}

void freePixelBufferData(void *releaseRefCon, const void *baseAddress) {
free((void *)baseAddress);
}


Подробнее здесь: https://stackoverflow.com/questions/493 ... ixelbuffer
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «IOS»