00001 #ifndef _REC_ROBOTINO_IMAGESENDER_MANAGER_H_
00002 #define _REC_ROBOTINO_IMAGESENDER_MANAGER_H_
00003
00004 #include "rec/robotino/imagesender/defines.h"
00005 #include "rec/robotino/imagesender/Sender.h"
00006 #include "rec/robotino/imagesender/ImageMemory.h"
00007
00008 #include <QObject>
00009 #include <QMap>
00010 #include <QSharedMemory>
00011
00012 namespace rec
00013 {
00014 namespace robotino
00015 {
00016 namespace imagesender
00017 {
00018 class Receiver
00019 {
00020 public:
00021 Receiver( quint32 addr, quint16 port_ )
00022 : address( addr ),
00023 port( port_ )
00024 {
00025 }
00026
00027 Receiver()
00028 : address( 0 ),
00029 port( 0 )
00030 {
00031 }
00032
00033 quint32 address;
00034 quint16 port;
00035 };
00036
00037 class REC_ROBOTINO_IMAGESENDER_EXPORT Manager : public QObject
00038 {
00039 Q_OBJECT
00040 public:
00041 Manager( QObject* parent );
00042
00043 ~Manager();
00044
00045 int numReceivers() const { return _senders.size(); }
00046
00047 int numLocalReceivers() const { return _numLocalReceivers; }
00048
00049 Sender::State state() const;
00050
00054 void stop();
00055
00056 void createSharedMemory( quint16 serverPort );
00057 void releaseSharedMemory();
00058
00059 #ifdef QT_NO_KEYWORDS
00060 public Q_SLOTS:
00061 #else
00062 public slots:
00063 #endif
00064 void setRawImageData( const QByteArray& data,
00065 unsigned int width,
00066 unsigned int height,
00067 unsigned int numChannels,
00068 unsigned int bitsPerChannel,
00069 unsigned int step );
00070
00071 void setJpgImageData( const QByteArray& data );
00072
00073 void setLocalRawImageData( const QByteArray& data,
00074 unsigned int width,
00075 unsigned int height,
00076 unsigned int numChannels,
00077 unsigned int bitsPerChannel,
00078 unsigned int step );
00079
00080 void setLocalJpgImageData( const QByteArray& data );
00081
00082 void addReceiver( quint32 address, quint16 port );
00083
00084 void removeReceiver( quint32 address, quint16 port );
00085
00086
00087 void reset();
00088
00089 #ifdef QT_NO_KEYWORDS
00090 Q_SIGNALS:
00091 #else
00092 signals:
00093 #endif
00094 void imageSendingCompleted();
00095
00096 private:
00097 QMap< Receiver, Sender* > _senders;
00098 int _numLocalReceivers;
00099 int _numSendesOnSetImageData;
00100
00101 QSharedMemory _sharedMemory;
00102 ImageMemory* _imageMemory;
00103
00104 #ifdef QT_NO_KEYWORDS
00105 private Q_SLOTS:
00106 #else
00107 private slots:
00108 #endif
00109 void on_sender_imageSendingCompleted();
00110 };
00111 }
00112 }
00113 }
00114
00115 QT_BEGIN_NAMESPACE
00116 inline bool operator<( const rec::robotino::imagesender::Receiver& r1, const rec::robotino::imagesender::Receiver& r2 )
00117 {
00118 if( r1.address < r2.address )
00119 {
00120 return true;
00121 }
00122 else if( r1.address == r2.address )
00123 {
00124 return ( r1.port < r2.port );
00125 }
00126 else
00127 {
00128 return false;
00129 }
00130 }
00131 QT_END_NAMESPACE
00132
00133
00134 #endif //_REC_ROBOTINO_IMAGESENDER_MANAGER_H_