blob: 09157be2872b91cf3880aaf9a6008366aeb66b12 [file] [log] [blame]
/*
* Copyright 2023 The WebRTC project authors. All Rights Reserved.
*
* Use of this source code is governed by a BSD-style license
* that can be found in the LICENSE file in the root of the source
* tree. An additional intellectual property rights grant can be found
* in the file PATENTS. All contributing project authors may
* be found in the AUTHORS file in the root of the source tree.
*/
#include "sdk/android/src/jni/pc/rtp_capabilities.h"
#include "sdk/android/generated_peerconnection_jni/RtpCapabilities_jni.h"
#include "sdk/android/native_api/jni/java_types.h"
#include "sdk/android/src/jni/jni_helpers.h"
#include "sdk/android/src/jni/pc/media_stream_track.h"
namespace webrtc {
namespace jni {
namespace {
ScopedJavaLocalRef<jobject> NativeToJavaRtpCodecParameter(
JNIEnv* env,
const RtpCodecCapability& codec) {
return Java_CodecCapability_Constructor(
env, codec.preferred_payload_type.value(),
NativeToJavaString(env, codec.name),
NativeToJavaMediaType(env, codec.kind),
NativeToJavaInteger(env, codec.clock_rate),
NativeToJavaInteger(env, codec.num_channels),
NativeToJavaString(env, codec.mime_type()),
NativeToJavaStringMap(env, codec.parameters));
}
ScopedJavaLocalRef<jobject> NativeToJavaRtpHeaderExtensionParameter(
JNIEnv* env,
const RtpHeaderExtensionCapability& extension) {
return Java_HeaderExtensionCapability_Constructor(
env, NativeToJavaString(env, extension.uri),
extension.preferred_id.value(), extension.preferred_encrypt);
}
} // namespace
RtpCapabilities JavaToNativeRtpCapabilities(
JNIEnv* jni,
const JavaRef<jobject>& j_capabilities) {
RtpCapabilities capabilities;
ScopedJavaLocalRef<jobject> j_header_extensions =
Java_RtpCapabilities_getHeaderExtensions(jni, j_capabilities);
for (const JavaRef<jobject>& j_header_extension :
Iterable(jni, j_header_extensions)) {
RtpHeaderExtensionCapability header_extension;
header_extension.uri = JavaToStdString(
jni, Java_HeaderExtensionCapability_getUri(jni, j_header_extension));
header_extension.preferred_id =
Java_HeaderExtensionCapability_getPreferredId(jni, j_header_extension);
header_extension.preferred_encrypt =
Java_HeaderExtensionCapability_getPreferredEncrypted(
jni, j_header_extension);
capabilities.header_extensions.push_back(header_extension);
}
// Convert codecs.
ScopedJavaLocalRef<jobject> j_codecs =
Java_RtpCapabilities_getCodecs(jni, j_capabilities);
for (const JavaRef<jobject>& j_codec : Iterable(jni, j_codecs)) {
RtpCodecCapability codec;
codec.preferred_payload_type =
Java_CodecCapability_getPreferredPayloadType(jni, j_codec);
codec.name =
JavaToStdString(jni, Java_CodecCapability_getName(jni, j_codec));
codec.kind =
JavaToNativeMediaType(jni, Java_CodecCapability_getKind(jni, j_codec));
codec.clock_rate = JavaToNativeOptionalInt(
jni, Java_CodecCapability_getClockRate(jni, j_codec));
codec.num_channels = JavaToNativeOptionalInt(
jni, Java_CodecCapability_getNumChannels(jni, j_codec));
auto parameters_map = JavaToNativeStringMap(
jni, Java_CodecCapability_getParameters(jni, j_codec));
codec.parameters.insert(parameters_map.begin(), parameters_map.end());
capabilities.codecs.push_back(codec);
}
return capabilities;
}
ScopedJavaLocalRef<jobject> NativeToJavaRtpCapabilities(
JNIEnv* env,
const RtpCapabilities& capabilities) {
return Java_RtpCapabilities_Constructor(
env,
NativeToJavaList(env, capabilities.codecs,
&NativeToJavaRtpCodecParameter),
NativeToJavaList(env, capabilities.header_extensions,
&NativeToJavaRtpHeaderExtensionParameter));
}
RtpCodecCapability JavaToNativeRtpCodecCapability(
JNIEnv* jni,
const JavaRef<jobject>& j_codec) {
RtpCodecCapability codec;
codec.preferred_payload_type =
Java_CodecCapability_getPreferredPayloadType(jni, j_codec);
codec.name = JavaToStdString(jni, Java_CodecCapability_getName(jni, j_codec));
codec.kind =
JavaToNativeMediaType(jni, Java_CodecCapability_getKind(jni, j_codec));
codec.clock_rate = JavaToNativeOptionalInt(
jni, Java_CodecCapability_getClockRate(jni, j_codec));
codec.num_channels = JavaToNativeOptionalInt(
jni, Java_CodecCapability_getNumChannels(jni, j_codec));
auto parameters_map = JavaToNativeStringMap(
jni, Java_CodecCapability_getParameters(jni, j_codec));
codec.parameters.insert(parameters_map.begin(), parameters_map.end());
return codec;
}
} // namespace jni
} // namespace webrtc