1111AudioHandler::AudioHandler (JNIEnv* env, jobject handler)
1212 : handle_(env, handler) {}
1313
14- jobject jniParams (ScopedJNIEnv env, const CefAudioParameters& params) {
14+ jobject jniParams (ScopedJNIEnv env, jclass clsProps, const CefAudioParameters& params) {
1515 jclass cls = env->FindClass (" org/cef/misc/CefChannelLayout" );
1616 if (cls == nullptr ) {
1717// std::cout << "Could not find class 0";
@@ -24,7 +24,7 @@ jobject jniParams(ScopedJNIEnv env, const CefAudioParameters& params) {
2424 }
2525 jobject layout = env->CallStaticObjectMethod (cls, getLayout, (int ) params.channel_layout );
2626
27- cls = env-> FindClass ( " org/cef/misc/CefAudioParameters " ) ;
27+ cls = clsProps ;
2828 if (cls == nullptr ) {
2929// std::cout << "Could not find class 1";
3030 return nullptr ;
@@ -39,6 +39,11 @@ jobject jniParams(ScopedJNIEnv env, const CefAudioParameters& params) {
3939 return parameters;
4040}
4141
42+ jobject jniParams (ScopedJNIEnv env, const CefAudioParameters& params) {
43+ jclass cls = env->FindClass (" org/cef/misc/CefAudioParameters" );
44+ return jniParams (env, cls, params);
45+ }
46+
4247bool AudioHandler::GetAudioParameters (CefRefPtr<CefBrowser> browser,
4348 CefAudioParameters& params) {
4449 ScopedJNIEnv env;
@@ -48,10 +53,12 @@ bool AudioHandler::GetAudioParameters(CefRefPtr<CefBrowser> browser,
4853 ScopedJNIBrowser jbrowser (env, browser);
4954
5055 jboolean jreturn = JNI_FALSE;
56+ jclass cls = env->FindClass (" org/cef/misc/CefAudioParameters" );
57+ jobject paramsJni = jniParams (env, cls, params);
5158
5259 JNI_CALL_METHOD (env, handle_, " getAudioParameters" ,
5360 " (Lorg/cef/browser/CefBrowser;Lorg/cef/misc/CefAudioParameters;)Z" , Boolean,
54- jreturn, jbrowser.get (), jniParams (env, params) );
61+ jreturn, jbrowser.get (), paramsJni );
5562
5663 return (jreturn != JNI_FALSE);
5764}
@@ -76,17 +83,12 @@ void AudioHandler::OnAudioStreamPacket(CefRefPtr<CefBrowser> browser, const floa
7683
7784 ScopedJNIBrowser jbrowser (env, browser);
7885
79- // TODO: this should truthfully be using a float buffer, but I'm not yet sure how to do that from JNI
80- jfloatArray jArray = env->NewFloatArray (frames);
81- int size = frames;
82- jfloat* fill = (jfloat*) malloc (size * sizeof (jfloat));
83- for (int i = 0 ; i < size; i++)
84- fill[i] = data[0 ][i];
85- env->SetFloatArrayRegion (jArray, 0 , size, fill);
86+ ScopedJNIObjectLocal dataPtr (
87+ env, NewJNIObject (env, " org/cef/misc/DataPointer" , " (J)V" , (jlong) data));
8688
8789 JNI_CALL_VOID_METHOD (env, handle_, " onAudioStreamPacket" ,
88- " (Lorg/cef/browser/CefBrowser;[FIJ )V" ,
89- jbrowser.get (), jArray , frames, (long long ) pts);
90+ " (Lorg/cef/browser/CefBrowser;Lorg/cef/misc/DataPointer;IJ )V" ,
91+ jbrowser.get (), dataPtr. get () , frames, (long long ) pts);
9092}
9193
9294void AudioHandler::OnAudioStreamStopped (CefRefPtr<CefBrowser> browser) {
0 commit comments