diff options
-rw-r--r-- | src/plugins/android/src/mediacapture/qandroidcamerasession.cpp | 49 | ||||
-rw-r--r-- | src/plugins/android/src/mediacapture/qandroidcamerasession.h | 1 |
2 files changed, 40 insertions, 10 deletions
diff --git a/src/plugins/android/src/mediacapture/qandroidcamerasession.cpp b/src/plugins/android/src/mediacapture/qandroidcamerasession.cpp index 075fe78e5..3a50139c3 100644 --- a/src/plugins/android/src/mediacapture/qandroidcamerasession.cpp +++ b/src/plugins/android/src/mediacapture/qandroidcamerasession.cpp @@ -52,6 +52,41 @@ QT_BEGIN_NAMESPACE +class DataVideoBuffer : public QAbstractVideoBuffer +{ +public: + DataVideoBuffer(const QByteArray &d) + : QAbstractVideoBuffer(NoHandle) + , data(d) + , mode(NotMapped) + { } + + MapMode mapMode() const { return mode; } + + uchar *map(MapMode m, int *numBytes, int *bytesPerLine) + { + if (mode != NotMapped || m == NotMapped) + return 0; + + mode = m; + + if (numBytes) + *numBytes = data.size(); + + if (bytesPerLine) + *bytesPerLine = -1; + + return reinterpret_cast<uchar *>(data.data()); + } + + void unmap() { mode = NotMapped; } + +private: + QByteArray data; + MapMode mode; +}; + + QAndroidCameraSession::QAndroidCameraSession(QObject *parent) : QObject(parent) , m_selectedCamera(0) @@ -463,6 +498,7 @@ void QAndroidCameraSession::onCameraPictureCaptured(const QByteArray &data) QtConcurrent::run(this, &QAndroidCameraSession::processCapturedImage, m_currentImageCaptureId, data, + m_imageSettings.resolution(), m_captureDestination, m_currentImageCaptureFileName); } @@ -477,6 +513,7 @@ void QAndroidCameraSession::onCameraPictureCaptured(const QByteArray &data) void QAndroidCameraSession::processCapturedImage(int id, const QByteArray &data, + const QSize &resolution, QCameraImageCapture::CaptureDestinations dest, const QString &fileName) { @@ -509,16 +546,8 @@ void QAndroidCameraSession::processCapturedImage(int id, } if (dest & QCameraImageCapture::CaptureToBuffer) { - QImage image; - const bool ok = image.loadFromData(data, "JPG"); - - if (ok) { - QVideoFrame frame(image); - emit imageAvailable(id, frame); - } else { - emit imageCaptureError(id, QCameraImageCapture::FormatError, - tr("Could not load JPEG data from captured image")); - } + QVideoFrame frame(new DataVideoBuffer(data), resolution, QVideoFrame::Format_Jpeg); + emit imageAvailable(id, frame); } } diff --git a/src/plugins/android/src/mediacapture/qandroidcamerasession.h b/src/plugins/android/src/mediacapture/qandroidcamerasession.h index de891522b..897cf52d1 100644 --- a/src/plugins/android/src/mediacapture/qandroidcamerasession.h +++ b/src/plugins/android/src/mediacapture/qandroidcamerasession.h @@ -127,6 +127,7 @@ private: void processPreviewImage(int id, const QByteArray &data); void processCapturedImage(int id, const QByteArray &data, + const QSize &resolution, QCameraImageCapture::CaptureDestinations dest, const QString &fileName); |