diff --git a/bin/jni/videomanager.i b/bin/jni/videomanager.i
index 414da8da48d140cad8f9aee185fc0c38514db6ef..6fdb6584d8d5f6e326807478abf688b6719426b7 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 b486d138710e2dd473bd88184a56885c59f774f0..8cb564139b718235bbb4cb62e4a80821c99e2a67 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 372dfc031d7a1cc9eb8a7088eb2587bb72534d4b..955d290d5149c3f60c800f119dba4af3853e8680 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