18
18
#include " JavaEnums.h"
19
19
#include " JavaHashMap.h"
20
20
#include " JavaObject.h"
21
+ #include " JavaPrimitive.h"
21
22
#include " JavaString.h"
22
23
#include " JavaUtils.h"
23
24
#include " JNI_WebRTC.h"
@@ -30,8 +31,8 @@ namespace jni
30
31
{
31
32
JavaLocalRef<jobject> mediaType = JavaEnums::toJava (env, capability.kind );
32
33
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 ;
35
36
36
37
JavaHashMap paramMap (env);
37
38
@@ -42,12 +43,19 @@ namespace jni
42
43
paramMap.put (key, value);
43
44
}
44
45
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
+
45
53
const auto javaClass = JavaClasses::get<JavaRTCRtpCodecCapabilityClass>(env);
46
54
47
55
JavaLocalRef<jobject> fmtMap = paramMap;
48
56
49
57
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 ());
51
59
52
60
ExceptionCheck (env);
53
61
@@ -64,8 +72,6 @@ namespace jni
64
72
65
73
codecCapability.kind = JavaEnums::toNative<webrtc::MediaType>(env, obj.getObject (javaClass->mediaType ));
66
74
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 );
69
75
70
76
for (const auto & entry : JavaHashMap (env, obj.getObject (javaClass->sdpFmtp ))) {
71
77
std::string key = JavaString::toNative (env, static_java_ref_cast<jstring>(env, entry.first ));
@@ -74,19 +80,29 @@ namespace jni
74
80
codecCapability.parameters .emplace (key, value);
75
81
}
76
82
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
+
77
93
return codecCapability;
78
94
}
79
95
80
96
JavaRTCRtpCodecCapabilityClass::JavaRTCRtpCodecCapabilityClass (JNIEnv * env)
81
97
{
82
98
cls = FindClass (env, PKG" RTCRtpCodecCapability" );
83
99
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" );
85
101
86
102
mediaType = GetFieldID (env, cls, " mediaType" , " L" PKG_MEDIA " MediaType;" );
87
103
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 );
90
106
sdpFmtp = GetFieldID (env, cls, " sdpFmtp" , MAP_SIG);
91
107
}
92
108
}
0 commit comments