| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2015 The WebRTC project authors. All Rights Reserved. | 2 * Copyright 2015 The WebRTC project authors. All Rights Reserved. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license | 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 | 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 | 6 * tree. An additional intellectual property rights grant can be found |
| 7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
| 8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
| 9 */ | 9 */ |
| 10 | 10 |
| (...skipping 357 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 368 | 368 |
| 369 jobject j_i420_buffer = | 369 jobject j_i420_buffer = |
| 370 jni->CallObjectMethod(*j_video_frame_buffer_, j_to_i420_id); | 370 jni->CallObjectMethod(*j_video_frame_buffer_, j_to_i420_id); |
| 371 | 371 |
| 372 // We don't need to retain the buffer because toI420 returns a new object that | 372 // We don't need to retain the buffer because toI420 returns a new object that |
| 373 // we are assumed to take the ownership of. | 373 // we are assumed to take the ownership of. |
| 374 return AndroidVideoI420Buffer::WrapReference(jni, j_release_id_, width_, | 374 return AndroidVideoI420Buffer::WrapReference(jni, j_release_id_, width_, |
| 375 height_, j_i420_buffer); | 375 height_, j_i420_buffer); |
| 376 } | 376 } |
| 377 | 377 |
| 378 jobject AndroidVideoBuffer::ToJavaI420Frame(JNIEnv* jni, | 378 jobject AndroidVideoBuffer::ToJavaI420Frame(JNIEnv* jni, int rotation) { |
| 379 int rotation) { | |
| 380 jclass j_byte_buffer_class = jni->FindClass("java/nio/ByteBuffer"); | 379 jclass j_byte_buffer_class = jni->FindClass("java/nio/ByteBuffer"); |
| 381 jclass j_i420_frame_class = | 380 jclass j_i420_frame_class = |
| 382 FindClass(jni, "org/webrtc/VideoRenderer$I420Frame"); | 381 FindClass(jni, "org/webrtc/VideoRenderer$I420Frame"); |
| 383 jmethodID j_i420_frame_ctor_id = GetMethodID( | 382 jmethodID j_i420_frame_ctor_id = GetMethodID( |
| 384 jni, j_i420_frame_class, "<init>", "(ILorg/webrtc/VideoFrame$Buffer;J)V"); | 383 jni, j_i420_frame_class, "<init>", "(ILorg/webrtc/VideoFrame$Buffer;J)V"); |
| 385 // Java code just uses the native frame to hold a reference to the buffer so | 384 // Java code just uses the native frame to hold a reference to the buffer so |
| 386 // this is okay. | 385 // this is okay. |
| 387 webrtc::VideoFrame* native_frame = new webrtc::VideoFrame( | 386 webrtc::VideoFrame* native_frame = new webrtc::VideoFrame( |
| 388 this, 0 /* timestamp */, 0 /* render_time_ms */, | 387 this, 0 /* timestamp */, 0 /* render_time_ms */, |
| 389 webrtc::VideoRotation::kVideoRotation_0 /* rotation */); | 388 webrtc::VideoRotation::kVideoRotation_0 /* rotation */); |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 431 | 430 |
| 432 rtc::scoped_refptr<AndroidVideoBuffer> AndroidVideoBufferFactory::CreateBuffer( | 431 rtc::scoped_refptr<AndroidVideoBuffer> AndroidVideoBufferFactory::CreateBuffer( |
| 433 jobject j_video_frame_buffer) const { | 432 jobject j_video_frame_buffer) const { |
| 434 JNIEnv* jni = AttachCurrentThreadIfNeeded(); | 433 JNIEnv* jni = AttachCurrentThreadIfNeeded(); |
| 435 int width = jni->CallIntMethod(j_video_frame_buffer, j_get_width_id_); | 434 int width = jni->CallIntMethod(j_video_frame_buffer, j_get_width_id_); |
| 436 int height = jni->CallIntMethod(j_video_frame_buffer, j_get_height_id_); | 435 int height = jni->CallIntMethod(j_video_frame_buffer, j_get_height_id_); |
| 437 return new rtc::RefCountedObject<AndroidVideoBuffer>( | 436 return new rtc::RefCountedObject<AndroidVideoBuffer>( |
| 438 jni, j_retain_id_, j_release_id_, width, height, j_video_frame_buffer); | 437 jni, j_retain_id_, j_release_id_, width, height, j_video_frame_buffer); |
| 439 } | 438 } |
| 440 | 439 |
| 440 JavaVideoFrameFactory::JavaVideoFrameFactory(JNIEnv* jni) |
| 441 : j_video_frame_class_(jni, FindClass(jni, "org/webrtc/VideoFrame")) { |
| 442 j_video_frame_constructor_id_ = |
| 443 GetMethodID(jni, *j_video_frame_class_, "<init>", |
| 444 "(Lorg/webrtc/VideoFrame$Buffer;IJ)V"); |
| 445 } |
| 446 |
| 447 jobject JavaVideoFrameFactory::ToJavaFrame( |
| 448 JNIEnv* jni, |
| 449 const webrtc::VideoFrame& frame) const { |
| 450 RTC_DCHECK(frame.video_frame_buffer()->type() == |
| 451 webrtc::VideoFrameBuffer::Type::kNative); |
| 452 AndroidVideoFrameBuffer* android_buffer = |
| 453 static_cast<AndroidVideoFrameBuffer*>(frame.video_frame_buffer().get()); |
| 454 RTC_DCHECK(android_buffer->android_type() == |
| 455 AndroidVideoFrameBuffer::AndroidType::kJavaBuffer); |
| 456 AndroidVideoBuffer* android_video_buffer = |
| 457 static_cast<AndroidVideoBuffer*>(android_buffer); |
| 458 jobject buffer = android_video_buffer->video_frame_buffer(); |
| 459 return jni->NewObject( |
| 460 *j_video_frame_class_, j_video_frame_constructor_id_, buffer, |
| 461 static_cast<jint>(frame.rotation()), |
| 462 static_cast<jlong>(frame.timestamp_us() * rtc::kNumNanosecsPerMicrosec)); |
| 463 } |
| 464 |
| 441 } // namespace webrtc_jni | 465 } // namespace webrtc_jni |
| OLD | NEW |