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::RtpReceiverRefptrs; |
| 120 using webrtc::RtpSenderInterface; |
| 121 using webrtc::RtpSenderRefptrs; |
116 using webrtc::SessionDescriptionInterface; | 122 using webrtc::SessionDescriptionInterface; |
117 using webrtc::SetSessionDescriptionObserver; | 123 using webrtc::SetSessionDescriptionObserver; |
118 using webrtc::StatsObserver; | 124 using webrtc::StatsObserver; |
119 using webrtc::StatsReport; | 125 using webrtc::StatsReport; |
120 using webrtc::StatsReports; | 126 using webrtc::StatsReports; |
121 using webrtc::VideoRendererInterface; | 127 using webrtc::VideoRendererInterface; |
122 using webrtc::VideoSourceInterface; | 128 using webrtc::VideoSourceInterface; |
123 using webrtc::VideoTrackInterface; | 129 using webrtc::VideoTrackInterface; |
124 using webrtc::VideoTrackVector; | 130 using webrtc::VideoTrackVector; |
125 using webrtc::kVideoCodecVP8; | 131 using webrtc::kVideoCodecVP8; |
(...skipping 832 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
958 JOW(void, VideoRenderer_freeWrappedVideoRenderer)(JNIEnv*, jclass, jlong j_p) { | 964 JOW(void, VideoRenderer_freeWrappedVideoRenderer)(JNIEnv*, jclass, jlong j_p) { |
959 delete reinterpret_cast<JavaVideoRendererWrapper*>(j_p); | 965 delete reinterpret_cast<JavaVideoRendererWrapper*>(j_p); |
960 } | 966 } |
961 | 967 |
962 JOW(void, VideoRenderer_releaseNativeFrame)( | 968 JOW(void, VideoRenderer_releaseNativeFrame)( |
963 JNIEnv* jni, jclass, jlong j_frame_ptr) { | 969 JNIEnv* jni, jclass, jlong j_frame_ptr) { |
964 delete reinterpret_cast<const cricket::VideoFrame*>(j_frame_ptr); | 970 delete reinterpret_cast<const cricket::VideoFrame*>(j_frame_ptr); |
965 } | 971 } |
966 | 972 |
967 JOW(void, MediaStreamTrack_free)(JNIEnv*, jclass, jlong j_p) { | 973 JOW(void, MediaStreamTrack_free)(JNIEnv*, jclass, jlong j_p) { |
968 CHECK_RELEASE(reinterpret_cast<MediaStreamTrackInterface*>(j_p)); | 974 reinterpret_cast<MediaStreamTrackInterface*>(j_p)->Release(); |
969 } | 975 } |
970 | 976 |
971 JOW(jboolean, MediaStream_nativeAddAudioTrack)( | 977 JOW(jboolean, MediaStream_nativeAddAudioTrack)( |
972 JNIEnv* jni, jclass, jlong pointer, jlong j_audio_track_pointer) { | 978 JNIEnv* jni, jclass, jlong pointer, jlong j_audio_track_pointer) { |
973 return reinterpret_cast<MediaStreamInterface*>(pointer)->AddTrack( | 979 return reinterpret_cast<MediaStreamInterface*>(pointer)->AddTrack( |
974 reinterpret_cast<AudioTrackInterface*>(j_audio_track_pointer)); | 980 reinterpret_cast<AudioTrackInterface*>(j_audio_track_pointer)); |
975 } | 981 } |
976 | 982 |
977 JOW(jboolean, MediaStream_nativeAddVideoTrack)( | 983 JOW(jboolean, MediaStream_nativeAddVideoTrack)( |
978 JNIEnv* jni, jclass, jlong pointer, jlong j_video_track_pointer) { | 984 JNIEnv* jni, jclass, jlong pointer, jlong j_video_track_pointer) { |
(...skipping 548 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1527 | 1533 |
1528 jfieldID j_description_id = GetFieldID( | 1534 jfieldID j_description_id = GetFieldID( |
1529 jni, GetObjectClass(jni, j_sdp), "description", "Ljava/lang/String;"); | 1535 jni, GetObjectClass(jni, j_sdp), "description", "Ljava/lang/String;"); |
1530 jstring j_description = (jstring)GetObjectField(jni, j_sdp, j_description_id); | 1536 jstring j_description = (jstring)GetObjectField(jni, j_sdp, j_description_id); |
1531 std::string std_description = JavaToStdString(jni, j_description); | 1537 std::string std_description = JavaToStdString(jni, j_description); |
1532 | 1538 |
1533 return webrtc::CreateSessionDescription( | 1539 return webrtc::CreateSessionDescription( |
1534 std_type, std_description, NULL); | 1540 std_type, std_description, NULL); |
1535 } | 1541 } |
1536 | 1542 |
1537 JOW(void, PeerConnection_setLocalDescription)( | 1543 JOW(void, PeerConnection_nativeSetLocalDescription)( |
1538 JNIEnv* jni, jobject j_pc, | 1544 JNIEnv* jni, jobject j_pc, |
1539 jobject j_observer, jobject j_sdp) { | 1545 jobject j_observer, jobject j_sdp) { |
1540 rtc::scoped_refptr<SetSdpObserverWrapper> observer( | 1546 rtc::scoped_refptr<SetSdpObserverWrapper> observer( |
1541 new rtc::RefCountedObject<SetSdpObserverWrapper>( | 1547 new rtc::RefCountedObject<SetSdpObserverWrapper>( |
1542 jni, j_observer, reinterpret_cast<ConstraintsWrapper*>(NULL))); | 1548 jni, j_observer, reinterpret_cast<ConstraintsWrapper*>(NULL))); |
1543 ExtractNativePC(jni, j_pc)->SetLocalDescription( | 1549 ExtractNativePC(jni, j_pc)->SetLocalDescription( |
1544 observer, JavaSdpToNativeSdp(jni, j_sdp)); | 1550 observer, JavaSdpToNativeSdp(jni, j_sdp)); |
1545 } | 1551 } |
1546 | 1552 |
1547 JOW(void, PeerConnection_setRemoteDescription)( | 1553 JOW(void, PeerConnection_nativeSetRemoteDescription)( |
1548 JNIEnv* jni, jobject j_pc, | 1554 JNIEnv* jni, jobject j_pc, |
1549 jobject j_observer, jobject j_sdp) { | 1555 jobject j_observer, jobject j_sdp) { |
1550 rtc::scoped_refptr<SetSdpObserverWrapper> observer( | 1556 rtc::scoped_refptr<SetSdpObserverWrapper> observer( |
1551 new rtc::RefCountedObject<SetSdpObserverWrapper>( | 1557 new rtc::RefCountedObject<SetSdpObserverWrapper>( |
1552 jni, j_observer, reinterpret_cast<ConstraintsWrapper*>(NULL))); | 1558 jni, j_observer, reinterpret_cast<ConstraintsWrapper*>(NULL))); |
1553 ExtractNativePC(jni, j_pc)->SetRemoteDescription( | 1559 ExtractNativePC(jni, j_pc)->SetRemoteDescription( |
1554 observer, JavaSdpToNativeSdp(jni, j_sdp)); | 1560 observer, JavaSdpToNativeSdp(jni, j_sdp)); |
1555 } | 1561 } |
1556 | 1562 |
1557 JOW(jboolean, PeerConnection_updateIce)( | 1563 JOW(jboolean, PeerConnection_updateIce)( |
(...skipping 20 matching lines...) Expand all Loading... |
1578 return ExtractNativePC(jni, j_pc)->AddStream( | 1584 return ExtractNativePC(jni, j_pc)->AddStream( |
1579 reinterpret_cast<MediaStreamInterface*>(native_stream)); | 1585 reinterpret_cast<MediaStreamInterface*>(native_stream)); |
1580 } | 1586 } |
1581 | 1587 |
1582 JOW(void, PeerConnection_nativeRemoveLocalStream)( | 1588 JOW(void, PeerConnection_nativeRemoveLocalStream)( |
1583 JNIEnv* jni, jobject j_pc, jlong native_stream) { | 1589 JNIEnv* jni, jobject j_pc, jlong native_stream) { |
1584 ExtractNativePC(jni, j_pc)->RemoveStream( | 1590 ExtractNativePC(jni, j_pc)->RemoveStream( |
1585 reinterpret_cast<MediaStreamInterface*>(native_stream)); | 1591 reinterpret_cast<MediaStreamInterface*>(native_stream)); |
1586 } | 1592 } |
1587 | 1593 |
| 1594 JOW(jobject, PeerConnection_nativeGetSenders)(JNIEnv* jni, jobject j_pc) { |
| 1595 jclass j_array_list_class = FindClass(jni, "java/util/ArrayList"); |
| 1596 jmethodID j_array_list_ctor = |
| 1597 GetMethodID(jni, j_array_list_class, "<init>", "()V"); |
| 1598 jmethodID j_array_list_add = |
| 1599 GetMethodID(jni, j_array_list_class, "add", "(Ljava/lang/Object;)Z"); |
| 1600 jobject j_senders = jni->NewObject(j_array_list_class, j_array_list_ctor); |
| 1601 CHECK_EXCEPTION(jni) << "error during NewObject"; |
| 1602 |
| 1603 jclass j_rtp_sender_class = FindClass(jni, "org/webrtc/RtpSender"); |
| 1604 jmethodID j_rtp_sender_ctor = |
| 1605 GetMethodID(jni, j_rtp_sender_class, "<init>", "(J)V"); |
| 1606 |
| 1607 RtpSenderRefptrs senders = ExtractNativePC(jni, j_pc)->GetSenders(); |
| 1608 for (const auto& sender : senders) { |
| 1609 jlong nativeSenderPtr = jlongFromPointer(sender.get()); |
| 1610 jobject j_sender = |
| 1611 jni->NewObject(j_rtp_sender_class, j_rtp_sender_ctor, nativeSenderPtr); |
| 1612 CHECK_EXCEPTION(jni) << "error during NewObject"; |
| 1613 // Sender is now owned by Java object, and will be freed from there. |
| 1614 sender->AddRef(); |
| 1615 jni->CallBooleanMethod(j_senders, j_array_list_add, j_sender); |
| 1616 CHECK_EXCEPTION(jni) << "error during CallBooleanMethod"; |
| 1617 } |
| 1618 return j_senders; |
| 1619 } |
| 1620 |
| 1621 JOW(jobject, PeerConnection_nativeGetReceivers)(JNIEnv* jni, jobject j_pc) { |
| 1622 jclass j_array_list_class = FindClass(jni, "java/util/ArrayList"); |
| 1623 jmethodID j_array_list_ctor = |
| 1624 GetMethodID(jni, j_array_list_class, "<init>", "()V"); |
| 1625 jmethodID j_array_list_add = |
| 1626 GetMethodID(jni, j_array_list_class, "add", "(Ljava/lang/Object;)Z"); |
| 1627 jobject j_receivers = jni->NewObject(j_array_list_class, j_array_list_ctor); |
| 1628 CHECK_EXCEPTION(jni) << "error during NewObject"; |
| 1629 |
| 1630 jclass j_rtp_receiver_class = FindClass(jni, "org/webrtc/RtpReceiver"); |
| 1631 jmethodID j_rtp_receiver_ctor = |
| 1632 GetMethodID(jni, j_rtp_receiver_class, "<init>", "(J)V"); |
| 1633 |
| 1634 RtpReceiverRefptrs receivers = ExtractNativePC(jni, j_pc)->GetReceivers(); |
| 1635 for (const auto& receiver : receivers) { |
| 1636 jlong nativeReceiverPtr = jlongFromPointer(receiver.get()); |
| 1637 jobject j_receiver = jni->NewObject(j_rtp_receiver_class, |
| 1638 j_rtp_receiver_ctor, nativeReceiverPtr); |
| 1639 CHECK_EXCEPTION(jni) << "error during NewObject"; |
| 1640 // Receiver is now owned by Java object, and will be freed from there. |
| 1641 receiver->AddRef(); |
| 1642 jni->CallBooleanMethod(j_receivers, j_array_list_add, j_receiver); |
| 1643 CHECK_EXCEPTION(jni) << "error during CallBooleanMethod"; |
| 1644 } |
| 1645 return j_receivers; |
| 1646 } |
| 1647 |
1588 JOW(bool, PeerConnection_nativeGetStats)( | 1648 JOW(bool, PeerConnection_nativeGetStats)( |
1589 JNIEnv* jni, jobject j_pc, jobject j_observer, jlong native_track) { | 1649 JNIEnv* jni, jobject j_pc, jobject j_observer, jlong native_track) { |
1590 rtc::scoped_refptr<StatsObserverWrapper> observer( | 1650 rtc::scoped_refptr<StatsObserverWrapper> observer( |
1591 new rtc::RefCountedObject<StatsObserverWrapper>(jni, j_observer)); | 1651 new rtc::RefCountedObject<StatsObserverWrapper>(jni, j_observer)); |
1592 return ExtractNativePC(jni, j_pc)->GetStats( | 1652 return ExtractNativePC(jni, j_pc)->GetStats( |
1593 observer, | 1653 observer, |
1594 reinterpret_cast<MediaStreamTrackInterface*>(native_track), | 1654 reinterpret_cast<MediaStreamTrackInterface*>(native_track), |
1595 PeerConnectionInterface::kStatsOutputLevelStandard); | 1655 PeerConnectionInterface::kStatsOutputLevelStandard); |
1596 } | 1656 } |
1597 | 1657 |
(...skipping 221 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1819 size_t read = 0; | 1879 size_t read = 0; |
1820 rtc::scoped_ptr<jbyte> buffer(static_cast<jbyte*>(malloc(log_size))); | 1880 rtc::scoped_ptr<jbyte> buffer(static_cast<jbyte*>(malloc(log_size))); |
1821 stream->ReadAll(buffer.get(), log_size, &read, nullptr); | 1881 stream->ReadAll(buffer.get(), log_size, &read, nullptr); |
1822 | 1882 |
1823 jbyteArray result = jni->NewByteArray(read); | 1883 jbyteArray result = jni->NewByteArray(read); |
1824 jni->SetByteArrayRegion(result, 0, read, buffer.get()); | 1884 jni->SetByteArrayRegion(result, 0, read, buffer.get()); |
1825 | 1885 |
1826 return result; | 1886 return result; |
1827 } | 1887 } |
1828 | 1888 |
| 1889 JOW(void, RtpSender_nativeSetTrack)(JNIEnv* jni, |
| 1890 jclass, |
| 1891 jlong j_rtp_sender_pointer, |
| 1892 jlong j_track_pointer) { |
| 1893 reinterpret_cast<RtpSenderInterface*>(j_rtp_sender_pointer) |
| 1894 ->SetTrack(reinterpret_cast<MediaStreamTrackInterface*>(j_track_pointer)); |
| 1895 } |
| 1896 |
| 1897 JOW(jlong, RtpSender_nativeTrack)(JNIEnv* jni, |
| 1898 jclass, |
| 1899 jlong j_rtp_sender_pointer, |
| 1900 jlong j_track_pointer) { |
| 1901 return jlongFromPointer( |
| 1902 reinterpret_cast<RtpSenderInterface*>(j_rtp_sender_pointer) |
| 1903 ->track() |
| 1904 .release()); |
| 1905 } |
| 1906 |
| 1907 JOW(void, RtpSender_free)(JNIEnv* jni, jclass, jlong j_rtp_sender_pointer) { |
| 1908 reinterpret_cast<RtpSenderInterface*>(j_rtp_sender_pointer)->Release(); |
| 1909 } |
| 1910 |
| 1911 JOW(jlong, RtpReceiver_nativeTrack)(JNIEnv* jni, |
| 1912 jclass, |
| 1913 jlong j_rtp_receiver_pointer, |
| 1914 jlong j_track_pointer) { |
| 1915 return jlongFromPointer( |
| 1916 reinterpret_cast<RtpReceiverInterface*>(j_rtp_receiver_pointer) |
| 1917 ->track() |
| 1918 .release()); |
| 1919 } |
| 1920 |
| 1921 JOW(void, RtpReceiver_free)(JNIEnv* jni, jclass, jlong j_rtp_receiver_pointer) { |
| 1922 reinterpret_cast<RtpReceiverInterface*>(j_rtp_receiver_pointer)->Release(); |
| 1923 } |
| 1924 |
1829 } // namespace webrtc_jni | 1925 } // namespace webrtc_jni |
OLD | NEW |