Add scaleResolutionDownBy to RtpParameters.Encoding in Android SDK.
Bug: webrtc:10069 Change-Id: I8130836c495d5584ca3e11e9e3155916b871ab21 Reviewed-on: https://webrtc-review.googlesource.com/c/120926 Reviewed-by: Sami Kalliomäki <sakal@webrtc.org> Reviewed-by: Rasmus Brandt <brandtr@webrtc.org> Commit-Queue: Mirta Dvornicic <mirtad@webrtc.org> Cr-Commit-Position: refs/heads/master@{#26535}
This commit is contained in:
committed by
Commit Bot
parent
bfa5d5d9aa
commit
d8b980464c
@ -11,6 +11,7 @@
|
|||||||
package org.webrtc;
|
package org.webrtc;
|
||||||
|
|
||||||
import android.support.annotation.Nullable;
|
import android.support.annotation.Nullable;
|
||||||
|
import java.lang.Double;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
@ -40,18 +41,22 @@ public class RtpParameters {
|
|||||||
@Nullable public Integer maxFramerate;
|
@Nullable public Integer maxFramerate;
|
||||||
// The number of temporal layers for video.
|
// The number of temporal layers for video.
|
||||||
@Nullable public Integer numTemporalLayers;
|
@Nullable public Integer numTemporalLayers;
|
||||||
|
// If non-null, scale the width and height down by this factor for video. If null,
|
||||||
|
// implementation default scaling factor will be used.
|
||||||
|
@Nullable public Double scaleResolutionDownBy;
|
||||||
// SSRC to be used by this encoding.
|
// SSRC to be used by this encoding.
|
||||||
// Can't be changed between getParameters/setParameters.
|
// Can't be changed between getParameters/setParameters.
|
||||||
public Long ssrc;
|
public Long ssrc;
|
||||||
|
|
||||||
@CalledByNative("Encoding")
|
@CalledByNative("Encoding")
|
||||||
Encoding(boolean active, Integer maxBitrateBps, Integer minBitrateBps, Integer maxFramerate,
|
Encoding(boolean active, Integer maxBitrateBps, Integer minBitrateBps, Integer maxFramerate,
|
||||||
Integer numTemporalLayers, Long ssrc) {
|
Integer numTemporalLayers, Double scaleResolutionDownBy, Long ssrc) {
|
||||||
this.active = active;
|
this.active = active;
|
||||||
this.maxBitrateBps = maxBitrateBps;
|
this.maxBitrateBps = maxBitrateBps;
|
||||||
this.minBitrateBps = minBitrateBps;
|
this.minBitrateBps = minBitrateBps;
|
||||||
this.maxFramerate = maxFramerate;
|
this.maxFramerate = maxFramerate;
|
||||||
this.numTemporalLayers = numTemporalLayers;
|
this.numTemporalLayers = numTemporalLayers;
|
||||||
|
this.scaleResolutionDownBy = scaleResolutionDownBy;
|
||||||
this.ssrc = ssrc;
|
this.ssrc = ssrc;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -84,6 +89,12 @@ public class RtpParameters {
|
|||||||
return numTemporalLayers;
|
return numTemporalLayers;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
@CalledByNative("Encoding")
|
||||||
|
Double getScaleResolutionDownBy() {
|
||||||
|
return scaleResolutionDownBy;
|
||||||
|
}
|
||||||
|
|
||||||
@CalledByNative("Encoding")
|
@CalledByNative("Encoding")
|
||||||
Long getSsrc() {
|
Long getSsrc() {
|
||||||
return ssrc;
|
return ssrc;
|
||||||
|
|||||||
@ -10,6 +10,7 @@
|
|||||||
|
|
||||||
package org.webrtc;
|
package org.webrtc;
|
||||||
|
|
||||||
|
import static com.google.common.truth.Truth.assertThat;
|
||||||
import static java.util.Collections.singletonList;
|
import static java.util.Collections.singletonList;
|
||||||
import static org.junit.Assert.assertEquals;
|
import static org.junit.Assert.assertEquals;
|
||||||
import static org.junit.Assert.assertFalse;
|
import static org.junit.Assert.assertFalse;
|
||||||
@ -148,6 +149,9 @@ public class PeerConnectionTest {
|
|||||||
// TODO(bugs.webrtc.org/8491): Remove NoSynchronizedMethodCheck suppression.
|
// TODO(bugs.webrtc.org/8491): Remove NoSynchronizedMethodCheck suppression.
|
||||||
@SuppressWarnings("NoSynchronizedMethodCheck")
|
@SuppressWarnings("NoSynchronizedMethodCheck")
|
||||||
public synchronized void onFrame(VideoFrame frame) {
|
public synchronized void onFrame(VideoFrame frame) {
|
||||||
|
if (expectedFramesDelivered <= 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
assertTrue(expectedWidth > 0);
|
assertTrue(expectedWidth > 0);
|
||||||
assertTrue(expectedHeight > 0);
|
assertTrue(expectedHeight > 0);
|
||||||
assertEquals(expectedWidth, frame.getRotatedWidth());
|
assertEquals(expectedWidth, frame.getRotatedWidth());
|
||||||
@ -1025,11 +1029,13 @@ public class PeerConnectionTest {
|
|||||||
assertNull(rtpParameters.encodings.get(0).minBitrateBps);
|
assertNull(rtpParameters.encodings.get(0).minBitrateBps);
|
||||||
assertNull(rtpParameters.encodings.get(0).maxFramerate);
|
assertNull(rtpParameters.encodings.get(0).maxFramerate);
|
||||||
assertNull(rtpParameters.encodings.get(0).numTemporalLayers);
|
assertNull(rtpParameters.encodings.get(0).numTemporalLayers);
|
||||||
|
assertNull(rtpParameters.encodings.get(0).scaleResolutionDownBy);
|
||||||
|
|
||||||
rtpParameters.encodings.get(0).maxBitrateBps = 300000;
|
rtpParameters.encodings.get(0).maxBitrateBps = 300000;
|
||||||
rtpParameters.encodings.get(0).minBitrateBps = 100000;
|
rtpParameters.encodings.get(0).minBitrateBps = 100000;
|
||||||
rtpParameters.encodings.get(0).maxFramerate = 20;
|
rtpParameters.encodings.get(0).maxFramerate = 20;
|
||||||
rtpParameters.encodings.get(0).numTemporalLayers = 2;
|
rtpParameters.encodings.get(0).numTemporalLayers = 2;
|
||||||
|
rtpParameters.encodings.get(0).scaleResolutionDownBy = 2.0;
|
||||||
assertTrue(videoSender.setParameters(rtpParameters));
|
assertTrue(videoSender.setParameters(rtpParameters));
|
||||||
|
|
||||||
// Create a DTMF sender.
|
// Create a DTMF sender.
|
||||||
@ -1044,6 +1050,7 @@ public class PeerConnectionTest {
|
|||||||
assertEquals(100000, (int) rtpParameters.encodings.get(0).minBitrateBps);
|
assertEquals(100000, (int) rtpParameters.encodings.get(0).minBitrateBps);
|
||||||
assertEquals(20, (int) rtpParameters.encodings.get(0).maxFramerate);
|
assertEquals(20, (int) rtpParameters.encodings.get(0).maxFramerate);
|
||||||
assertEquals(2, (int) rtpParameters.encodings.get(0).numTemporalLayers);
|
assertEquals(2, (int) rtpParameters.encodings.get(0).numTemporalLayers);
|
||||||
|
assertThat(rtpParameters.encodings.get(0).scaleResolutionDownBy).isEqualTo(2.0);
|
||||||
|
|
||||||
// Test send & receive UTF-8 text.
|
// Test send & receive UTF-8 text.
|
||||||
answeringExpectations.expectMessage(
|
answeringExpectations.expectMessage(
|
||||||
|
|||||||
@ -132,6 +132,14 @@ absl::optional<bool> JavaToNativeOptionalBool(JNIEnv* jni,
|
|||||||
return JNI_Boolean::Java_Boolean_booleanValue(jni, boolean);
|
return JNI_Boolean::Java_Boolean_booleanValue(jni, boolean);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
absl::optional<double> JavaToNativeOptionalDouble(
|
||||||
|
JNIEnv* jni,
|
||||||
|
const JavaRef<jobject>& j_double) {
|
||||||
|
if (IsNull(jni, j_double))
|
||||||
|
return absl::nullopt;
|
||||||
|
return JNI_Double::Java_Double_doubleValue(jni, j_double);
|
||||||
|
}
|
||||||
|
|
||||||
absl::optional<int32_t> JavaToNativeOptionalInt(
|
absl::optional<int32_t> JavaToNativeOptionalInt(
|
||||||
JNIEnv* jni,
|
JNIEnv* jni,
|
||||||
const JavaRef<jobject>& integer) {
|
const JavaRef<jobject>& integer) {
|
||||||
@ -194,6 +202,12 @@ ScopedJavaLocalRef<jstring> NativeToJavaString(JNIEnv* jni,
|
|||||||
return NativeToJavaString(jni, str.c_str());
|
return NativeToJavaString(jni, str.c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ScopedJavaLocalRef<jobject> NativeToJavaDouble(
|
||||||
|
JNIEnv* jni,
|
||||||
|
const absl::optional<double>& optional_double) {
|
||||||
|
return optional_double ? NativeToJavaDouble(jni, *optional_double) : nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
ScopedJavaLocalRef<jobject> NativeToJavaInteger(
|
ScopedJavaLocalRef<jobject> NativeToJavaInteger(
|
||||||
JNIEnv* jni,
|
JNIEnv* jni,
|
||||||
const absl::optional<int32_t>& optional_int) {
|
const absl::optional<int32_t>& optional_int) {
|
||||||
@ -259,8 +273,10 @@ ScopedJavaLocalRef<jobjectArray> NativeToJavaBooleanArray(
|
|||||||
ScopedJavaLocalRef<jobjectArray> NativeToJavaDoubleArray(
|
ScopedJavaLocalRef<jobjectArray> NativeToJavaDoubleArray(
|
||||||
JNIEnv* env,
|
JNIEnv* env,
|
||||||
const std::vector<double>& container) {
|
const std::vector<double>& container) {
|
||||||
|
ScopedJavaLocalRef<jobject> (*convert_function)(JNIEnv*, double) =
|
||||||
|
&NativeToJavaDouble;
|
||||||
return NativeToJavaObjectArray(env, container, java_lang_Double_clazz(env),
|
return NativeToJavaObjectArray(env, container, java_lang_Double_clazz(env),
|
||||||
&NativeToJavaDouble);
|
convert_function);
|
||||||
}
|
}
|
||||||
|
|
||||||
ScopedJavaLocalRef<jobjectArray> NativeToJavaIntegerArray(
|
ScopedJavaLocalRef<jobjectArray> NativeToJavaIntegerArray(
|
||||||
@ -282,12 +298,12 @@ ScopedJavaLocalRef<jobjectArray> NativeToJavaLongArray(
|
|||||||
ScopedJavaLocalRef<jobjectArray> NativeToJavaStringArray(
|
ScopedJavaLocalRef<jobjectArray> NativeToJavaStringArray(
|
||||||
JNIEnv* env,
|
JNIEnv* env,
|
||||||
const std::vector<std::string>& container) {
|
const std::vector<std::string>& container) {
|
||||||
ScopedJavaLocalRef<jstring> (*convert)(JNIEnv*, const std::string&) =
|
ScopedJavaLocalRef<jstring> (*convert_function)(JNIEnv*, const std::string&) =
|
||||||
&NativeToJavaString;
|
&NativeToJavaString;
|
||||||
return NativeToJavaObjectArray(
|
return NativeToJavaObjectArray(
|
||||||
env, container,
|
env, container,
|
||||||
static_cast<jclass>(jni::Java_JniHelper_getStringClass(env).obj()),
|
static_cast<jclass>(jni::Java_JniHelper_getStringClass(env).obj()),
|
||||||
convert);
|
convert_function);
|
||||||
}
|
}
|
||||||
|
|
||||||
JavaListBuilder::JavaListBuilder(JNIEnv* env)
|
JavaListBuilder::JavaListBuilder(JNIEnv* env)
|
||||||
|
|||||||
@ -129,6 +129,9 @@ int64_t JavaToNativeLong(JNIEnv* env, const JavaRef<jobject>& j_long);
|
|||||||
|
|
||||||
absl::optional<bool> JavaToNativeOptionalBool(JNIEnv* jni,
|
absl::optional<bool> JavaToNativeOptionalBool(JNIEnv* jni,
|
||||||
const JavaRef<jobject>& boolean);
|
const JavaRef<jobject>& boolean);
|
||||||
|
absl::optional<double> JavaToNativeOptionalDouble(
|
||||||
|
JNIEnv* jni,
|
||||||
|
const JavaRef<jobject>& j_double);
|
||||||
absl::optional<int32_t> JavaToNativeOptionalInt(
|
absl::optional<int32_t> JavaToNativeOptionalInt(
|
||||||
JNIEnv* jni,
|
JNIEnv* jni,
|
||||||
const JavaRef<jobject>& integer);
|
const JavaRef<jobject>& integer);
|
||||||
@ -196,6 +199,9 @@ ScopedJavaLocalRef<jstring> NativeToJavaString(JNIEnv* jni, const char* str);
|
|||||||
ScopedJavaLocalRef<jstring> NativeToJavaString(JNIEnv* jni,
|
ScopedJavaLocalRef<jstring> NativeToJavaString(JNIEnv* jni,
|
||||||
const std::string& str);
|
const std::string& str);
|
||||||
|
|
||||||
|
ScopedJavaLocalRef<jobject> NativeToJavaDouble(
|
||||||
|
JNIEnv* jni,
|
||||||
|
const absl::optional<double>& optional_double);
|
||||||
ScopedJavaLocalRef<jobject> NativeToJavaInteger(
|
ScopedJavaLocalRef<jobject> NativeToJavaInteger(
|
||||||
JNIEnv* jni,
|
JNIEnv* jni,
|
||||||
const absl::optional<int32_t>& optional_int);
|
const absl::optional<int32_t>& optional_int);
|
||||||
|
|||||||
@ -28,6 +28,7 @@ ScopedJavaLocalRef<jobject> NativeToJavaRtpEncodingParameter(
|
|||||||
NativeToJavaInteger(env, encoding.min_bitrate_bps),
|
NativeToJavaInteger(env, encoding.min_bitrate_bps),
|
||||||
NativeToJavaInteger(env, encoding.max_framerate),
|
NativeToJavaInteger(env, encoding.max_framerate),
|
||||||
NativeToJavaInteger(env, encoding.num_temporal_layers),
|
NativeToJavaInteger(env, encoding.num_temporal_layers),
|
||||||
|
NativeToJavaDouble(env, encoding.scale_resolution_down_by),
|
||||||
encoding.ssrc ? NativeToJavaLong(env, *encoding.ssrc) : nullptr);
|
encoding.ssrc ? NativeToJavaLong(env, *encoding.ssrc) : nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -77,6 +78,10 @@ RtpEncodingParameters JavaToNativeRtpEncodingParameters(
|
|||||||
Java_Encoding_getNumTemporalLayers(jni, j_encoding_parameters);
|
Java_Encoding_getNumTemporalLayers(jni, j_encoding_parameters);
|
||||||
encoding.num_temporal_layers =
|
encoding.num_temporal_layers =
|
||||||
JavaToNativeOptionalInt(jni, j_num_temporal_layers);
|
JavaToNativeOptionalInt(jni, j_num_temporal_layers);
|
||||||
|
ScopedJavaLocalRef<jobject> j_scale_resolution_down_by =
|
||||||
|
Java_Encoding_getScaleResolutionDownBy(jni, j_encoding_parameters);
|
||||||
|
encoding.scale_resolution_down_by =
|
||||||
|
JavaToNativeOptionalDouble(jni, j_scale_resolution_down_by);
|
||||||
ScopedJavaLocalRef<jobject> j_ssrc =
|
ScopedJavaLocalRef<jobject> j_ssrc =
|
||||||
Java_Encoding_getSsrc(jni, j_encoding_parameters);
|
Java_Encoding_getSsrc(jni, j_encoding_parameters);
|
||||||
if (!IsNull(jni, j_ssrc))
|
if (!IsNull(jni, j_ssrc))
|
||||||
|
|||||||
Reference in New Issue
Block a user