Allow passing in decoder factory to PeerConnectionFactory.
Bug: webrtc:7760 Change-Id: I8509de8f0170f1f60f917992b5806b926a8bb392 Reviewed-on: https://chromium-review.googlesource.com/535561 Reviewed-by: Magnus Jedvert <magjed@webrtc.org> Commit-Queue: Sami Kalliomäki <sakal@webrtc.org> Cr-Commit-Position: refs/heads/master@{#18787}
This commit is contained in:
committed by
Commit Bot
parent
8179a7cf97
commit
471f63559f
@ -12,11 +12,15 @@
|
||||
|
||||
namespace webrtc_jni {
|
||||
|
||||
cricket::WebRtcVideoEncoderFactory* CreateVideoEncoderFactory() {
|
||||
cricket::WebRtcVideoEncoderFactory* CreateVideoEncoderFactory(
|
||||
JNIEnv* jni,
|
||||
jobject j_encoder_factory) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
cricket::WebRtcVideoDecoderFactory* CreateVideoDecoderFactory() {
|
||||
cricket::WebRtcVideoDecoderFactory* CreateVideoDecoderFactory(
|
||||
JNIEnv* jni,
|
||||
jobject j_decoder_factory) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
|
||||
@ -1121,8 +1121,12 @@ PeerConnectionFactoryInterface::Options ParseOptionsFromJava(JNIEnv* jni,
|
||||
return native_options;
|
||||
}
|
||||
|
||||
JOW(jlong, PeerConnectionFactory_nativeCreatePeerConnectionFactory)(
|
||||
JNIEnv* jni, jclass, jobject joptions) {
|
||||
JOW(jlong, PeerConnectionFactory_nativeCreatePeerConnectionFactory)
|
||||
(JNIEnv* jni,
|
||||
jclass,
|
||||
jobject joptions,
|
||||
jobject jencoder_factory,
|
||||
jobject jdecoder_factory) {
|
||||
// talk/ assumes pretty widely that the current Thread is ThreadManager'd, but
|
||||
// ThreadManager only WrapCurrentThread()s the thread where it is first
|
||||
// created. Since the semantics around when auto-wrapping happens in
|
||||
@ -1157,8 +1161,8 @@ JOW(jlong, PeerConnectionFactory_nativeCreatePeerConnectionFactory)(
|
||||
}
|
||||
|
||||
if (video_hw_acceleration_enabled) {
|
||||
video_encoder_factory = CreateVideoEncoderFactory();
|
||||
video_decoder_factory = CreateVideoDecoderFactory();
|
||||
video_encoder_factory = CreateVideoEncoderFactory(jni, jencoder_factory);
|
||||
video_decoder_factory = CreateVideoDecoderFactory(jni, jdecoder_factory);
|
||||
}
|
||||
// Do not create network_monitor_factory only if the options are
|
||||
// provided and disable_network_monitor therein is set to true.
|
||||
|
||||
@ -20,15 +20,34 @@
|
||||
#include "webrtc/sdk/android/src/jni/classreferenceholder.h"
|
||||
#include "webrtc/sdk/android/src/jni/ownedfactoryandthreads.h"
|
||||
#include "webrtc/sdk/android/src/jni/surfacetexturehelper_jni.h"
|
||||
#include "webrtc/sdk/android/src/jni/videodecoderfactorywrapper.h"
|
||||
|
||||
namespace webrtc_jni {
|
||||
|
||||
cricket::WebRtcVideoEncoderFactory* CreateVideoEncoderFactory() {
|
||||
// TODO(sakal): Remove this once MediaCodecVideoDecoder/Encoder are no longer
|
||||
// used and all applications inject their own codecs.
|
||||
// This is semi broken if someone wants to create multiple peerconnection
|
||||
// factories.
|
||||
static MediaCodecVideoDecoderFactory* media_codec_decoder_factory;
|
||||
|
||||
cricket::WebRtcVideoEncoderFactory* CreateVideoEncoderFactory(
|
||||
JNIEnv* jni,
|
||||
jobject j_encoder_factory) {
|
||||
RTC_DCHECK(j_encoder_factory == nullptr)
|
||||
<< "Injectable video encoders are not supported yet.";
|
||||
return new MediaCodecVideoEncoderFactory();
|
||||
}
|
||||
|
||||
cricket::WebRtcVideoDecoderFactory* CreateVideoDecoderFactory() {
|
||||
return new MediaCodecVideoDecoderFactory();
|
||||
cricket::WebRtcVideoDecoderFactory* CreateVideoDecoderFactory(
|
||||
JNIEnv* jni,
|
||||
jobject j_decoder_factory) {
|
||||
if (j_decoder_factory != nullptr) {
|
||||
media_codec_decoder_factory = nullptr;
|
||||
return new VideoDecoderFactoryWrapper(jni, j_decoder_factory);
|
||||
} else {
|
||||
media_codec_decoder_factory = new MediaCodecVideoDecoderFactory();
|
||||
return media_codec_decoder_factory;
|
||||
}
|
||||
}
|
||||
|
||||
jobject GetJavaSurfaceTextureHelper(
|
||||
@ -90,12 +109,9 @@ JOW(void, PeerConnectionFactory_nativeSetVideoHwAccelerationOptions)
|
||||
encoder_factory->SetEGLContext(jni, local_egl_context);
|
||||
}
|
||||
|
||||
MediaCodecVideoDecoderFactory* decoder_factory =
|
||||
static_cast<MediaCodecVideoDecoderFactory*>(
|
||||
owned_factory->decoder_factory());
|
||||
if (decoder_factory) {
|
||||
if (media_codec_decoder_factory) {
|
||||
LOG(LS_INFO) << "Set EGL context for HW decoding.";
|
||||
decoder_factory->SetEGLContext(jni, remote_egl_context);
|
||||
media_codec_decoder_factory->SetEGLContext(jni, remote_egl_context);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -24,9 +24,13 @@ namespace webrtc_jni {
|
||||
|
||||
class SurfaceTextureHelper;
|
||||
|
||||
cricket::WebRtcVideoEncoderFactory* CreateVideoEncoderFactory();
|
||||
cricket::WebRtcVideoEncoderFactory* CreateVideoEncoderFactory(
|
||||
JNIEnv* jni,
|
||||
jobject j_encoder_factory);
|
||||
|
||||
cricket::WebRtcVideoDecoderFactory* CreateVideoDecoderFactory();
|
||||
cricket::WebRtcVideoDecoderFactory* CreateVideoDecoderFactory(
|
||||
JNIEnv* jni,
|
||||
jobject j_decoder_factory);
|
||||
|
||||
jobject GetJavaSurfaceTextureHelper(
|
||||
const rtc::scoped_refptr<SurfaceTextureHelper>& surface_texture_helper);
|
||||
|
||||
Reference in New Issue
Block a user