Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(7)

Side by Side Diff: talk/app/webrtc/java/jni/peerconnection_jni.cc

Issue 1351803002: Exposing RtpSenders and RtpReceivers from PeerConnection. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Fixing indentation. Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698