diff options
Diffstat (limited to 'src/plugins/multimedia/ffmpeg/qffmpegvideobuffer.cpp')
-rw-r--r-- | src/plugins/multimedia/ffmpeg/qffmpegvideobuffer.cpp | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/src/plugins/multimedia/ffmpeg/qffmpegvideobuffer.cpp b/src/plugins/multimedia/ffmpeg/qffmpegvideobuffer.cpp index b7fca2c53..98c074312 100644 --- a/src/plugins/multimedia/ffmpeg/qffmpegvideobuffer.cpp +++ b/src/plugins/multimedia/ffmpeg/qffmpegvideobuffer.cpp @@ -5,6 +5,7 @@ #include "private/qvideotexturehelper_p.h" #include "private/qmultimediautils_p.h" #include "qffmpeghwaccel_p.h" +#include "qloggingcategory.h" extern "C" { #include <libavutil/pixdesc.h> @@ -12,6 +13,8 @@ extern "C" { #include <libavutil/mastering_display_metadata.h> } +QT_BEGIN_NAMESPACE + static bool isFrameFlipped(const AVFrame& frame) { for (int i = 0; i < AV_NUM_DATA_POINTERS && frame.data[i]; ++i) { if (frame.linesize[i] < 0) @@ -21,7 +24,7 @@ static bool isFrameFlipped(const AVFrame& frame) { return false; } -QT_BEGIN_NAMESPACE +static Q_LOGGING_CATEGORY(qLcFFmpegVideoBuffer, "qt.multimedia.ffmpeg.videobuffer"); QFFmpegVideoBuffer::QFFmpegVideoBuffer(AVFrameUPtr frame, AVRational pixelAspectRatio) : QAbstractVideoBuffer(QVideoFrame::NoHandle), @@ -196,6 +199,19 @@ QAbstractVideoBuffer::MapData QFFmpegVideoBuffer::map(QVideoFrame::MapMode mode) mapData.bytesPerLine[i] = m_swFrame->linesize[i]; mapData.size[i] = mapData.bytesPerLine[i]*desc->heightForPlane(m_swFrame->height, i); } + + if ((mode & QVideoFrame::WriteOnly) != 0 && m_hwFrame) { + m_type = QVideoFrame::NoHandle; + m_hwFrame.reset(); + if (m_textures) { + qCDebug(qLcFFmpegVideoBuffer) + << "Mapping of FFmpeg video buffer with write mode when " + "textures have been created. Visual artifacts might " + "happen if the frame is still in the rendering pipeline"; + m_textures.reset(); + } + } + return mapData; } |