Skip to content

Commit 38beae8

Browse files
committed
Fixed RTCRtpCodecParameters conversion when setting sender params
1 parent 06b4cde commit 38beae8

File tree

3 files changed

+27
-13
lines changed

3 files changed

+27
-13
lines changed

webrtc-jni/src/main/cpp/src/JNI_RTCRtpSender.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,6 @@ JNIEXPORT void JNICALL Java_dev_onvoid_webrtc_RTCRtpSender_setParameters
7676
CHECK_HANDLE(sender);
7777

7878
webrtc::RtpParameters rtp_parameters = jni::RTCRtpSendParameters::toNative(env, jni::JavaLocalRef<jobject>(env, jParams));
79-
8079
webrtc::RTCError result = sender->SetParameters(rtp_parameters);
8180

8281
if (!result.ok()) {

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

Lines changed: 24 additions & 9 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 "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
}

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,12 +45,12 @@ public class RTCRtpCodecParameters {
4545
/**
4646
* The codec clock rate expressed in Hertz.
4747
*/
48-
public final int clockRate;
48+
public final Integer clockRate;
4949

5050
/**
5151
* When present, indicates the number of audio channels (mono=1, stereo=2).
5252
*/
53-
public final int channels;
53+
public final Integer channels;
5454

5555
/**
5656
* The "format specific parameters" field from the "a=fmtp" line in the SDP
@@ -73,7 +73,7 @@ public class RTCRtpCodecParameters {
7373
* @param parameters The "a=fmtp" parameters in the SDP.
7474
*/
7575
public RTCRtpCodecParameters(int payloadType, MediaType mediaType,
76-
String codecName, int clockRate, int channels,
76+
String codecName, Integer clockRate, Integer channels,
7777
Map<String, String> parameters) {
7878
this.payloadType = payloadType;
7979
this.mediaType = mediaType;

0 commit comments

Comments
 (0)