mirror of
https://github.com/mollyim/webrtc.git
synced 2025-05-17 15:47:53 +01:00
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:
parent
7dad255ce1
commit
c3fedccf01
8 changed files with 71 additions and 8 deletions
|
@ -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",
|
||||
|
|
22
sdk/android/api/org/webrtc/VideoEncoderFallback.java
Normal file
22
sdk/android/api/org/webrtc/VideoEncoderFallback.java
Normal 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);
|
||||
}
|
|
@ -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()
|
||||
|
|
|
@ -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),
|
||||
|
|
|
@ -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(
|
||||
|
|
39
sdk/android/src/jni/videoencoderfallback.cc
Normal file
39
sdk/android/src/jni/videoencoderfallback.cc
Normal 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
|
|
@ -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");
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue