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...) 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...) 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...) 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(); |
AlexG
2015/10/02 22:44:35
Can you explain why CHECK_RELEASE is removed?
Taylor Brandstetter
2015/10/03 01:50:09
Because now there are two Java MediaStreamTracks t
| |
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 585 matching lines...) Loading... | |
1570 | 1574 |
1571 jfieldID j_description_id = GetFieldID( | 1575 jfieldID j_description_id = GetFieldID( |
1572 jni, GetObjectClass(jni, j_sdp), "description", "Ljava/lang/String;"); | 1576 jni, GetObjectClass(jni, j_sdp), "description", "Ljava/lang/String;"); |
1573 jstring j_description = (jstring)GetObjectField(jni, j_sdp, j_description_id); | 1577 jstring j_description = (jstring)GetObjectField(jni, j_sdp, j_description_id); |
1574 std::string std_description = JavaToStdString(jni, j_description); | 1578 std::string std_description = JavaToStdString(jni, j_description); |
1575 | 1579 |
1576 return webrtc::CreateSessionDescription( | 1580 return webrtc::CreateSessionDescription( |
1577 std_type, std_description, NULL); | 1581 std_type, std_description, NULL); |
1578 } | 1582 } |
1579 | 1583 |
1580 JOW(void, PeerConnection_setLocalDescription)( | 1584 JOW(void, PeerConnection_nativeSetLocalDescription)( |
1581 JNIEnv* jni, jobject j_pc, | 1585 JNIEnv* jni, jobject j_pc, |
1582 jobject j_observer, jobject j_sdp) { | 1586 jobject j_observer, jobject j_sdp) { |
1583 rtc::scoped_refptr<SetSdpObserverWrapper> observer( | 1587 rtc::scoped_refptr<SetSdpObserverWrapper> observer( |
1584 new rtc::RefCountedObject<SetSdpObserverWrapper>( | 1588 new rtc::RefCountedObject<SetSdpObserverWrapper>( |
1585 jni, j_observer, reinterpret_cast<ConstraintsWrapper*>(NULL))); | 1589 jni, j_observer, reinterpret_cast<ConstraintsWrapper*>(NULL))); |
1586 ExtractNativePC(jni, j_pc)->SetLocalDescription( | 1590 ExtractNativePC(jni, j_pc)->SetLocalDescription( |
1587 observer, JavaSdpToNativeSdp(jni, j_sdp)); | 1591 observer, JavaSdpToNativeSdp(jni, j_sdp)); |
1588 } | 1592 } |
1589 | 1593 |
1590 JOW(void, PeerConnection_setRemoteDescription)( | 1594 JOW(void, PeerConnection_nativeSetRemoteDescription)( |
1591 JNIEnv* jni, jobject j_pc, | 1595 JNIEnv* jni, jobject j_pc, |
1592 jobject j_observer, jobject j_sdp) { | 1596 jobject j_observer, jobject j_sdp) { |
1593 rtc::scoped_refptr<SetSdpObserverWrapper> observer( | 1597 rtc::scoped_refptr<SetSdpObserverWrapper> observer( |
1594 new rtc::RefCountedObject<SetSdpObserverWrapper>( | 1598 new rtc::RefCountedObject<SetSdpObserverWrapper>( |
1595 jni, j_observer, reinterpret_cast<ConstraintsWrapper*>(NULL))); | 1599 jni, j_observer, reinterpret_cast<ConstraintsWrapper*>(NULL))); |
1596 ExtractNativePC(jni, j_pc)->SetRemoteDescription( | 1600 ExtractNativePC(jni, j_pc)->SetRemoteDescription( |
1597 observer, JavaSdpToNativeSdp(jni, j_sdp)); | 1601 observer, JavaSdpToNativeSdp(jni, j_sdp)); |
1598 } | 1602 } |
1599 | 1603 |
1600 JOW(jboolean, PeerConnection_setConfiguration)( | 1604 JOW(jboolean, PeerConnection_setConfiguration)( |
(...skipping 18 matching lines...) 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 221 matching lines...) Loading... | |
1860 size_t read = 0; | 1918 size_t read = 0; |
1861 rtc::scoped_ptr<jbyte> buffer(static_cast<jbyte*>(malloc(log_size))); | 1919 rtc::scoped_ptr<jbyte> buffer(static_cast<jbyte*>(malloc(log_size))); |
1862 stream->ReadAll(buffer.get(), log_size, &read, nullptr); | 1920 stream->ReadAll(buffer.get(), log_size, &read, nullptr); |
1863 | 1921 |
1864 jbyteArray result = jni->NewByteArray(read); | 1922 jbyteArray result = jni->NewByteArray(read); |
1865 jni->SetByteArrayRegion(result, 0, read, buffer.get()); | 1923 jni->SetByteArrayRegion(result, 0, read, buffer.get()); |
1866 | 1924 |
1867 return result; | 1925 return result; |
1868 } | 1926 } |
1869 | 1927 |
1928 JOW(void, RtpSender_nativeSetTrack)(JNIEnv* jni, | |
1929 jclass, | |
1930 jlong j_rtp_sender_pointer, | |
1931 jlong j_track_pointer) { | |
1932 reinterpret_cast<RtpSenderInterface*>(j_rtp_sender_pointer) | |
1933 ->SetTrack(reinterpret_cast<MediaStreamTrackInterface*>(j_track_pointer)); | |
1934 } | |
1935 | |
1936 JOW(jlong, RtpSender_nativeTrack)(JNIEnv* jni, | |
AlexG
2015/10/02 22:44:35
Probably rename to nativeGetandReleaseTrack - if y
Taylor Brandstetter
2015/10/03 01:50:10
Done.
| |
1937 jclass, | |
1938 jlong j_rtp_sender_pointer, | |
1939 jlong j_track_pointer) { | |
1940 return jlongFromPointer( | |
1941 reinterpret_cast<RtpSenderInterface*>(j_rtp_sender_pointer) | |
1942 ->track() | |
1943 .release()); | |
1944 } | |
1945 | |
1946 JOW(jstring, RtpSender_nativeId)( | |
1947 JNIEnv* jni, jclass, jlong j_rtp_sender_pointer) { | |
1948 return JavaStringFromStdString( | |
1949 jni, reinterpret_cast<RtpSenderInterface*>(j_rtp_sender_pointer)->id()); | |
1950 } | |
1951 | |
1952 JOW(void, RtpSender_free)(JNIEnv* jni, jclass, jlong j_rtp_sender_pointer) { | |
1953 reinterpret_cast<RtpSenderInterface*>(j_rtp_sender_pointer)->Release(); | |
1954 } | |
1955 | |
1956 JOW(jlong, RtpReceiver_nativeTrack)(JNIEnv* jni, | |
AlexG
2015/10/02 22:44:35
ditto: nativeGetAndReleaseTrack()?
Taylor Brandstetter
2015/10/03 01:50:10
Done.
| |
1957 jclass, | |
1958 jlong j_rtp_receiver_pointer, | |
1959 jlong j_track_pointer) { | |
1960 return jlongFromPointer( | |
1961 reinterpret_cast<RtpReceiverInterface*>(j_rtp_receiver_pointer) | |
1962 ->track() | |
1963 .release()); | |
1964 } | |
1965 | |
1966 JOW(jstring, RtpReceiver_nativeId)( | |
1967 JNIEnv* jni, jclass, jlong j_rtp_receiver_pointer) { | |
1968 return JavaStringFromStdString( | |
1969 jni, | |
1970 reinterpret_cast<RtpReceiverInterface*>(j_rtp_receiver_pointer)->id()); | |
1971 } | |
1972 | |
1973 JOW(void, RtpReceiver_free)(JNIEnv* jni, jclass, jlong j_rtp_receiver_pointer) { | |
1974 reinterpret_cast<RtpReceiverInterface*>(j_rtp_receiver_pointer)->Release(); | |
1975 } | |
1976 | |
1870 } // namespace webrtc_jni | 1977 } // namespace webrtc_jni |
OLD | NEW |