blob: 27a8977a683488c682e14038d91f513ff92bfc6e [file] [log] [blame]
Anders Carlssondc1b9f12017-11-10 13:15:04 +01001/*
2 * Copyright 2017 The WebRTC project authors. All Rights Reserved.
3 *
4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree.
9 */
10
11#include "sdk/android/src/jni/wrappednativecodec.h"
12
13#include "sdk/android/generated_video_jni/jni/WrappedNativeVideoDecoder_jni.h"
14#include "sdk/android/generated_video_jni/jni/WrappedNativeVideoEncoder_jni.h"
15#include "sdk/android/src/jni/class_loader.h"
16#include "sdk/android/src/jni/jni_helpers.h"
17#include "sdk/android/src/jni/videodecoderwrapper.h"
18#include "sdk/android/src/jni/videoencoderwrapper.h"
19
20namespace webrtc {
21namespace jni {
22
Anders Carlssonc3fedcc2017-11-15 14:36:33 +010023std::unique_ptr<VideoDecoder> JavaToNativeVideoDecoder(JNIEnv* jni,
Anders Carlssondc1b9f12017-11-10 13:15:04 +010024 jobject j_decoder) {
25 jclass wrapped_native_decoder_class =
26 GetClass(jni, "org/webrtc/WrappedNativeVideoDecoder");
27
28 VideoDecoder* decoder;
29 if (jni->IsInstanceOf(j_decoder, wrapped_native_decoder_class)) {
30 jlong native_decoder =
Sami Kalliomäkiaea1d1a2017-11-23 14:42:21 +010031 Java_WrappedNativeVideoDecoder_createNativeDecoder(jni, j_decoder);
Anders Carlssondc1b9f12017-11-10 13:15:04 +010032 decoder = reinterpret_cast<VideoDecoder*>(native_decoder);
33 } else {
34 decoder = new VideoDecoderWrapper(jni, j_decoder);
35 }
36
37 return std::unique_ptr<VideoDecoder>(decoder);
38}
39
Anders Carlssonc3fedcc2017-11-15 14:36:33 +010040std::unique_ptr<VideoEncoder> JavaToNativeVideoEncoder(JNIEnv* jni,
Anders Carlssondc1b9f12017-11-10 13:15:04 +010041 jobject j_encoder) {
Anders Carlssondc1b9f12017-11-10 13:15:04 +010042 VideoEncoder* encoder;
Sami Kalliomäkiaea1d1a2017-11-23 14:42:21 +010043 if (Java_WrappedNativeVideoEncoder_isInstanceOf(jni, j_encoder)) {
Anders Carlssondc1b9f12017-11-10 13:15:04 +010044 jlong native_encoder =
Sami Kalliomäkiaea1d1a2017-11-23 14:42:21 +010045 Java_WrappedNativeVideoEncoder_createNativeEncoder(jni, j_encoder);
Anders Carlssondc1b9f12017-11-10 13:15:04 +010046 encoder = reinterpret_cast<VideoEncoder*>(native_encoder);
47 } else {
48 encoder = new VideoEncoderWrapper(jni, j_encoder);
49 }
50
51 return std::unique_ptr<VideoEncoder>(encoder);
52}
53
Sami Kalliomäki6196feb2017-11-24 11:00:04 +010054bool IsWrappedSoftwareEncoder(JNIEnv* jni, jobject j_encoder) {
55 return Java_WrappedNativeVideoEncoder_isWrappedSoftwareEncoder(jni,
56 j_encoder);
57}
58
Anders Carlssondc1b9f12017-11-10 13:15:04 +010059} // namespace jni
60} // namespace webrtc