【问题标题】:Padding at the AVCaptureVideoData with kCVPixelFormatType_32BGRA使用 kCVPixelFormatType_32BGRA 填充 AVCaptureVideoData
【发布时间】:2011-08-28 18:42:09
【问题描述】:

我正在尝试通过 tcp 将图像发送到服务器,首先从相机获取缓冲区,然后将缓冲区转换为灰度,最后将缓冲区发送到服务器。 一切正常,但问题是服务器接收到的图像不是 100% 好的,看起来有一些我在转换时不使用的填充,所有图像都或多或少比下一个. 我使用下一个代码来获取图像: VImageBufferRef imageBuffer = CMSampleBufferGetImageBuffer(sampleBuffer);

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

图片在这里http://s3.subirimagenes.com:81/imagen/previo/thump_6421684image001.png

【问题讨论】:

    标签: objective-c tcp camera avfoundation padding


    【解决方案1】:

    你可能得到的唯一填充是每行像素——你应该使用类似的东西:

    /* ... */
    uint8_t *baseAddress = (uint8_t *)CVPixelBufferGetBaseAddress(imageBuffer);
    size_t bytesPerRow = CVPixelBufferGetBytesPerRow(imageBuffer);
    
    for(interesting values of y)
    {
        uint8_t *pointerToThisLine = baseAddress + bytesPerRow*y;
    }
    

    而不是假设,以某种方式或另一种方式,一条扫描线在内存中的某处结束,然后下一条立即开始。

    也就是说,您图像的顶部显然是正确的,我还没有看到间距不等于 width*bytesPerPixel 的实例,因此即使在实践中也不太可能导致您的问题你没有正确地做到这一点。

    检查您的图像,看起来损坏的区域包含工作区域的各种片段的副本,所以我认为问题与填充无关 - 这是某种更迟钝的内存管理或传输错误。你检查过这方面的事情吗?

    【讨论】:

    • 非常感谢您的回答,已解决,是传输,我一次又一次地发送相同的位而没有增加缓冲区的指针。
    • 哦,很高兴我能帮上忙——不管多么间接。
    猜你喜欢
    • 1970-01-01
    • 2015-08-07
    • 2021-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-24
    相关资源
    最近更新 更多