4#ifndef QANDROIDVIDEOFRAMEBUFFER_P_H
5#define QANDROIDVIDEOFRAMEBUFFER_P_H
18#include <QAbstractVideoBuffer>
20#include <QVideoFrameFormat>
22#include <QtCore/qjnitypes.h>
25Q_DECLARE_JNI_CLASS(QtVideoDeviceManager,
26 "org/qtproject/qt/android/multimedia/QtVideoDeviceManager")
28Q_DECLARE_JNI_CLASS(Image,
"android/media/Image")
29Q_DECLARE_JNI_CLASS(ImageFormat,
"android/graphics/ImageFormat")
30Q_DECLARE_JNI_CLASS(ImagePlane,
"android/media/Image$Plane")
31Q_DECLARE_JNI_CLASS(ByteBuffer,
"java/nio/ByteBuffer")
33class QAndroidVideoFrameBuffer :
public QAbstractVideoBuffer
36 class FrameReleaseDelegate {
38 virtual ~FrameReleaseDelegate() =
default;
39 virtual void onFrameReleased() = 0;
41 enum class MemoryPolicy {
47 QAndroidVideoFrameBuffer(QJniObject frame,
48 std::shared_ptr<FrameReleaseDelegate> frameReleaseDelegate,
50 QtVideo::Rotation rotation = QtVideo::Rotation::None);
51 ~QAndroidVideoFrameBuffer();
52 MapData map(QVideoFrame::MapMode) override {
return m_mapData; }
53 QVideoFrameFormat format()
const override {
return m_videoFrameFormat; }
54 long timestamp()
const {
return m_timestamp; }
55 bool isParsed()
const {
return m_parsed; }
58 bool useCopiedData()
const;
59 bool parse(
const QJniObject &frame);
60 QVideoFrameFormat m_videoFrameFormat;
65 static constexpr int MAX_PLANES = 3;
66 QByteArray dataCleaner[MAX_PLANES];
67 jobject m_nativeFrame =
nullptr;
68 std::shared_ptr<FrameReleaseDelegate> m_frameReleaseDelegate;
69 MemoryPolicy m_policy;
70 bool m_parsed =
false;
73 enum AndroidImageFormat {
Q_DECLARE_JNI_CLASS(MotionEvent, "android/view/MotionEvent")