19QAbstractVideoBuffer::MapData QFFmpeg::CVImageVideoBuffer::map(QVideoFrame::MapMode mode)
25 if (m_mode == QVideoFrame::NotMapped) {
26 CVPixelBufferLockBaseAddress(
28 mode == QVideoFrame::ReadOnly ? kCVPixelBufferLock_ReadOnly : 0);
32 mapData.planeCount = CVPixelBufferGetPlaneCount(m_buffer.get());
33 Q_ASSERT(mapData.planeCount <= 3);
35 if (!mapData.planeCount) {
37 mapData.bytesPerLine[0] = CVPixelBufferGetBytesPerRow(m_buffer.get());
38 mapData.data[0] =
static_cast<uchar *>(CVPixelBufferGetBaseAddress(m_buffer.get()));
39 mapData.dataSize[0] = CVPixelBufferGetDataSize(m_buffer.get());
40 mapData.planeCount = mapData.data[0] ? 1 : 0;
45 for (
int i = 0; i < mapData.planeCount; ++i) {
46 mapData.bytesPerLine[i] = CVPixelBufferGetBytesPerRowOfPlane(m_buffer.get(), i);
48 mapData.bytesPerLine[i] * CVPixelBufferGetHeightOfPlane(m_buffer.get(), i);
50 static_cast<uchar *>(CVPixelBufferGetBaseAddressOfPlane(m_buffer.get(), i));
56void QFFmpeg::CVImageVideoBuffer::unmap()
59 if (m_mode != QVideoFrame::NotMapped) {
60 CVPixelBufferUnlockBaseAddress(
62 m_mode == QVideoFrame::ReadOnly ? kCVPixelBufferLock_ReadOnly : 0);
63 m_mode = QVideoFrame::NotMapped;