/* * Copyright (c) 2012 Yoann Blein * Licensed under the simplified BSD license. * See Documentation/Licenses/BSD-simplified.txt for more information. */ #pragma once #include #include #include #include #include namespace Swift { class ConnectivityManager; class JingleDescription; class JingleTransportPayload; class TimerFactory; class Timer; class VideoEncoder; class VP8RTPPacketizer; class Image; class InputEventPayload; class OutgoingScreenSharing : public ScreenSharing { public: typedef boost::shared_ptr ref; public: OutgoingScreenSharing(boost::shared_ptr jingleSession, UDPSocketFactory* udpSocketFactory, TimerFactory* timerFactory, const JID& recipient); virtual ~OutgoingScreenSharing(); virtual void cancel(); void start(unsigned int width, unsigned int height); void addImage(const Image& image); const JID& getRecipient() const; public: boost::signal onReady; boost::signal)> onNewInputEvent; private: void handleSocketConnected(); void handleSessionAcceptReceived(const JingleContentID& /*id*/, boost::shared_ptr /*desc*/, boost::shared_ptr /*transport*/); void handleConnectionFailed(); void startRTPSession(); void handleNewPayloadReady(const std::vector& data, bool marker); private: TimerFactory* timerFactory; JID recipient; JingleContentID contentID; bool canceled; bool sessionAccepted; bool socketConnected; RTPPayloadType payloadTypeUsed; VideoEncoder* encoder; VP8RTPPacketizer* packetizer; unsigned int width; unsigned int height; boost::shared_ptr connectionTimer; }; }