OLD | NEW |
1 /* | 1 /* |
2 * libjingle | 2 * libjingle |
3 * Copyright 2013 Google Inc. | 3 * Copyright 2013 Google Inc. |
4 * | 4 * |
5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
6 * modification, are permitted provided that the following conditions are met: | 6 * modification, are permitted provided that the following conditions are met: |
7 * | 7 * |
8 * 1. Redistributions of source code must retain the above copyright notice, | 8 * 1. Redistributions of source code must retain the above copyright notice, |
9 * this list of conditions and the following disclaimer. | 9 * this list of conditions and the following disclaimer. |
10 * 2. Redistributions in binary form must reproduce the above copyright notice, | 10 * 2. Redistributions in binary form must reproduce the above copyright notice, |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
57 #define JNIEXPORT __attribute__((visibility("default"))) | 57 #define JNIEXPORT __attribute__((visibility("default"))) |
58 | 58 |
59 #include <limits> | 59 #include <limits> |
60 | 60 |
61 #include "talk/app/webrtc/java/jni/classreferenceholder.h" | 61 #include "talk/app/webrtc/java/jni/classreferenceholder.h" |
62 #include "talk/app/webrtc/java/jni/jni_helpers.h" | 62 #include "talk/app/webrtc/java/jni/jni_helpers.h" |
63 #include "talk/app/webrtc/java/jni/native_handle_impl.h" | 63 #include "talk/app/webrtc/java/jni/native_handle_impl.h" |
64 #include "talk/app/webrtc/dtlsidentitystore.h" | 64 #include "talk/app/webrtc/dtlsidentitystore.h" |
65 #include "talk/app/webrtc/mediaconstraintsinterface.h" | 65 #include "talk/app/webrtc/mediaconstraintsinterface.h" |
66 #include "talk/app/webrtc/peerconnectioninterface.h" | 66 #include "talk/app/webrtc/peerconnectioninterface.h" |
| 67 #include "talk/app/webrtc/rtpreceiverinterface.h" |
| 68 #include "talk/app/webrtc/rtpsenderinterface.h" |
67 #include "talk/app/webrtc/videosourceinterface.h" | 69 #include "talk/app/webrtc/videosourceinterface.h" |
68 #include "talk/media/base/videocapturer.h" | 70 #include "talk/media/base/videocapturer.h" |
69 #include "talk/media/base/videorenderer.h" | 71 #include "talk/media/base/videorenderer.h" |
70 #include "talk/media/devices/videorendererfactory.h" | 72 #include "talk/media/devices/videorendererfactory.h" |
71 #include "talk/media/webrtc/webrtcvideodecoderfactory.h" | 73 #include "talk/media/webrtc/webrtcvideodecoderfactory.h" |
72 #include "talk/media/webrtc/webrtcvideoencoderfactory.h" | 74 #include "talk/media/webrtc/webrtcvideoencoderfactory.h" |
73 #include "webrtc/base/bind.h" | 75 #include "webrtc/base/bind.h" |
74 #include "webrtc/base/checks.h" | 76 #include "webrtc/base/checks.h" |
75 #include "webrtc/base/logging.h" | 77 #include "webrtc/base/logging.h" |
76 #include "webrtc/base/logsinks.h" | 78 #include "webrtc/base/logsinks.h" |
(...skipping 29 matching lines...) Expand all Loading... |
106 using webrtc::DataChannelInterface; | 108 using webrtc::DataChannelInterface; |
107 using webrtc::DataChannelObserver; | 109 using webrtc::DataChannelObserver; |
108 using webrtc::IceCandidateInterface; | 110 using webrtc::IceCandidateInterface; |
109 using webrtc::MediaConstraintsInterface; | 111 using webrtc::MediaConstraintsInterface; |
110 using webrtc::MediaSourceInterface; | 112 using webrtc::MediaSourceInterface; |
111 using webrtc::MediaStreamInterface; | 113 using webrtc::MediaStreamInterface; |
112 using webrtc::MediaStreamTrackInterface; | 114 using webrtc::MediaStreamTrackInterface; |
113 using webrtc::PeerConnectionFactoryInterface; | 115 using webrtc::PeerConnectionFactoryInterface; |
114 using webrtc::PeerConnectionInterface; | 116 using webrtc::PeerConnectionInterface; |
115 using webrtc::PeerConnectionObserver; | 117 using webrtc::PeerConnectionObserver; |
| 118 using webrtc::RtpReceiverInterface; |
| 119 using webrtc::RtpSenderInterface; |
116 using webrtc::SessionDescriptionInterface; | 120 using webrtc::SessionDescriptionInterface; |
117 using webrtc::SetSessionDescriptionObserver; | 121 using webrtc::SetSessionDescriptionObserver; |
118 using webrtc::StatsObserver; | 122 using webrtc::StatsObserver; |
119 using webrtc::StatsReport; | 123 using webrtc::StatsReport; |
120 using webrtc::StatsReports; | 124 using webrtc::StatsReports; |
121 using webrtc::VideoRendererInterface; | 125 using webrtc::VideoRendererInterface; |
122 using webrtc::VideoSourceInterface; | 126 using webrtc::VideoSourceInterface; |
123 using webrtc::VideoTrackInterface; | 127 using webrtc::VideoTrackInterface; |
124 using webrtc::VideoTrackVector; | 128 using webrtc::VideoTrackVector; |
125 using webrtc::kVideoCodecVP8; | 129 using webrtc::kVideoCodecVP8; |
(...skipping 838 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
964 JOW(void, VideoRenderer_freeWrappedVideoRenderer)(JNIEnv*, jclass, jlong j_p) { | 968 JOW(void, VideoRenderer_freeWrappedVideoRenderer)(JNIEnv*, jclass, jlong j_p) { |
965 delete reinterpret_cast<JavaVideoRendererWrapper*>(j_p); | 969 delete reinterpret_cast<JavaVideoRendererWrapper*>(j_p); |
966 } | 970 } |
967 | 971 |
968 JOW(void, VideoRenderer_releaseNativeFrame)( | 972 JOW(void, VideoRenderer_releaseNativeFrame)( |
969 JNIEnv* jni, jclass, jlong j_frame_ptr) { | 973 JNIEnv* jni, jclass, jlong j_frame_ptr) { |
970 delete reinterpret_cast<const cricket::VideoFrame*>(j_frame_ptr); | 974 delete reinterpret_cast<const cricket::VideoFrame*>(j_frame_ptr); |
971 } | 975 } |
972 | 976 |
973 JOW(void, MediaStreamTrack_free)(JNIEnv*, jclass, jlong j_p) { | 977 JOW(void, MediaStreamTrack_free)(JNIEnv*, jclass, jlong j_p) { |
974 CHECK_RELEASE(reinterpret_cast<MediaStreamTrackInterface*>(j_p)); | 978 reinterpret_cast<MediaStreamTrackInterface*>(j_p)->Release(); |
975 } | 979 } |
976 | 980 |
977 JOW(jboolean, MediaStream_nativeAddAudioTrack)( | 981 JOW(jboolean, MediaStream_nativeAddAudioTrack)( |
978 JNIEnv* jni, jclass, jlong pointer, jlong j_audio_track_pointer) { | 982 JNIEnv* jni, jclass, jlong pointer, jlong j_audio_track_pointer) { |
979 return reinterpret_cast<MediaStreamInterface*>(pointer)->AddTrack( | 983 return reinterpret_cast<MediaStreamInterface*>(pointer)->AddTrack( |
980 reinterpret_cast<AudioTrackInterface*>(j_audio_track_pointer)); | 984 reinterpret_cast<AudioTrackInterface*>(j_audio_track_pointer)); |
981 } | 985 } |
982 | 986 |
983 JOW(jboolean, MediaStream_nativeAddVideoTrack)( | 987 JOW(jboolean, MediaStream_nativeAddVideoTrack)( |
984 JNIEnv* jni, jclass, jlong pointer, jlong j_video_track_pointer) { | 988 JNIEnv* jni, jclass, jlong pointer, jlong j_video_track_pointer) { |
(...skipping 634 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1619 return ExtractNativePC(jni, j_pc)->AddStream( | 1623 return ExtractNativePC(jni, j_pc)->AddStream( |
1620 reinterpret_cast<MediaStreamInterface*>(native_stream)); | 1624 reinterpret_cast<MediaStreamInterface*>(native_stream)); |
1621 } | 1625 } |
1622 | 1626 |
1623 JOW(void, PeerConnection_nativeRemoveLocalStream)( | 1627 JOW(void, PeerConnection_nativeRemoveLocalStream)( |
1624 JNIEnv* jni, jobject j_pc, jlong native_stream) { | 1628 JNIEnv* jni, jobject j_pc, jlong native_stream) { |
1625 ExtractNativePC(jni, j_pc)->RemoveStream( | 1629 ExtractNativePC(jni, j_pc)->RemoveStream( |
1626 reinterpret_cast<MediaStreamInterface*>(native_stream)); | 1630 reinterpret_cast<MediaStreamInterface*>(native_stream)); |
1627 } | 1631 } |
1628 | 1632 |
| 1633 JOW(jobject, PeerConnection_nativeGetSenders)(JNIEnv* jni, jobject j_pc) { |
| 1634 jclass j_array_list_class = FindClass(jni, "java/util/ArrayList"); |
| 1635 jmethodID j_array_list_ctor = |
| 1636 GetMethodID(jni, j_array_list_class, "<init>", "()V"); |
| 1637 jmethodID j_array_list_add = |
| 1638 GetMethodID(jni, j_array_list_class, "add", "(Ljava/lang/Object;)Z"); |
| 1639 jobject j_senders = jni->NewObject(j_array_list_class, j_array_list_ctor); |
| 1640 CHECK_EXCEPTION(jni) << "error during NewObject"; |
| 1641 |
| 1642 jclass j_rtp_sender_class = FindClass(jni, "org/webrtc/RtpSender"); |
| 1643 jmethodID j_rtp_sender_ctor = |
| 1644 GetMethodID(jni, j_rtp_sender_class, "<init>", "(J)V"); |
| 1645 |
| 1646 auto senders = ExtractNativePC(jni, j_pc)->GetSenders(); |
| 1647 for (const auto& sender : senders) { |
| 1648 jlong nativeSenderPtr = jlongFromPointer(sender.get()); |
| 1649 jobject j_sender = |
| 1650 jni->NewObject(j_rtp_sender_class, j_rtp_sender_ctor, nativeSenderPtr); |
| 1651 CHECK_EXCEPTION(jni) << "error during NewObject"; |
| 1652 // Sender is now owned by Java object, and will be freed from there. |
| 1653 sender->AddRef(); |
| 1654 jni->CallBooleanMethod(j_senders, j_array_list_add, j_sender); |
| 1655 CHECK_EXCEPTION(jni) << "error during CallBooleanMethod"; |
| 1656 } |
| 1657 return j_senders; |
| 1658 } |
| 1659 |
| 1660 JOW(jobject, PeerConnection_nativeGetReceivers)(JNIEnv* jni, jobject j_pc) { |
| 1661 jclass j_array_list_class = FindClass(jni, "java/util/ArrayList"); |
| 1662 jmethodID j_array_list_ctor = |
| 1663 GetMethodID(jni, j_array_list_class, "<init>", "()V"); |
| 1664 jmethodID j_array_list_add = |
| 1665 GetMethodID(jni, j_array_list_class, "add", "(Ljava/lang/Object;)Z"); |
| 1666 jobject j_receivers = jni->NewObject(j_array_list_class, j_array_list_ctor); |
| 1667 CHECK_EXCEPTION(jni) << "error during NewObject"; |
| 1668 |
| 1669 jclass j_rtp_receiver_class = FindClass(jni, "org/webrtc/RtpReceiver"); |
| 1670 jmethodID j_rtp_receiver_ctor = |
| 1671 GetMethodID(jni, j_rtp_receiver_class, "<init>", "(J)V"); |
| 1672 |
| 1673 auto receivers = ExtractNativePC(jni, j_pc)->GetReceivers(); |
| 1674 for (const auto& receiver : receivers) { |
| 1675 jlong nativeReceiverPtr = jlongFromPointer(receiver.get()); |
| 1676 jobject j_receiver = jni->NewObject(j_rtp_receiver_class, |
| 1677 j_rtp_receiver_ctor, nativeReceiverPtr); |
| 1678 CHECK_EXCEPTION(jni) << "error during NewObject"; |
| 1679 // Receiver is now owned by Java object, and will be freed from there. |
| 1680 receiver->AddRef(); |
| 1681 jni->CallBooleanMethod(j_receivers, j_array_list_add, j_receiver); |
| 1682 CHECK_EXCEPTION(jni) << "error during CallBooleanMethod"; |
| 1683 } |
| 1684 return j_receivers; |
| 1685 } |
| 1686 |
1629 JOW(bool, PeerConnection_nativeGetStats)( | 1687 JOW(bool, PeerConnection_nativeGetStats)( |
1630 JNIEnv* jni, jobject j_pc, jobject j_observer, jlong native_track) { | 1688 JNIEnv* jni, jobject j_pc, jobject j_observer, jlong native_track) { |
1631 rtc::scoped_refptr<StatsObserverWrapper> observer( | 1689 rtc::scoped_refptr<StatsObserverWrapper> observer( |
1632 new rtc::RefCountedObject<StatsObserverWrapper>(jni, j_observer)); | 1690 new rtc::RefCountedObject<StatsObserverWrapper>(jni, j_observer)); |
1633 return ExtractNativePC(jni, j_pc)->GetStats( | 1691 return ExtractNativePC(jni, j_pc)->GetStats( |
1634 observer, | 1692 observer, |
1635 reinterpret_cast<MediaStreamTrackInterface*>(native_track), | 1693 reinterpret_cast<MediaStreamTrackInterface*>(native_track), |
1636 PeerConnectionInterface::kStatsOutputLevelStandard); | 1694 PeerConnectionInterface::kStatsOutputLevelStandard); |
1637 } | 1695 } |
1638 | 1696 |
(...skipping 225 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1864 size_t read = 0; | 1922 size_t read = 0; |
1865 rtc::scoped_ptr<jbyte> buffer(static_cast<jbyte*>(malloc(log_size))); | 1923 rtc::scoped_ptr<jbyte> buffer(static_cast<jbyte*>(malloc(log_size))); |
1866 stream->ReadAll(buffer.get(), log_size, &read, nullptr); | 1924 stream->ReadAll(buffer.get(), log_size, &read, nullptr); |
1867 | 1925 |
1868 jbyteArray result = jni->NewByteArray(read); | 1926 jbyteArray result = jni->NewByteArray(read); |
1869 jni->SetByteArrayRegion(result, 0, read, buffer.get()); | 1927 jni->SetByteArrayRegion(result, 0, read, buffer.get()); |
1870 | 1928 |
1871 return result; | 1929 return result; |
1872 } | 1930 } |
1873 | 1931 |
| 1932 JOW(void, RtpSender_nativeSetTrack)(JNIEnv* jni, |
| 1933 jclass, |
| 1934 jlong j_rtp_sender_pointer, |
| 1935 jlong j_track_pointer) { |
| 1936 reinterpret_cast<RtpSenderInterface*>(j_rtp_sender_pointer) |
| 1937 ->SetTrack(reinterpret_cast<MediaStreamTrackInterface*>(j_track_pointer)); |
| 1938 } |
| 1939 |
| 1940 JOW(jlong, RtpSender_nativeGetTrack)(JNIEnv* jni, |
| 1941 jclass, |
| 1942 jlong j_rtp_sender_pointer, |
| 1943 jlong j_track_pointer) { |
| 1944 return jlongFromPointer( |
| 1945 reinterpret_cast<RtpSenderInterface*>(j_rtp_sender_pointer) |
| 1946 ->track() |
| 1947 .release()); |
| 1948 } |
| 1949 |
| 1950 JOW(jstring, RtpSender_nativeId)( |
| 1951 JNIEnv* jni, jclass, jlong j_rtp_sender_pointer) { |
| 1952 return JavaStringFromStdString( |
| 1953 jni, reinterpret_cast<RtpSenderInterface*>(j_rtp_sender_pointer)->id()); |
| 1954 } |
| 1955 |
| 1956 JOW(void, RtpSender_free)(JNIEnv* jni, jclass, jlong j_rtp_sender_pointer) { |
| 1957 reinterpret_cast<RtpSenderInterface*>(j_rtp_sender_pointer)->Release(); |
| 1958 } |
| 1959 |
| 1960 JOW(jlong, RtpReceiver_nativeGetTrack)(JNIEnv* jni, |
| 1961 jclass, |
| 1962 jlong j_rtp_receiver_pointer, |
| 1963 jlong j_track_pointer) { |
| 1964 return jlongFromPointer( |
| 1965 reinterpret_cast<RtpReceiverInterface*>(j_rtp_receiver_pointer) |
| 1966 ->track() |
| 1967 .release()); |
| 1968 } |
| 1969 |
| 1970 JOW(jstring, RtpReceiver_nativeId)( |
| 1971 JNIEnv* jni, jclass, jlong j_rtp_receiver_pointer) { |
| 1972 return JavaStringFromStdString( |
| 1973 jni, |
| 1974 reinterpret_cast<RtpReceiverInterface*>(j_rtp_receiver_pointer)->id()); |
| 1975 } |
| 1976 |
| 1977 JOW(void, RtpReceiver_free)(JNIEnv* jni, jclass, jlong j_rtp_receiver_pointer) { |
| 1978 reinterpret_cast<RtpReceiverInterface*>(j_rtp_receiver_pointer)->Release(); |
| 1979 } |
| 1980 |
1874 } // namespace webrtc_jni | 1981 } // namespace webrtc_jni |
OLD | NEW |