Skip to content
Snippets Groups Projects
Commit 657c47c5 authored by Adrien Béraud's avatar Adrien Béraud
Browse files

video API: return bool from registerSinkTarget

This allows clients to know if sink registration succeeded.

Change-Id: Ic22d4a50b9cf3c071562c6425724008a54e5f3a6
parent 8750049b
No related branches found
No related tags found
No related merge requests found
......@@ -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();
......
......@@ -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
......
......@@ -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
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment