From 657c47c51d315b8523519b4bc7d7eae189e33ad2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adrien=20B=C3=A9raud?= <adrien.beraud@savoirfairelinux.com> Date: Fri, 6 May 2022 12:26:21 -0400 Subject: [PATCH] video API: return bool from registerSinkTarget This allows clients to know if sink registration succeeded. Change-Id: Ic22d4a50b9cf3c071562c6425724008a54e5f3a6 --- bin/jni/videomanager.i | 15 ++++++++------- src/client/videomanager.cpp | 8 +++++--- src/jami/videomanager_interface.h | 2 +- 3 files changed, 14 insertions(+), 11 deletions(-) diff --git a/bin/jni/videomanager.i b/bin/jni/videomanager.i index 414da8da48..6fdb6584d8 100644 --- a/bin/jni/videomanager.i +++ b/bin/jni/videomanager.i @@ -349,19 +349,20 @@ DRing::FrameBuffer sinkTargetPullCallback(ANativeWindow *window) } } } catch (...) { + __android_log_print(ANDROID_LOG_WARN, TAG, "Exception in pull callback"); } return {}; } -JNIEXPORT void JNICALL Java_net_jami_daemon_JamiServiceJNI_registerVideoCallback(JNIEnv *jenv, jclass jcls, jstring sinkId, jlong window) +JNIEXPORT jboolean JNICALL Java_net_jami_daemon_JamiServiceJNI_registerVideoCallback(JNIEnv *jenv, jclass jcls, jstring sinkId, jlong window) { if(!sinkId) { SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "null string"); - return; + return JNI_FALSE; } const char *arg1_pstr = (const char *)jenv->GetStringUTFChars(sinkId, 0); if (!arg1_pstr) - return; + return JNI_FALSE; std::string sink(arg1_pstr); jenv->ReleaseStringUTFChars(sinkId, arg1_pstr); @@ -371,9 +372,9 @@ JNIEXPORT void JNICALL Java_net_jami_daemon_JamiServiceJNI_registerVideoCallback { std::lock_guard<std::mutex> guard(windows_mutex); - windows.emplace(nativeWindow, av_frame_alloc()); + windows.emplace(nativeWindow, DRing::FrameBuffer{av_frame_alloc()}); } - DRing::registerSinkTarget(sink, DRing::SinkTarget {.pull=p_display_cb, .push=f_display_cb}); + return DRing::registerSinkTarget(sink, DRing::SinkTarget {.pull=p_display_cb, .push=f_display_cb}) ? JNI_TRUE : JNI_FALSE; } JNIEXPORT void JNICALL Java_net_jami_daemon_JamiServiceJNI_unregisterVideoCallback(JNIEnv *jenv, jclass jcls, jstring sinkId, jlong window) @@ -400,7 +401,7 @@ JNIEXPORT void JNICALL Java_net_jami_daemon_JamiServiceJNI_unregisterVideoCallba %native(acquireNativeWindow) jlong acquireNativeWindow(jobject); %native(releaseNativeWindow) void releaseNativeWindow(jlong); %native(setNativeWindowGeometry) void setNativeWindowGeometry(jlong, int, int); -%native(registerVideoCallback) void registerVideoCallback(jstring, jlong); +%native(registerVideoCallback) jboolean registerVideoCallback(jstring, jlong); %native(unregisterVideoCallback) void unregisterVideoCallback(jstring, jlong); %native(captureVideoFrame) void captureVideoFrame(jstring, jobject, jint); @@ -419,7 +420,7 @@ void applySettings(const std::string& name, const std::map<std::string, std::str void addVideoDevice(const std::string &node); void removeVideoDevice(const std::string &node); void setDeviceOrientation(const std::string& name, int angle); -void registerSinkTarget(const std::string& sinkId, const DRing::SinkTarget& target); +bool registerSinkTarget(const std::string& sinkId, const DRing::SinkTarget& target); std::string startLocalMediaRecorder(const std::string& videoInputId, const std::string& filepath); void stopLocalRecorder(const std::string& filepath); bool getDecodingAccelerated(); diff --git a/src/client/videomanager.cpp b/src/client/videomanager.cpp index b486d13871..8cb564139b 100644 --- a/src/client/videomanager.cpp +++ b/src/client/videomanager.cpp @@ -522,15 +522,17 @@ stopLocalRecorder(const std::string& filepath) jami::LocalRecorderManager::instance().removeRecorderByPath(filepath); } -void +bool registerSinkTarget(const std::string& sinkId, SinkTarget target) { #ifdef ENABLE_VIDEO - if (auto sink = jami::Manager::instance().getSinkClient(sinkId)) + if (auto sink = jami::Manager::instance().getSinkClient(sinkId)) { sink->registerTarget(std::move(target)); - else + return true; + } else JAMI_WARN("No sink found for id '%s'", sinkId.c_str()); #endif + return false; } #if HAVE_SHM diff --git a/src/jami/videomanager_interface.h b/src/jami/videomanager_interface.h index 372dfc031d..955d290d51 100644 --- a/src/jami/videomanager_interface.h +++ b/src/jami/videomanager_interface.h @@ -194,7 +194,7 @@ DRING_PUBLIC bool mutePlayerAudio(const std::string& id, bool mute); DRING_PUBLIC bool playerSeekToTime(const std::string& id, int time); int64_t getPlayerPosition(const std::string& id); -DRING_PUBLIC void registerSinkTarget(const std::string& sinkId, SinkTarget target); +DRING_PUBLIC bool registerSinkTarget(const std::string& sinkId, SinkTarget target); #if HAVE_SHM DRING_PUBLIC void startShmSink(const std::string& sinkId, bool value); #endif -- GitLab