Support decoding multiple streams in Java API. (#2149)
This commit is contained in:
@@ -17,6 +17,14 @@ public class OfflineRecognizer {
|
||||
decode(ptr, s.getPtr());
|
||||
}
|
||||
|
||||
public void decode(OfflineStream[] ss) {
|
||||
long[] streamPtrs = new long[ss.length];
|
||||
for (int i = 0; i < ss.length; ++i) {
|
||||
streamPtrs[i] = ss[i].getPtr();
|
||||
}
|
||||
decodeStreams(ptr, streamPtrs);
|
||||
}
|
||||
|
||||
public OfflineStream createStream() {
|
||||
long p = createStream(ptr);
|
||||
return new OfflineStream(p);
|
||||
@@ -55,5 +63,7 @@ public class OfflineRecognizer {
|
||||
|
||||
private native void decode(long ptr, long streamPtr);
|
||||
|
||||
private native void decodeStreams(long ptr, long[] streamPtrs);
|
||||
|
||||
private native Object[] getResult(long streamPtr);
|
||||
}
|
||||
|
||||
@@ -18,6 +18,14 @@ public class OnlineRecognizer {
|
||||
decode(ptr, s.getPtr());
|
||||
}
|
||||
|
||||
public void decode(OnlineStream[] ss) {
|
||||
long[] streamPtrs = new long[ss.length];
|
||||
for (int i = 0; i < ss.length; ++i) {
|
||||
streamPtrs[i] = ss[i].getPtr();
|
||||
}
|
||||
decodeStreams(ptr, streamPtrs);
|
||||
}
|
||||
|
||||
public boolean isReady(OnlineStream s) {
|
||||
return isReady(ptr, s.getPtr());
|
||||
}
|
||||
@@ -68,6 +76,8 @@ public class OnlineRecognizer {
|
||||
|
||||
private native void decode(long ptr, long streamPtr);
|
||||
|
||||
private native void decodeStreams(long ptr, long[] streamPtrs);
|
||||
|
||||
private native boolean isEndpoint(long ptr, long streamPtr);
|
||||
|
||||
private native boolean isReady(long ptr, long streamPtr);
|
||||
|
||||
@@ -366,21 +366,43 @@ Java_com_k2fsa_sherpa_onnx_OfflineRecognizer_createStream(JNIEnv * /*env*/,
|
||||
|
||||
SHERPA_ONNX_EXTERN_C
|
||||
JNIEXPORT void JNICALL Java_com_k2fsa_sherpa_onnx_OfflineRecognizer_decode(
|
||||
JNIEnv *env, jobject /*obj*/, jlong ptr, jlong streamPtr) {
|
||||
JNIEnv *env, jobject /*obj*/, jlong ptr, jlong stream_ptr) {
|
||||
SafeJNI(env, "OfflineRecognizer_decode", [&] {
|
||||
if (!ValidatePointer(env, ptr, "OfflineRecognizer_decode",
|
||||
"OfflineRecognizer pointer is null.") ||
|
||||
!ValidatePointer(env, streamPtr, "OfflineRecognizer_decode",
|
||||
!ValidatePointer(env, stream_ptr, "OfflineRecognizer_decode",
|
||||
"OfflineStream pointer is null.")) {
|
||||
return;
|
||||
}
|
||||
|
||||
auto recognizer = reinterpret_cast<sherpa_onnx::OfflineRecognizer *>(ptr);
|
||||
auto stream = reinterpret_cast<sherpa_onnx::OfflineStream *>(streamPtr);
|
||||
auto stream = reinterpret_cast<sherpa_onnx::OfflineStream *>(stream_ptr);
|
||||
recognizer->DecodeStream(stream);
|
||||
});
|
||||
}
|
||||
|
||||
SHERPA_ONNX_EXTERN_C
|
||||
JNIEXPORT void JNICALL
|
||||
Java_com_k2fsa_sherpa_onnx_OfflineRecognizer_decodeStreams(
|
||||
JNIEnv *env, jobject /*obj*/, jlong ptr, jlongArray stream_ptrs) {
|
||||
SafeJNI(env, "OfflineRecognizer_decode_streams", [&] {
|
||||
if (!ValidatePointer(env, ptr, "OfflineRecognizer_decode_streams",
|
||||
"OfflineRecognizer pointer is null.")) {
|
||||
return;
|
||||
}
|
||||
|
||||
auto recognizer = reinterpret_cast<sherpa_onnx::OfflineRecognizer *>(ptr);
|
||||
|
||||
jlong *p = env->GetLongArrayElements(stream_ptrs, nullptr);
|
||||
jsize n = env->GetArrayLength(stream_ptrs);
|
||||
|
||||
auto ss = reinterpret_cast<sherpa_onnx::OfflineStream **>(p);
|
||||
recognizer->DecodeStreams(ss, n);
|
||||
|
||||
env->ReleaseLongArrayElements(stream_ptrs, p, JNI_ABORT);
|
||||
});
|
||||
}
|
||||
|
||||
SHERPA_ONNX_EXTERN_C
|
||||
JNIEXPORT jobjectArray JNICALL
|
||||
Java_com_k2fsa_sherpa_onnx_OfflineRecognizer_getResult(JNIEnv *env,
|
||||
|
||||
@@ -339,6 +339,22 @@ JNIEXPORT void JNICALL Java_com_k2fsa_sherpa_onnx_OnlineRecognizer_decode(
|
||||
recognizer->DecodeStream(stream);
|
||||
}
|
||||
|
||||
SHERPA_ONNX_EXTERN_C
|
||||
JNIEXPORT void JNICALL
|
||||
Java_com_k2fsa_sherpa_onnx_OnlineRecognizer_decodeStreams(
|
||||
JNIEnv *env, jobject /*obj*/, jlong ptr, jlongArray stream_ptrs) {
|
||||
auto recognizer = reinterpret_cast<sherpa_onnx::OnlineRecognizer *>(ptr);
|
||||
|
||||
jlong *p = env->GetLongArrayElements(stream_ptrs, nullptr);
|
||||
jsize n = env->GetArrayLength(stream_ptrs);
|
||||
|
||||
auto ss = reinterpret_cast<sherpa_onnx::OnlineStream **>(p);
|
||||
|
||||
recognizer->DecodeStreams(ss, n);
|
||||
|
||||
env->ReleaseLongArrayElements(stream_ptrs, p, JNI_ABORT);
|
||||
}
|
||||
|
||||
SHERPA_ONNX_EXTERN_C
|
||||
JNIEXPORT jlong JNICALL
|
||||
Java_com_k2fsa_sherpa_onnx_OnlineRecognizer_createStream(JNIEnv *env,
|
||||
|
||||
Reference in New Issue
Block a user