blob: 3cdaf7c623524952148021c00ad17f13c31833ce [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
23std::unique_ptr<VideoDecoder> WrapOrUnwrapVideoDecoder(JNIEnv* jni,
24 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 =
31 Java_WrappedNativeVideoDecoder_getNativeDecoder(jni, j_decoder);
32 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
40std::unique_ptr<VideoEncoder> WrapOrUnwrapVideoEncoder(JNIEnv* jni,
41 jobject j_encoder) {
42 jclass wrapped_native_encoder_class =
43 GetClass(jni, "org/webrtc/WrappedNativeVideoEncoder");
44
45 VideoEncoder* encoder;
46 if (jni->IsInstanceOf(j_encoder, wrapped_native_encoder_class)) {
47 jlong native_encoder =
48 Java_WrappedNativeVideoEncoder_getNativeEncoder(jni, j_encoder);
49 encoder = reinterpret_cast<VideoEncoder*>(native_encoder);
50 } else {
51 encoder = new VideoEncoderWrapper(jni, j_encoder);
52 }
53
54 return std::unique_ptr<VideoEncoder>(encoder);
55}
56
57} // namespace jni
58} // namespace webrtc