1818#include " JavaEnums.h"
1919#include " JavaHashMap.h"
2020#include " JavaObject.h"
21+ #include " JavaPrimitive.h"
2122#include " JavaRef.h"
2223#include " JavaString.h"
2324#include " JavaUtils.h"
@@ -32,9 +33,8 @@ namespace jni
3233 jint payloadType = static_cast <jint>(parameters.payload_type );
3334 JavaLocalRef<jobject> mediaType = JavaEnums::toJava (env, parameters.kind );
3435 JavaLocalRef<jstring> codecName = JavaString::toJava (env, parameters.name );
35- jint clockRate = static_cast <jint>(parameters.clock_rate .value_or (0 ));
36- jint channels = static_cast <jint>(parameters.num_channels .value_or (0 ));
37-
36+ JavaLocalRef<jobject> clockRate = nullptr ;
37+ JavaLocalRef<jobject> channels = nullptr ;
3838 JavaHashMap paramMap (env);
3939
4040 for (const std::pair<std::string, std::string> & param : parameters.parameters ) {
@@ -44,9 +44,16 @@ namespace jni
4444 paramMap.put (key, value);
4545 }
4646
47+ if (parameters.clock_rate .has_value ()) {
48+ clockRate = Integer::create (env, parameters.clock_rate .value ());
49+ }
50+ if (parameters.num_channels .has_value ()) {
51+ channels = Integer::create (env, parameters.num_channels .value ());
52+ }
53+
4754 const auto javaClass = JavaClasses::get<JavaRTCRtpCodecParametersClass>(env);
4855
49- jobject object = env->NewObject (javaClass->cls , javaClass->ctor , payloadType, mediaType.get (), codecName.get (), clockRate, channels, ((JavaLocalRef<jobject>)paramMap).get ());
56+ jobject object = env->NewObject (javaClass->cls , javaClass->ctor , payloadType, mediaType.get (), codecName.get (), clockRate. get () , channels. get () , ((JavaLocalRef<jobject>)paramMap).get ());
5057 ExceptionCheck (env);
5158
5259 return JavaLocalRef<jobject>(env, object);
@@ -62,8 +69,6 @@ namespace jni
6269 params.payload_type = obj.getInt <int >(javaClass->payloadType );
6370 params.kind = JavaEnums::toNative<cricket::MediaType>(env, obj.getObject (javaClass->mediaType ));
6471 params.name = JavaString::toNative (env, obj.getString (javaClass->codecName ));
65- params.clock_rate = obj.getInt <int >(javaClass->clockRate );
66- params.num_channels = obj.getInt <int >(javaClass->channels );
6772
6873 for (const auto & entry : JavaHashMap (env, obj.getObject (javaClass->parameters ))) {
6974 std::string key = JavaString::toNative (env, static_java_ref_cast<jstring>(env, entry.first ));
@@ -72,20 +77,30 @@ namespace jni
7277 params.parameters .emplace (key, value);
7378 }
7479
80+ auto clockRate = obj.getObject (javaClass->clockRate );
81+ auto channels = obj.getObject (javaClass->channels );
82+
83+ if (clockRate.get ()) {
84+ params.clock_rate = Integer::getValue (env, clockRate);
85+ }
86+ if (channels.get ()) {
87+ params.num_channels = Integer::getValue (env, channels);
88+ }
89+
7590 return params;
7691 }
7792
7893 JavaRTCRtpCodecParametersClass::JavaRTCRtpCodecParametersClass (JNIEnv * env)
7994 {
8095 cls = FindClass (env, PKG" RTCRtpCodecParameters" );
8196
82- ctor = GetMethod (env, cls, " <init>" , " (IL" PKG_MEDIA " MediaType;" STRING_SIG " II " MAP_SIG " )V" );
97+ ctor = GetMethod (env, cls, " <init>" , " (IL" PKG_MEDIA " MediaType;" STRING_SIG INTEGER_SIG INTEGER_SIG MAP_SIG " )V" );
8398
8499 payloadType = GetFieldID (env, cls, " payloadType" , " I" );
85100 mediaType = GetFieldID (env, cls, " mediaType" , " L" PKG_MEDIA " MediaType;" );
86101 codecName = GetFieldID (env, cls, " codecName" , STRING_SIG);
87- clockRate = GetFieldID (env, cls, " clockRate" , " I " );
88- channels = GetFieldID (env, cls, " channels" , " I " );
102+ clockRate = GetFieldID (env, cls, " clockRate" , INTEGER_SIG );
103+ channels = GetFieldID (env, cls, " channels" , INTEGER_SIG );
89104 parameters = GetFieldID (env, cls, " parameters" , MAP_SIG);
90105 }
91106 }
0 commit comments