6#define AVMediaType XAVMediaType
11#include "private/qvideoframe_p.h"
21 CVPixelBufferRelease(CVPixelBufferRef(
data));
29 CVImageVideoBuffer(CVImageBufferRef imageBuffer) : m_buffer(imageBuffer)
31 CVPixelBufferRetain(imageBuffer);
37 CVPixelBufferRelease(m_buffer);
45 CVPixelBufferLockBaseAddress(
50 mapData.planeCount = CVPixelBufferGetPlaneCount(m_buffer);
55 mapData.bytesPerLine[0] = CVPixelBufferGetBytesPerRow(m_buffer);
56 mapData.data[0] =
static_cast<uchar *
>(CVPixelBufferGetBaseAddress(m_buffer));
57 mapData.dataSize[0] = CVPixelBufferGetDataSize(m_buffer);
64 mapData.bytesPerLine[
i] = CVPixelBufferGetBytesPerRowOfPlane(m_buffer,
i);
65 mapData.dataSize[
i] =
mapData.bytesPerLine[
i] * CVPixelBufferGetHeightOfPlane(m_buffer,
i);
66 mapData.data[
i] =
static_cast<uchar *
>(CVPixelBufferGetBaseAddressOfPlane(m_buffer,
i));
75 CVPixelBufferUnlockBaseAddress(
84 CVImageBufferRef m_buffer;
93 AVHWFramesContext *
ctx = (AVHWFramesContext *)hwContext->data;
95 frame->hw_frames_ctx = av_buffer_ref(hwContext);
99 frame->data[3] = (uint8_t *)pixbuf;
100 CVPixelBufferRetain(pixbuf);
103 frame->format = AV_PIX_FMT_VIDEOTOOLBOX;
104 if (
frame->
width != (
int)CVPixelBufferGetWidth(pixbuf)
105 ||
frame->
height != (
int)CVPixelBufferGetHeight(pixbuf)) {
128 if (!delegate.m_accel)
131 auto avFrame =
allocHWFrame(delegate.m_accel->hwFramesContextAsBuffer(), imageBuffer);
139 const int ret = av_hwframe_transfer_data(swFrame.get(), avFrame.get(), 0);
141 qWarning() <<
"Error transferring the data to system memory:" <<
ret;
143 avFrame = std::move(swFrame);
148 avFrame->pts = delegate.startTime - *delegate.baseTime;
154- (instancetype)initWithFrameHandler:(
std::function<
void(const
QVideoFrame &)>)handler
156 if (!(self = [super
init]))
161 frameHandler = std::move(handler);
168- (
void)captureOutput:(AVCaptureOutput *)captureOutput
169 didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer
170 fromConnection:(AVCaptureConnection *)connection
178 CVImageBufferRef imageBuffer = CMSampleBufferGetImageBuffer(sampleBuffer);
181 qWarning() <<
"Cannot get image buffer from sample buffer";
185 const CMTime
time = CMSampleBufferGetPresentationTimeStamp(sampleBuffer);
194 qWarning() <<
"Cannot get get video format for image buffer"
195 << CVPixelBufferGetWidth(imageBuffer) <<
'x'
196 << CVPixelBufferGetHeight(imageBuffer);
202 auto frame = createHwVideoFrame(*self, imageBuffer,
format);
203 if (!
frame.isValid())
219- (
void)setVideoFormatFrameRate:(
qreal)rate
The QAbstractVideoBuffer class is an abstraction for video data. \inmodule QtMultimedia.
static QVideoFrame createFrame(std::unique_ptr< Buffer > buffer, QVideoFrameFormat format)
The QVideoFrame class represents a frame of video data.
QMap< QString, QString > map
[6]
QVideoFrameFormat videoFormatForImageBuffer(CVImageBufferRef buffer, bool openGL=false)
AVFrameUPtr makeAVFrame()
std::unique_ptr< AVFrame, AVDeleter< decltype(&av_frame_free), &av_frame_free > > AVFrameUPtr
MapMode
Enumerates how a video buffer's data is mapped to system memory.
static QFFmpeg::AVFrameUPtr allocHWFrame(AVBufferRef *hwContext, const CVPixelBufferRef &pixbuf)
static QT_USE_NAMESPACE void releaseHwFrame(void *, uint8_t *data)
AVBufferRef * hwFramesContext
std::unique_ptr< QFFmpeg::HWAccel > m_accel
std::optional< qint64 > baseTime
DBusConnection const char DBusError DBusBusType DBusError return DBusConnection DBusHandleMessageFunction void DBusFreeFunction return DBusConnection return DBusConnection return const char DBusError return DBusConnection DBusMessage dbus_uint32_t return DBusConnection dbus_bool_t DBusConnection DBusAddWatchFunction DBusRemoveWatchFunction DBusWatchToggledFunction void DBusFreeFunction return DBusConnection DBusDispatchStatusFunction void DBusFreeFunction DBusTimeout return DBusTimeout return DBusWatch return DBusWatch unsigned int return DBusError const DBusError return const DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessageIter int const void return DBusMessageIter DBusMessageIter return DBusMessageIter void DBusMessageIter void int return DBusMessage DBusMessageIter return DBusMessageIter return DBusMessageIter DBusMessageIter const char const char const char const char return DBusMessage return DBusMessage const char return DBusMessage dbus_bool_t return DBusMessage dbus_uint32_t return DBusMessage void
DBusConnection * connection
GLint GLsizei GLsizei GLenum GLenum GLsizei void * data
GLint GLsizei GLsizei GLenum format
static QAbstractVideoBuffer::MapData mapData(const camera_frame_nv12_t &frame, unsigned char *baseAddress)
static QT_BEGIN_NAMESPACE void init(QTextBoundaryFinder::BoundaryType type, QStringView str, QCharAttributes *attributes)