VideoEncoderFallback for Android.

Expose VideoEncoderSoftwareFallbackWrapper in Java.

Bug: webrtc:7925
Change-Id: I1e1f7bc0469527f6f6a3b7051535896c3f02611c
Reviewed-on: https://webrtc-review.googlesource.com/22960
Reviewed-by: Magnus Jedvert <magjed@webrtc.org>
Commit-Queue: Anders Carlsson <andersc@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#20698}
This commit is contained in:
Anders Carlsson 2017-11-15 14:36:33 +01:00 committed by Commit Bot
parent 7dad255ce1
commit c3fedccf01
8 changed files with 71 additions and 8 deletions

View file

@ -143,6 +143,7 @@ rtc_static_library("video_jni") {
"src/jni/videodecoderwrapper.h",
"src/jni/videoencoderfactorywrapper.cc",
"src/jni/videoencoderfactorywrapper.h",
"src/jni/videoencoderfallback.cc",
"src/jni/videoencoderwrapper.cc",
"src/jni/videoencoderwrapper.h",
"src/jni/videofilerenderer_jni.cc",
@ -491,6 +492,7 @@ rtc_android_library("libjingle_peerconnection_java") {
"api/org/webrtc/VideoDecoderFallback.java",
"api/org/webrtc/VideoEncoder.java",
"api/org/webrtc/VideoEncoderFactory.java",
"api/org/webrtc/VideoEncoderFallback.java",
"api/org/webrtc/VideoFileRenderer.java",
"api/org/webrtc/VideoFrame.java",
"api/org/webrtc/VideoFrameDrawer.java",

View file

@ -0,0 +1,22 @@
/*
* Copyright 2017 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.
*/
package org.webrtc;
/**
* A combined video encoder that falls back on a secondary encoder if the primary encoder fails.
*/
public class VideoEncoderFallback extends WrappedNativeVideoEncoder {
public VideoEncoderFallback(VideoEncoder fallback, VideoEncoder primary) {
super(createNativeEncoder(fallback, primary));
}
private static native long createNativeEncoder(VideoEncoder fallback, VideoEncoder primary);
}

View file

@ -35,7 +35,7 @@ std::unique_ptr<VideoDecoder> VideoDecoderFactoryWrapper::CreateVideoDecoder(
jstring name = JavaStringFromStdString(jni, format.name);
jobject decoder =
jni->CallObjectMethod(*decoder_factory_, create_decoder_method_, name);
return decoder != nullptr ? WrapOrUnwrapVideoDecoder(jni, decoder) : nullptr;
return decoder != nullptr ? JavaToNativeVideoDecoder(jni, decoder) : nullptr;
}
std::vector<SdpVideoFormat> VideoDecoderFactoryWrapper::GetSupportedFormats()

View file

@ -24,9 +24,9 @@ JNI_FUNCTION_DECLARATION(jlong,
jobject j_fallback_decoder,
jobject j_primary_decoder) {
std::unique_ptr<VideoDecoder> fallback_decoder =
WrapOrUnwrapVideoDecoder(jni, j_fallback_decoder);
JavaToNativeVideoDecoder(jni, j_fallback_decoder);
std::unique_ptr<VideoDecoder> primary_decoder =
WrapOrUnwrapVideoDecoder(jni, j_primary_decoder);
JavaToNativeVideoDecoder(jni, j_primary_decoder);
VideoDecoderSoftwareFallbackWrapper* nativeWrapper =
new VideoDecoderSoftwareFallbackWrapper(std::move(fallback_decoder),

View file

@ -41,7 +41,7 @@ std::unique_ptr<VideoEncoder> VideoEncoderFactoryWrapper::CreateVideoEncoder(
jobject j_codec_info = SdpVideoFormatToVideoCodecInfo(jni, format);
jobject encoder = jni->CallObjectMethod(*encoder_factory_,
create_encoder_method_, j_codec_info);
return encoder != nullptr ? WrapOrUnwrapVideoEncoder(jni, encoder) : nullptr;
return encoder != nullptr ? JavaToNativeVideoEncoder(jni, encoder) : nullptr;
}
VideoEncoderFactory::CodecInfo VideoEncoderFactoryWrapper::QueryVideoEncoder(

View file

@ -0,0 +1,39 @@
/*
* Copyright 2017 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 <jni.h>
#include "media/engine/videoencodersoftwarefallbackwrapper.h"
#include "sdk/android/src/jni/jni_helpers.h"
#include "sdk/android/src/jni/wrappednativecodec.h"
namespace webrtc {
namespace jni {
JNI_FUNCTION_DECLARATION(jlong,
VideoEncoderFallback_createNativeEncoder,
JNIEnv* jni,
jclass,
jobject j_fallback_encoder,
jobject j_primary_encoder) {
std::unique_ptr<VideoEncoder> fallback_encoder =
JavaToNativeVideoEncoder(jni, j_fallback_encoder);
std::unique_ptr<VideoEncoder> primary_encoder =
JavaToNativeVideoEncoder(jni, j_primary_encoder);
VideoEncoderSoftwareFallbackWrapper* nativeWrapper =
new VideoEncoderSoftwareFallbackWrapper(std::move(fallback_encoder),
std::move(primary_encoder));
return jlongFromPointer(nativeWrapper);
}
} // namespace jni
} // namespace webrtc

View file

@ -20,7 +20,7 @@
namespace webrtc {
namespace jni {
std::unique_ptr<VideoDecoder> WrapOrUnwrapVideoDecoder(JNIEnv* jni,
std::unique_ptr<VideoDecoder> JavaToNativeVideoDecoder(JNIEnv* jni,
jobject j_decoder) {
jclass wrapped_native_decoder_class =
GetClass(jni, "org/webrtc/WrappedNativeVideoDecoder");
@ -37,7 +37,7 @@ std::unique_ptr<VideoDecoder> WrapOrUnwrapVideoDecoder(JNIEnv* jni,
return std::unique_ptr<VideoDecoder>(decoder);
}
std::unique_ptr<VideoEncoder> WrapOrUnwrapVideoEncoder(JNIEnv* jni,
std::unique_ptr<VideoEncoder> JavaToNativeVideoEncoder(JNIEnv* jni,
jobject j_encoder) {
jclass wrapped_native_encoder_class =
GetClass(jni, "org/webrtc/WrappedNativeVideoEncoder");

View file

@ -23,13 +23,13 @@ namespace jni {
/* If the j_decoder is a wrapped native decoder, unwrap it. If it is not,
* wrap it in a VideoDecoderWrapper.
*/
std::unique_ptr<VideoDecoder> WrapOrUnwrapVideoDecoder(JNIEnv* jni,
std::unique_ptr<VideoDecoder> JavaToNativeVideoDecoder(JNIEnv* jni,
jobject j_decoder);
/* If the j_encoder is a wrapped native encoder, unwrap it. If it is not,
* wrap it in a VideoEncoderWrapper.
*/
std::unique_ptr<VideoEncoder> WrapOrUnwrapVideoEncoder(JNIEnv* jni,
std::unique_ptr<VideoEncoder> JavaToNativeVideoEncoder(JNIEnv* jni,
jobject j_encoder);
} // namespace jni