From c9ba8e43fc23fccd47531ecea73224b3b9b552c3 Mon Sep 17 00:00:00 2001 From: dknn Date: Sun, 15 Jul 2012 18:18:18 +0200 Subject: Fix troubles in screen sharing example diff --git a/Swiften/Examples/ScreenSharing/Host.cpp b/Swiften/Examples/ScreenSharing/Host.cpp index 44f72d4..5d67de0 100644 --- a/Swiften/Examples/ScreenSharing/Host.cpp +++ b/Swiften/Examples/ScreenSharing/Host.cpp @@ -78,6 +78,7 @@ class ScreenSharer { outgoingScreenSharing = client->getScreenSharingManager()->createOutgoingScreenSharing(recipient); if (outgoingScreenSharing) { + client->getEntityCapsProvider()->onCapsChanged.disconnect(boost::bind(&ScreenSharer::handleCapsChanged, this, _1)); std::cout << "started screen sharing" << std::endl; outgoingScreenSharing->onReady.connect(boost::bind(&ScreenSharer::handleRTPReady, this)); outgoingScreenSharing->onFinished.connect(boost::bind(&ScreenSharer::handleScreenSharingFinished, this)); @@ -90,11 +91,11 @@ class ScreenSharer { } void handleRTPReady() { - uint8_t *data = new uint8_t[200*200*3]; + uint8_t data[200*200*3]; data[0] = 0; data[1] = 128; data[2] = 255; - Image img(200, 200, data); + Image img(200, 200, (const uint8_t*)data); for (int i = 0; i < 10; ++i) outgoingScreenSharing->addImage(img); outgoingScreenSharing->stop(); diff --git a/Swiften/ScreenSharing/OutgoingScreenSharing.cpp b/Swiften/ScreenSharing/OutgoingScreenSharing.cpp index ec0a39c..906bd68 100644 --- a/Swiften/ScreenSharing/OutgoingScreenSharing.cpp +++ b/Swiften/ScreenSharing/OutgoingScreenSharing.cpp @@ -65,6 +65,7 @@ void OutgoingScreenSharing::start(unsigned int width, unsigned int height) jingleSession->sendInitiate(contentID, desc, transport); onStateChange(ScreenSharing::WaitingForAccept); + serverSocket->onConnected.connect(boost::bind(&OutgoingScreenSharing::handleSocketConnected, this)); serverSocket->connectToFirstIncoming(); } diff --git a/Swiften/ScreenSharing/RTPSession.h b/Swiften/ScreenSharing/RTPSession.h index 4399b2d..e4aa9c1 100644 --- a/Swiften/ScreenSharing/RTPSession.h +++ b/Swiften/ScreenSharing/RTPSession.h @@ -29,6 +29,8 @@ namespace Swift { virtual void injectData(const SafeByteArray& data) = 0; virtual void stop(int maxWaitMs = 100) = 0; + virtual size_t getMaxRTPPayloadSize() const = 0; + public: boost::signal onIncomingPacket; }; diff --git a/Swiften/ScreenSharing/RTPSessionImpl.cpp b/Swiften/ScreenSharing/RTPSessionImpl.cpp index 94641ff..bbd3d72 100644 --- a/Swiften/ScreenSharing/RTPSessionImpl.cpp +++ b/Swiften/ScreenSharing/RTPSessionImpl.cpp @@ -88,13 +88,13 @@ void RTPSessionImpl::checkIncomingPackets() void RTPSessionImpl::sendPacket(const SafeByteArray& data, int timestampinc, bool marker) { - checkError(session.SendPacket((void*)(&data[0]), data.size(), payloadType.getID(), marker, timestampinc)); + checkError(session.SendPacket((void*)(data.data()), data.size(), payloadType.getID(), marker, timestampinc)); poll(); } void RTPSessionImpl::injectData(const SafeByteArray& data) { - packetInjecter->InjectRTPorRTCP((void*)(&data[0]), data.size(), jRTPRemotePeer); + packetInjecter->InjectRTPorRTCP((void*)(data.data()), data.size(), jRTPRemotePeer); checkIncomingPackets(); poll(); } @@ -105,6 +105,12 @@ void RTPSessionImpl::stop(int maxWaitMs) udpSocket->close(); } +size_t RTPSessionImpl::getMaxRTPPayloadSize() const +{ + jrtplib::RTPSessionParams sessparams; + return sessparams.GetMaximumPacketSize(); +} + void RTPSessionImpl::checkError(int rtperr) const { if (rtperr < 0) diff --git a/Swiften/ScreenSharing/RTPSessionImpl.h b/Swiften/ScreenSharing/RTPSessionImpl.h index 231ec1e..2c6fed2 100644 --- a/Swiften/ScreenSharing/RTPSessionImpl.h +++ b/Swiften/ScreenSharing/RTPSessionImpl.h @@ -46,6 +46,8 @@ namespace Swift { virtual void injectData(const SafeByteArray &data); virtual void stop(int maxWaitMs = 100); + virtual size_t getMaxRTPPayloadSize() const; + public: static jrtplib::RTPIPv4Address nativeAddressToJRTPAddress(const HostAddressPort& hostAddressPort); diff --git a/Swiften/ScreenSharing/VP8RTPPacketizer.h b/Swiften/ScreenSharing/VP8RTPPacketizer.h index d5343c0..c56e754 100644 --- a/Swiften/ScreenSharing/VP8RTPPacketizer.h +++ b/Swiften/ScreenSharing/VP8RTPPacketizer.h @@ -29,7 +29,7 @@ namespace Swift { static const uint8_t HBit = 1 << 4; static const uint8_t Size0BitMask = 7; static const uint8_t Size0BitShift = 5; - static const size_t MaxRTPPayloadSize = 1400; // Replace with JRTPLIB's one + static const size_t MaxRTPPayloadSize = 1300; // Replace with JRTPLIB's one; TODO: fix the issue with maximum size std::vector payloadBuffer; }; -- cgit v0.10.2-6-g49f6