summaryrefslogtreecommitdiffstats
path: root/src/plugins/multimedia/ffmpeg/qavfsamplebufferdelegate.mm
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/multimedia/ffmpeg/qavfsamplebufferdelegate.mm')
-rw-r--r--src/plugins/multimedia/ffmpeg/qavfsamplebufferdelegate.mm44
1 files changed, 23 insertions, 21 deletions
diff --git a/src/plugins/multimedia/ffmpeg/qavfsamplebufferdelegate.mm b/src/plugins/multimedia/ffmpeg/qavfsamplebufferdelegate.mm
index 54dc3e578..ecdce8266 100644
--- a/src/plugins/multimedia/ffmpeg/qavfsamplebufferdelegate.mm
+++ b/src/plugins/multimedia/ffmpeg/qavfsamplebufferdelegate.mm
@@ -8,6 +8,7 @@
#include "qffmpeghwaccel_p.h"
#include "qavfhelpers_p.h"
#include "qffmpegvideobuffer_p.h"
+#include "private/qvideoframe_p.h"
#undef AVMediaType
@@ -25,64 +26,63 @@ namespace {
class CVImageVideoBuffer : public QAbstractVideoBuffer
{
public:
- CVImageVideoBuffer(CVImageBufferRef imageBuffer)
- : QAbstractVideoBuffer(QVideoFrame::NoHandle), m_buffer(imageBuffer)
+ CVImageVideoBuffer(CVImageBufferRef imageBuffer) : m_buffer(imageBuffer)
{
CVPixelBufferRetain(imageBuffer);
}
~CVImageVideoBuffer()
{
- CVImageVideoBuffer::unmap();
+ Q_ASSERT(m_mode == QtVideo::MapMode::NotMapped);
CVPixelBufferRelease(m_buffer);
}
- CVImageVideoBuffer::MapData map(QVideoFrame::MapMode mode) override
+ CVImageVideoBuffer::MapData map(QtVideo::MapMode mode) override
{
MapData mapData;
- if (m_mode == QVideoFrame::NotMapped) {
+ if (m_mode == QtVideo::MapMode::NotMapped) {
CVPixelBufferLockBaseAddress(
- m_buffer, mode == QVideoFrame::ReadOnly ? kCVPixelBufferLock_ReadOnly : 0);
+ m_buffer, mode == QtVideo::MapMode::ReadOnly ? kCVPixelBufferLock_ReadOnly : 0);
m_mode = mode;
}
- mapData.nPlanes = CVPixelBufferGetPlaneCount(m_buffer);
- Q_ASSERT(mapData.nPlanes <= 3);
+ mapData.planeCount = CVPixelBufferGetPlaneCount(m_buffer);
+ Q_ASSERT(mapData.planeCount <= 3);
- if (!mapData.nPlanes) {
+ if (!mapData.planeCount) {
// single plane
mapData.bytesPerLine[0] = CVPixelBufferGetBytesPerRow(m_buffer);
mapData.data[0] = static_cast<uchar *>(CVPixelBufferGetBaseAddress(m_buffer));
- mapData.size[0] = CVPixelBufferGetDataSize(m_buffer);
- mapData.nPlanes = mapData.data[0] ? 1 : 0;
+ mapData.dataSize[0] = CVPixelBufferGetDataSize(m_buffer);
+ mapData.planeCount = mapData.data[0] ? 1 : 0;
return mapData;
}
// For a bi-planar or tri-planar format we have to set the parameters correctly:
- for (int i = 0; i < mapData.nPlanes; ++i) {
+ for (int i = 0; i < mapData.planeCount; ++i) {
mapData.bytesPerLine[i] = CVPixelBufferGetBytesPerRowOfPlane(m_buffer, i);
- mapData.size[i] = mapData.bytesPerLine[i] * CVPixelBufferGetHeightOfPlane(m_buffer, i);
+ mapData.dataSize[i] = mapData.bytesPerLine[i] * CVPixelBufferGetHeightOfPlane(m_buffer, i);
mapData.data[i] = static_cast<uchar *>(CVPixelBufferGetBaseAddressOfPlane(m_buffer, i));
}
return mapData;
}
- QVideoFrame::MapMode mapMode() const override { return m_mode; }
-
void unmap() override
{
- if (m_mode != QVideoFrame::NotMapped) {
+ if (m_mode != QtVideo::MapMode::NotMapped) {
CVPixelBufferUnlockBaseAddress(
- m_buffer, m_mode == QVideoFrame::ReadOnly ? kCVPixelBufferLock_ReadOnly : 0);
- m_mode = QVideoFrame::NotMapped;
+ m_buffer, m_mode == QtVideo::MapMode::ReadOnly ? kCVPixelBufferLock_ReadOnly : 0);
+ m_mode = QtVideo::MapMode::NotMapped;
}
}
+ QVideoFrameFormat format() const override { return {}; }
+
private:
CVImageBufferRef m_buffer;
- QVideoFrame::MapMode m_mode = QVideoFrame::NotMapped;
+ QtVideo::MapMode m_mode = QtVideo::MapMode::NotMapped;
};
}
@@ -147,7 +147,8 @@ static QVideoFrame createHwVideoFrame(QAVFSampleBufferDelegate &delegate,
avFrame->pts = delegate.startTime - *delegate.baseTime;
- return QVideoFrame(new QFFmpegVideoBuffer(std::move(avFrame)), format);
+ return QVideoFramePrivate::createFrame(std::make_unique<QFFmpegVideoBuffer>(std::move(avFrame)),
+ format);
}
- (instancetype)initWithFrameHandler:(std::function<void(const QVideoFrame &)>)handler
@@ -200,7 +201,8 @@ static QVideoFrame createHwVideoFrame(QAVFSampleBufferDelegate &delegate,
auto frame = createHwVideoFrame(*self, imageBuffer, format);
if (!frame.isValid())
- frame = QVideoFrame(new CVImageVideoBuffer(imageBuffer), format);
+ frame = QVideoFramePrivate::createFrame(std::make_unique<CVImageVideoBuffer>(imageBuffer),
+ std::move(format));
frame.setStartTime(startTime - *baseTime);
frame.setEndTime(frameTime - *baseTime);