Bug: webrtc:15177 Change-Id: If61ef9a87bc4f68d73cef6e681461682ca48f034 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/304880 Reviewed-by: Sergey Silkin <ssilkin@webrtc.org> Commit-Queue: Sergey Silkin <ssilkin@webrtc.org> Cr-Commit-Position: refs/heads/main@{#40071}
120 lines
4.6 KiB
C++
120 lines
4.6 KiB
C++
/*
|
|
* 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
|