From dc714637d95c775b1b35f1b4e12ccef140dc60a1 Mon Sep 17 00:00:00 2001 From: Bartlomiej Moskal Date: Thu, 19 Jan 2023 13:20:35 +0100 Subject: Android: don't change Camera State for each frame onCaptureStarted, onCaptureCompleted and onCaptureFailed methods are called for each frame. Camera state (camera activity relies on it) should not be updated with such frequency. Remove onCaptureSessionCompleted and onCaptureSessionStarted handling, as the only purpose of them were to set a camera state. Remove camera status change for onCaptureFailed, as other requests are unaffected with this failure Instead of CaptureCallback start to use StateCallback for Camera state updates (onActive and onClosed methods) Fixes: QTBUG-110317 Change-Id: I9af1399033e24dbbf395f55ae23e1696aa4d42ce Reviewed-by: Samuel Mira Reviewed-by: Assam Boudjelthia --- src/plugins/multimedia/ffmpeg/qandroidcamera.cpp | 35 ++++++++++-------------- src/plugins/multimedia/ffmpeg/qandroidcamera_p.h | 4 +-- 2 files changed, 16 insertions(+), 23 deletions(-) (limited to 'src/plugins') diff --git a/src/plugins/multimedia/ffmpeg/qandroidcamera.cpp b/src/plugins/multimedia/ffmpeg/qandroidcamera.cpp index d6f8bc84b..e66c685f4 100644 --- a/src/plugins/multimedia/ffmpeg/qandroidcamera.cpp +++ b/src/plugins/multimedia/ffmpeg/qandroidcamera.cpp @@ -352,21 +352,15 @@ void QAndroidCamera::onCameraError(int reason) QString("Capture error with Camera %1. Camera2 Api error code: %2") .arg(m_cameraDevice.description()) .arg(reason)); - setState(State::Closed); } -void QAndroidCamera::onCaptureSessionStarted(long timestamp, long frameNumber) +void QAndroidCamera::onSessionActive() { - Q_UNUSED(timestamp); - Q_UNUSED(frameNumber); - setState(State::Started); } -void QAndroidCamera::onCaptureSessionCompleted(long frameNumber) +void QAndroidCamera::onSessionClosed() { - Q_UNUSED(frameNumber); - setState(State::Closed); } @@ -453,37 +447,36 @@ static void onCaptureSessionConfigureFailed(JNIEnv *env, jobject obj, jstring ca } Q_DECLARE_JNI_NATIVE_METHOD(onCaptureSessionConfigureFailed) -static void onCaptureSessionStarted(JNIEnv *env, jobject obj, jstring cameraId, jlong timestamp, - jlong framenumber) +static void onSessionActive(JNIEnv *env, jobject obj, jstring cameraId) { Q_UNUSED(env); Q_UNUSED(obj); GET_CAMERA(cameraId); - camera->onCaptureSessionStarted(timestamp, framenumber); + camera->onSessionActive(); } -Q_DECLARE_JNI_NATIVE_METHOD(onCaptureSessionStarted) +Q_DECLARE_JNI_NATIVE_METHOD(onSessionActive) -static void onCaptureSessionFailed(JNIEnv *env, jobject obj, jstring cameraId, jint reason, - jlong framenumber) +static void onSessionClosed(JNIEnv *env, jobject obj, jstring cameraId) { Q_UNUSED(env); Q_UNUSED(obj); GET_CAMERA(cameraId); - camera->onCaptureSessionFailed(reason, framenumber); + camera->onSessionClosed(); } -Q_DECLARE_JNI_NATIVE_METHOD(onCaptureSessionFailed) +Q_DECLARE_JNI_NATIVE_METHOD(onSessionClosed) -static void onCaptureSessionCompleted(JNIEnv *env, jobject obj, jstring cameraId, jlong framenumber) +static void onCaptureSessionFailed(JNIEnv *env, jobject obj, jstring cameraId, jint reason, + jlong framenumber) { Q_UNUSED(env); Q_UNUSED(obj); GET_CAMERA(cameraId); - camera->onCaptureSessionCompleted(framenumber); + camera->onCaptureSessionFailed(reason, framenumber); } -Q_DECLARE_JNI_NATIVE_METHOD(onCaptureSessionCompleted) +Q_DECLARE_JNI_NATIVE_METHOD(onCaptureSessionFailed) bool QAndroidCamera::registerNativeMethods() { @@ -496,10 +489,10 @@ bool QAndroidCamera::registerNativeMethods() Q_JNI_NATIVE_METHOD(onCameraError), Q_JNI_NATIVE_METHOD(onCaptureSessionConfigured), Q_JNI_NATIVE_METHOD(onCaptureSessionConfigureFailed), - Q_JNI_NATIVE_METHOD(onCaptureSessionStarted), Q_JNI_NATIVE_METHOD(onCaptureSessionFailed), - Q_JNI_NATIVE_METHOD(onCaptureSessionCompleted), Q_JNI_NATIVE_METHOD(onFrameAvailable), + Q_JNI_NATIVE_METHOD(onSessionActive), + Q_JNI_NATIVE_METHOD(onSessionClosed), }); }(); diff --git a/src/plugins/multimedia/ffmpeg/qandroidcamera_p.h b/src/plugins/multimedia/ffmpeg/qandroidcamera_p.h index 829de14cb..7a2152ebf 100644 --- a/src/plugins/multimedia/ffmpeg/qandroidcamera_p.h +++ b/src/plugins/multimedia/ffmpeg/qandroidcamera_p.h @@ -43,9 +43,9 @@ public slots: void onFrameAvailable(QJniObject frame); void onCaptureSessionConfigured(); void onCaptureSessionConfigureFailed(); - void onCaptureSessionStarted(long timestamp, long frameNumber); - void onCaptureSessionCompleted(long frameNumber); void onCaptureSessionFailed(int reason, long frameNumber); + void onSessionActive(); + void onSessionClosed(); private: void setState(State newState); -- cgit v1.2.3