diff options
author | Artem Dyomin <artem.dyomin@qt.io> | 2024-03-07 11:02:30 +0100 |
---|---|---|
committer | Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> | 2024-03-08 16:36:45 +0000 |
commit | b15096830e1a2d5538f1ac54393bbdc294d7ec84 (patch) | |
tree | 2de5a138139f4697a497e0b2b53d6af8448f1c58 | |
parent | 24693b4ac0dd40de061771af3c230be21fdc65cf (diff) |
Move FFmpeg io device helpers to a separate file
The helpers are to be reused in the media recording, so they should
be in a separate file.
Task-number: QTBUG-121827
Pick-to: 6.5
Change-Id: I3436a1a297f94deeb5a760ef6c10e26e03d03bed
Reviewed-by: Artem Dyomin <artem.dyomin@qt.io>
Reviewed-by: Tim Blechmann <tim@klingt.org>
(cherry picked from commit 6cc59580b31f000e7aa1681c02245d567de3e520)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
(cherry picked from commit 6ca1ebae7555ff5996602725b39c8458d0a1bed4)
4 files changed, 78 insertions, 30 deletions
diff --git a/src/plugins/multimedia/ffmpeg/CMakeLists.txt b/src/plugins/multimedia/ffmpeg/CMakeLists.txt index 3cfb11ff7..0da23e163 100644 --- a/src/plugins/multimedia/ffmpeg/CMakeLists.txt +++ b/src/plugins/multimedia/ffmpeg/CMakeLists.txt @@ -17,6 +17,7 @@ qt_internal_add_plugin(QFFmpegMediaPlugin SOURCES qffmpeg.cpp qffmpeg_p.h qffmpegdefs_p.h + qffmpegioutils.cpp qffmpegioutils_p.h qffmpegavaudioformat.cpp qffmpegavaudioformat_p.h qffmpegaudiodecoder.cpp qffmpegaudiodecoder_p.h qffmpegaudioinput.cpp qffmpegaudioinput_p.h diff --git a/src/plugins/multimedia/ffmpeg/playbackengine/qffmpegmediadataholder.cpp b/src/plugins/multimedia/ffmpeg/playbackengine/qffmpegmediadataholder.cpp index 2871b2448..fbb75dd44 100644 --- a/src/plugins/multimedia/ffmpeg/playbackengine/qffmpegmediadataholder.cpp +++ b/src/plugins/multimedia/ffmpeg/playbackengine/qffmpegmediadataholder.cpp @@ -5,6 +5,7 @@ #include "qffmpegmediametadata_p.h" #include "qffmpegmediaformatinfo_p.h" +#include "qffmpegioutils_p.h" #include "qiodevice.h" #include "qdatetime.h" #include "qloggingcategory.h" @@ -108,36 +109,6 @@ static void insertMediaData(QMediaMetaData &metaData, QPlatformMediaPlayer::Trac } }; -static int readQIODevice(void *opaque, uint8_t *buf, int buf_size) -{ - auto *dev = static_cast<QIODevice *>(opaque); - if (dev->atEnd()) - return AVERROR_EOF; - return dev->read(reinterpret_cast<char *>(buf), buf_size); -} - -static int64_t seekQIODevice(void *opaque, int64_t offset, int whence) -{ - QIODevice *dev = static_cast<QIODevice *>(opaque); - - if (dev->isSequential()) - return AVERROR(EINVAL); - - if (whence & AVSEEK_SIZE) - return dev->size(); - - whence &= ~AVSEEK_FORCE; - - if (whence == SEEK_CUR) - offset += dev->pos(); - else if (whence == SEEK_END) - offset += dev->size(); - - if (!dev->seek(offset)) - return AVERROR(EINVAL); - return offset; -} - QPlatformMediaPlayer::TrackType MediaDataHolder::trackTypeFromMediaType(int mediaType) { switch (mediaType) { diff --git a/src/plugins/multimedia/ffmpeg/qffmpegioutils.cpp b/src/plugins/multimedia/ffmpeg/qffmpegioutils.cpp new file mode 100644 index 000000000..de332e91d --- /dev/null +++ b/src/plugins/multimedia/ffmpeg/qffmpegioutils.cpp @@ -0,0 +1,44 @@ +// Copyright (C) 2024 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only + +#include "qffmpegioutils_p.h" +#include "qiodevice.h" +#include "qffmpegdefs_p.h" + +QT_BEGIN_NAMESPACE + +namespace QFFmpeg { + +int readQIODevice(void *opaque, uint8_t *buf, int buf_size) +{ + auto *dev = static_cast<QIODevice *>(opaque); + if (dev->atEnd()) + return AVERROR_EOF; + return dev->read(reinterpret_cast<char *>(buf), buf_size); +} + +int64_t seekQIODevice(void *opaque, int64_t offset, int whence) +{ + QIODevice *dev = static_cast<QIODevice *>(opaque); + + if (dev->isSequential()) + return AVERROR(EINVAL); + + if (whence & AVSEEK_SIZE) + return dev->size(); + + whence &= ~AVSEEK_FORCE; + + if (whence == SEEK_CUR) + offset += dev->pos(); + else if (whence == SEEK_END) + offset += dev->size(); + + if (!dev->seek(offset)) + return AVERROR(EINVAL); + return offset; +} + +} // namespace QFFmpeg + +QT_END_NAMESPACE diff --git a/src/plugins/multimedia/ffmpeg/qffmpegioutils_p.h b/src/plugins/multimedia/ffmpeg/qffmpegioutils_p.h new file mode 100644 index 000000000..cf3136f39 --- /dev/null +++ b/src/plugins/multimedia/ffmpeg/qffmpegioutils_p.h @@ -0,0 +1,32 @@ +// Copyright (C) 2024 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only + +#ifndef QFFMPEGIOUTILS_P_H +#define QFFMPEGIOUTILS_P_H + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. +// + +#include "qtmultimediaglobal.h" + +QT_BEGIN_NAMESPACE + +namespace QFFmpeg { + +int readQIODevice(void *opaque, uint8_t *buf, int buf_size); + +int64_t seekQIODevice(void *opaque, int64_t offset, int whence); + +} // namespace QFFmpeg + +QT_END_NAMESPACE + +#endif // QFFMPEGIOUTILS_P_H |