Skip to content

Commit 28a9714

Browse files
authored
fix: made RTCRtpCodecCapability's int fields optional (#190)
1 parent dba7352 commit 28a9714

File tree

3 files changed

+28
-12
lines changed

3 files changed

+28
-12
lines changed

webrtc-jni/src/main/cpp/src/api/RTCRtpCodecCapability.cpp

Lines changed: 24 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
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
}

webrtc/src/main/java/dev/onvoid/webrtc/RTCRtpCodecCapability.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,14 +41,14 @@ public class RTCRtpCodecCapability {
4141
/**
4242
* The codec clock rate expressed in Hertz.
4343
*/
44-
private final int clockRate;
44+
private final Integer clockRate;
4545

4646
/**
4747
* When present, indicates the number of audio channels (mono=1, stereo=2).
4848
* <p>
4949
* Unused for video codecs.
5050
*/
51-
private final int channels;
51+
private final Integer channels;
5252

5353
/**
5454
* The "format specific parameters" from the "a=fmtp" line in the SDP
@@ -70,7 +70,7 @@ public class RTCRtpCodecCapability {
7070
* @param sdpFmtp The "a=fmtp" parameters in the SDP.
7171
*/
7272
public RTCRtpCodecCapability(MediaType mediaType, String name,
73-
int clockRate, int channels, Map<String, String> sdpFmtp) {
73+
Integer clockRate, Integer channels, Map<String, String> sdpFmtp) {
7474
this.mediaType = mediaType;
7575
this.name = name;
7676
this.clockRate = clockRate;

webrtc/src/test/java/dev/onvoid/webrtc/RTCRtpTransceiverTests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ void setCodecCapabilities() {
5555
new RTCRtpTransceiverInit());
5656

5757
audioTransceiver.setCodecPreferences(audioPreferences);
58-
// videoTransceiver.setCodecPreferences(videoPreferences);
58+
videoTransceiver.setCodecPreferences(videoPreferences);
5959
}
6060

6161
}

0 commit comments

Comments
 (0)