video API: return bool from registerSinkTarget

This allows clients to know if sink registration succeeded.

Change-Id: Ic22d4a50b9cf3c071562c6425724008a54e5f3a6
This commit is contained in:
Adrien Béraud
2022-05-06 12:26:21 -04:00
parent 8750049b0c
commit 657c47c51d
3 changed files with 14 additions and 11 deletions

View File

@ -349,19 +349,20 @@ DRing::FrameBuffer sinkTargetPullCallback(ANativeWindow *window)
} }
} }
} catch (...) { } catch (...) {
__android_log_print(ANDROID_LOG_WARN, TAG, "Exception in pull callback");
} }
return {}; 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) { if(!sinkId) {
SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "null string"); SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "null string");
return; return JNI_FALSE;
} }
const char *arg1_pstr = (const char *)jenv->GetStringUTFChars(sinkId, 0); const char *arg1_pstr = (const char *)jenv->GetStringUTFChars(sinkId, 0);
if (!arg1_pstr) if (!arg1_pstr)
return; return JNI_FALSE;
std::string sink(arg1_pstr); std::string sink(arg1_pstr);
jenv->ReleaseStringUTFChars(sinkId, 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); 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) 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(acquireNativeWindow) jlong acquireNativeWindow(jobject);
%native(releaseNativeWindow) void releaseNativeWindow(jlong); %native(releaseNativeWindow) void releaseNativeWindow(jlong);
%native(setNativeWindowGeometry) void setNativeWindowGeometry(jlong, int, int); %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(unregisterVideoCallback) void unregisterVideoCallback(jstring, jlong);
%native(captureVideoFrame) void captureVideoFrame(jstring, jobject, jint); %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 addVideoDevice(const std::string &node);
void removeVideoDevice(const std::string &node); void removeVideoDevice(const std::string &node);
void setDeviceOrientation(const std::string& name, int angle); 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); std::string startLocalMediaRecorder(const std::string& videoInputId, const std::string& filepath);
void stopLocalRecorder(const std::string& filepath); void stopLocalRecorder(const std::string& filepath);
bool getDecodingAccelerated(); bool getDecodingAccelerated();

View File

@ -522,15 +522,17 @@ stopLocalRecorder(const std::string& filepath)
jami::LocalRecorderManager::instance().removeRecorderByPath(filepath); jami::LocalRecorderManager::instance().removeRecorderByPath(filepath);
} }
void bool
registerSinkTarget(const std::string& sinkId, SinkTarget target) registerSinkTarget(const std::string& sinkId, SinkTarget target)
{ {
#ifdef ENABLE_VIDEO #ifdef ENABLE_VIDEO
if (auto sink = jami::Manager::instance().getSinkClient(sinkId)) if (auto sink = jami::Manager::instance().getSinkClient(sinkId)) {
sink->registerTarget(std::move(target)); sink->registerTarget(std::move(target));
else return true;
} else
JAMI_WARN("No sink found for id '%s'", sinkId.c_str()); JAMI_WARN("No sink found for id '%s'", sinkId.c_str());
#endif #endif
return false;
} }
#if HAVE_SHM #if HAVE_SHM

View File

@ -194,7 +194,7 @@ DRING_PUBLIC bool mutePlayerAudio(const std::string& id, bool mute);
DRING_PUBLIC bool playerSeekToTime(const std::string& id, int time); DRING_PUBLIC bool playerSeekToTime(const std::string& id, int time);
int64_t getPlayerPosition(const std::string& id); 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 #if HAVE_SHM
DRING_PUBLIC void startShmSink(const std::string& sinkId, bool value); DRING_PUBLIC void startShmSink(const std::string& sinkId, bool value);
#endif #endif