Заполнение в AVCaptureVideoData с помощью kCVPixelFormatType_32BGRA - PullRequest
0 голосов
/ 19 мая 2011

Я пытаюсь отправить изображение через tcp на сервер, сначала получает буфер с камеры и затем конвертирует его в grayScale буфер, наконец, я отправляю буфер на сервер. Все работает нормально, но проблема в том, что изображение, полученное сервером, не на 100% нормально, похоже, что есть некоторые отступы, которые я не буду использовать при конвертации, все изображения больше или меньше, чем на следующем , Я использую следующий код, чтобы получить изображение: VImageBufferRef imageBuffer = CMSampleBufferGetImageBuffer (sampleBuffer);

uint8_t * baseAddress = (uint8_t *) CVPixelBufferGetBaseAddress (imageBuffer);

изображение здесь http://s3.subirimagenes.com:81/imagen/previo/thump_6421684image001.png

1 Ответ

1 голос
/ 19 мая 2011

Единственное заполнение, которое вы можете получить, это на ряд пикселей - вы должны использовать что-то вроде:

/* ... */
uint8_t *baseAddress = (uint8_t *)CVPixelBufferGetBaseAddress(imageBuffer);
size_t bytesPerRow = CVPixelBufferGetBytesPerRow(imageBuffer);

for(interesting values of y)
{
    uint8_t *pointerToThisLine = baseAddress + bytesPerRow*y;
}

Вместо того, чтобы предполагать, так или иначе, что одна строка развертки заканчивается где-то в памяти, а затем следующаясразу начинается.

Тем не менее, верхняя часть вашего изображения явно правильная, и мне еще предстоит увидеть случай, когда высота тона не была равна ширине * bytesPerPixel, так что это вряд ли будет вызыватьваша проблема на практике, даже если вы не сделали это правильно.

Осматривая ваше изображение, кажется, что разбитая область содержит копии различных фрагментов рабочей области, поэтому я не думаю, что проблема заключается в заполнениисвязанный - это своего рода более тупое управление памятью или ошибка передачи.Вы проверяли эту сторону вещей?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...