1818#include " JavaEnums.h"
1919#include " JavaHashMap.h"
2020#include " JavaObject.h"
21+ #include " JavaPrimitive.h"
2122#include " JavaString.h"
2223#include " JavaUtils.h"
2324#include " JNI_WebRTC.h"
@@ -30,8 +31,8 @@ namespace jni
3031 {
3132 JavaLocalRef<jobject> mediaType = JavaEnums::toJava (env, capability.kind );
3233 JavaLocalRef<jstring> codecName = JavaString::toJava (env, capability.name );
33- jint clockRate = static_cast <jint>(capability. clock_rate . value_or ( 0 )) ;
34- jint channels = static_cast <jint>(capability. num_channels . value_or ( 0 )) ;
34+ JavaLocalRef<jobject> clockRate = nullptr ;
35+ JavaLocalRef<jobject> channels = nullptr ;
3536
3637 JavaHashMap paramMap (env);
3738
@@ -42,12 +43,19 @@ namespace jni
4243 paramMap.put (key, value);
4344 }
4445
46+ if (capability.clock_rate .has_value ()) {
47+ clockRate = Integer::create (env, capability.clock_rate .value ());
48+ }
49+ if (capability.num_channels .has_value ()) {
50+ channels = Integer::create (env, capability.num_channels .value ());
51+ }
52+
4553 const auto javaClass = JavaClasses::get<JavaRTCRtpCodecCapabilityClass>(env);
4654
4755 JavaLocalRef<jobject> fmtMap = paramMap;
4856
4957 jobject object = env->NewObject (javaClass->cls , javaClass->ctor ,
50- mediaType.get (), codecName.get (), clockRate, channels, fmtMap.get ());
58+ mediaType.get (), codecName.get (), clockRate. get () , channels. get () , fmtMap.get ());
5159
5260 ExceptionCheck (env);
5361
@@ -64,8 +72,6 @@ namespace jni
6472
6573 codecCapability.kind = JavaEnums::toNative<webrtc::MediaType>(env, obj.getObject (javaClass->mediaType ));
6674 codecCapability.name = JavaString::toNative (env, obj.getString (javaClass->name ));
67- codecCapability.clock_rate = obj.getInt <int >(javaClass->clockRate );
68- codecCapability.num_channels = obj.getInt <int >(javaClass->channels );
6975
7076 for (const auto & entry : JavaHashMap (env, obj.getObject (javaClass->sdpFmtp ))) {
7177 std::string key = JavaString::toNative (env, static_java_ref_cast<jstring>(env, entry.first ));
@@ -74,19 +80,29 @@ namespace jni
7480 codecCapability.parameters .emplace (key, value);
7581 }
7682
83+ auto clockRate = obj.getObject (javaClass->clockRate );
84+ auto channels = obj.getObject (javaClass->channels );
85+
86+ if (clockRate.get ()) {
87+ codecCapability.clock_rate = Integer::getValue (env, clockRate);
88+ }
89+ if (channels.get ()) {
90+ codecCapability.num_channels = Integer::getValue (env, channels);
91+ }
92+
7793 return codecCapability;
7894 }
7995
8096 JavaRTCRtpCodecCapabilityClass::JavaRTCRtpCodecCapabilityClass (JNIEnv * env)
8197 {
8298 cls = FindClass (env, PKG" RTCRtpCodecCapability" );
8399
84- ctor = GetMethod (env, cls, " <init>" , " (L" PKG_MEDIA " MediaType;" STRING_SIG " II " MAP_SIG " )V" );
100+ ctor = GetMethod (env, cls, " <init>" , " (L" PKG_MEDIA " MediaType;" STRING_SIG INTEGER_SIG INTEGER_SIG MAP_SIG " )V" );
85101
86102 mediaType = GetFieldID (env, cls, " mediaType" , " L" PKG_MEDIA " MediaType;" );
87103 name = GetFieldID (env, cls, " name" , STRING_SIG);
88- clockRate = GetFieldID (env, cls, " clockRate" , " I " );
89- channels = GetFieldID (env, cls, " channels" , " I " );
104+ clockRate = GetFieldID (env, cls, " clockRate" , INTEGER_SIG );
105+ channels = GetFieldID (env, cls, " channels" , INTEGER_SIG );
90106 sdpFmtp = GetFieldID (env, cls, " sdpFmtp" , MAP_SIG);
91107 }
92108 }
0 commit comments