Skip to content

Commit

Permalink
Split Comm library into two (the one with core functionality; the oth…
Browse files Browse the repository at this point in the history
…er with opencv integration)
  • Loading branch information
Andrei Costinescu committed Jan 17, 2022
1 parent a007be8 commit 67b86b7
Show file tree
Hide file tree
Showing 24 changed files with 486 additions and 160 deletions.
72 changes: 48 additions & 24 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -8,50 +8,74 @@ add_compile_options(-std=c++17 -pthread)
option(WITH_OPENCV "Build the code with opencv" OFF)
set(OPENCV_VERSION "" CACHE STRING "The opencv version to use in the project")

include_directories(include)
if (WIN32)
set(EXTERNAL_LIBRARIES ${EXTERNAL_LIBRARIES} wsock32 ws2_32)
else (WIN32)
set(EXTERNAL_LIBRARIES ${EXTERNAL_LIBRARIES} pthread)
endif (WIN32)
set(MASTER_LIBRARIES ${EXTERNAL_LIBRARIES})

if (WITH_OPENCV)
if (WIN32)
SET(OpenCV_DIR "C:/Program Files (x86)/opencv/opencv_4.4.0")
set(OpenCV_DIR "C:/Program Files (x86)/opencv/opencv_4.4.0")
endif (WIN32)

if ("${OPENCV_VERSION}" STREQUAL "")
find_package(OpenCV REQUIRED)
find_package(OpenCV REQUIRED COMPONENTS highgui)
else ()
find_package(OpenCV ${OPENCV_VERSION} REQUIRED)
find_package(OpenCV ${OPENCV_VERSION} REQUIRED COMPONENTS highgui)
endif ()

include_directories(${OpenCV_INCLUDE_DIRS})

set(EXTERNAL_LIBRARIES ${OpenCV_LIBS})
endif ()

if (WIN32)
set(EXTERNAL_LIBRARIES ${EXTERNAL_LIBRARIES} wsock32 ws2_32)
else (WIN32)
set(EXTERNAL_LIBRARIES ${EXTERNAL_LIBRARIES} pthread)
endif (WIN32)
set(MASTER_LIBRARIES ${EXTERNAL_LIBRARIES})
include_directories(include)

set(UTILS_STUFF src/utils/NetworkIncludes.cpp src/utils/Buffer.cpp src/utils/SerializationHeader.cpp include/comm/utils/utils.hpp src/utils/NetworkData.cpp)
set(SOCKET_STUFF src/socket/SocketPartner.cpp src/socket/SocketType.cpp src/socket/Socket.cpp src/socket/utils.cpp)
SET(COMMUNICATION_STUFF src/communication/Communication.cpp src/communication/TCPServer.cpp src/communication/Communicator.cpp)
SET(DATA_STUFF src/data/MessageType.cpp src/data/messages.cpp src/data/CommunicationData.cpp src/data/CoordinateData.cpp src/data/ImageData.cpp src/data/StatusData.cpp src/data/dataUtils.cpp src/data/CommunicatorState.cpp src/data/DataCollection.cpp src/data/BytesData.cpp src/data/ImageEncodeData.cpp)
set(COMMUNICATION_STUFF src/communication/Communication.cpp src/communication/TCPServer.cpp src/communication/Communicator.cpp)
set(DATA_STUFF src/data/MessageType.cpp src/data/messages.cpp src/data/CommunicationData.cpp src/data/CoordinateData.cpp src/data/ImageData.cpp src/data/StatusData.cpp src/data/dataUtils.cpp src/data/CommunicatorState.cpp src/data/DataCollection.cpp src/data/BytesData.cpp src/data/ImageEncodeData.cpp)

set(COMM_LIB "Communication")
add_library(${COMM_LIB} SHARED ${COMMUNICATION_STUFF} ${DATA_STUFF} ${SOCKET_STUFF} ${UTILS_STUFF})
if (WITH_OPENCV)
# No idea what PUBLIC or PRIVATE does here...
target_compile_definitions(${COMM_LIB} PUBLIC -DCOMM_USE_OPENCV)
endif ()
set(OPENCV_STUFF src/data/dataUtilsWithOpenCV.cpp src/data/DataCollectionWithOpenCV.cpp src/data/ImageDataWithOpenCV.cpp src/data/ImageEncodeDataWithOpenCV.cpp)

set(COMM_LIB_SHARED ${PROJECT_TARGET})
add_library(${COMM_LIB_SHARED} SHARED ${COMMUNICATION_STUFF} ${DATA_STUFF} ${SOCKET_STUFF} ${UTILS_STUFF})
target_link_libraries(${COMM_LIB_SHARED} ${MASTER_LIBRARIES})
target_include_directories(${COMM_LIB_SHARED}
PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
$<INSTALL_INTERFACE:include>
)

set(COMM_LIB "${COMM_LIB}_static")
set(COMM_LIB "${PROJECT_TARGET}_static")
add_library(${COMM_LIB} ${COMMUNICATION_STUFF} ${DATA_STUFF} ${SOCKET_STUFF} ${UTILS_STUFF})
target_link_libraries(${COMM_LIB} ${MASTER_LIBRARIES})
target_include_directories(${COMM_LIB}
PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
$<INSTALL_INTERFACE:include>
)

if (WITH_OPENCV)
# No idea what PUBLIC or PRIVATE does here...
target_compile_definitions(${COMM_LIB} PUBLIC -DCOMM_USE_OPENCV)
set(OPENCV_COMM_LIB_SHARED ${PROJECT_TARGET}_OpenCV)
add_library(${OPENCV_COMM_LIB_SHARED} SHARED ${OPENCV_STUFF})
target_link_libraries(${OPENCV_COMM_LIB_SHARED} ${PROJECT_TARGET} ${OpenCV_LIBS} ${MASTER_LIBRARIES})
target_include_directories(${OPENCV_COMM_LIB_SHARED}
PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
$<INSTALL_INTERFACE:include>
)

set(OPENCV_COMM_LIB "${PROJECT_TARGET}_OpenCV_static")
add_library(${OPENCV_COMM_LIB} ${OPENCV_STUFF})
target_link_libraries(${OPENCV_COMM_LIB} ${PROJECT_TARGET}_static ${OpenCV_LIBS} ${MASTER_LIBRARIES})
target_include_directories(${OPENCV_COMM_LIB}
PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
$<INSTALL_INTERFACE:include>
)
endif ()

set(MASTER_LIBRARIES ${COMM_LIB} ${MASTER_LIBRARIES})
set(MASTER_LIBRARIES ${COMM_LIB} ${OPENCV_COMM_LIB} ${MASTER_LIBRARIES})

add_subdirectory(tests)
8 changes: 6 additions & 2 deletions include/comm/data/DataCollection.h
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
#define COMM_DATA_DATACOLLECTION_H

#include <comm/data/CommunicationData.h>
#include <functional>
#include <map>
#include <string>
#include <vector>
Expand All @@ -15,17 +16,20 @@ namespace comm {
public:
DataCollection();

~DataCollection();
DataCollection(std::function<CommunicationData *(MessageType)> dataCreationFunction);

virtual ~DataCollection();

void reset();

void set(const MessageType &messageType, CommunicationData *commData);

CommunicationData *get(const MessageType &messageType);

private:
protected:
std::map<std::string, CommunicationData *> data;
std::vector<std::string> dataKeys;
std::function<CommunicationData *(MessageType)> dataCreationFunction;
};
}

Expand Down
22 changes: 22 additions & 0 deletions include/comm/data/DataCollectionWithOpenCV.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
//
// Created by Andrei Costinescu ([email protected]) on 01-Apr-21.
//

#ifndef COMM_DATA_DATACOLLECTIONWITHOPENCV_H
#define COMM_DATA_DATACOLLECTIONWITHOPENCV_H

#include <comm/data/DataCollection.h>

namespace comm {
class DataCollectionWithOpenCV : public DataCollection {
public:
DataCollectionWithOpenCV();

DataCollectionWithOpenCV(std::function<CommunicationData*(MessageType)> dataCreationFunction);

~DataCollectionWithOpenCV() override;
};
}


#endif //COMM_DATA_DATACOLLECTIONWITHOPENCV_H
37 changes: 6 additions & 31 deletions include/comm/data/ImageData.h
Original file line number Diff line number Diff line change
Expand Up @@ -8,32 +8,18 @@
#include <comm/data/CommunicationData.h>
#include <comm/utils/Buffer.h>

#ifdef COMM_USE_OPENCV

#include <opencv2/opencv.hpp>

#else

typedef unsigned char uchar;

#endif

namespace comm {
class ImageData : public CommunicationData {
class ImageData : public virtual CommunicationData {
public:
static const int headerSize;

static int getOpenCVType(int imageChannels, int bytesPerElement, bool unsignedValue, bool floatValue);

ImageData();

#ifdef COMM_USE_OPENCV

ImageData(cv::Mat image, int id);
ImageData(unsigned char *imageBytes, int imageByteSize, int imageHeight, int imageWidth, int imageType, int id);

#endif

ImageData(uchar *imageBytes, int imageByteSize, int imageHeight, int imageWidth, int imageType, int id);
~ImageData();

MessageType getMessageType() override;

Expand All @@ -47,16 +33,8 @@ namespace comm {

void setID(int id);

#ifdef COMM_USE_OPENCV

void setImage(cv::Mat image);

[[nodiscard]] cv::Mat getImage() const;

#endif

void setImage(unsigned char *_imageBytes, int _imageByteSize, int _imageHeight, int _imageWidth,
int _imageType);
virtual void setImage(unsigned char *_imageBytes, int _imageByteSize, int _imageHeight, int _imageWidth,
int _imageType);

[[nodiscard]] int getID() const;

Expand All @@ -73,10 +51,7 @@ namespace comm {
[[nodiscard]] bool isImageDeserialized() const;

protected:
#ifdef COMM_USE_OPENCV
cv::Mat image{};
#endif
uchar *imageBytes;
unsigned char *imageBytes;
int id, imageHeight, imageWidth, imageType, contentSize;
bool imageDeserialized;
};
Expand Down
37 changes: 37 additions & 0 deletions include/comm/data/ImageDataWithOpenCV.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
//
// Created by Andrei Costinescu ([email protected]) on 10.03.2021.
//

#ifndef COMM_DATA_IMAGEDATAWITHOPENCV_H
#define COMM_DATA_IMAGEDATAWITHOPENCV_H

#include <comm/data/ImageData.h>
#include <opencv2/opencv.hpp>

namespace comm {
class ImageDataWithOpenCV : public virtual ImageData {
public:
ImageDataWithOpenCV();

ImageDataWithOpenCV(cv::Mat image, int id);

ImageDataWithOpenCV(unsigned char *imageBytes, int imageByteSize, int imageHeight, int imageWidth, int imageType, int id);

~ImageDataWithOpenCV() override;

char *getDeserializeBuffer() override;

bool deserialize(Buffer *buffer, int start, bool forceCopy, bool verbose) override;

void setImage(cv::Mat image);

[[nodiscard]] cv::Mat getImage() const;

void setImage(unsigned char *_imageBytes, int _imageByteSize, int _imageHeight, int _imageWidth, int _imageType) override;

protected:
cv::Mat image{};
};
}

#endif //COMM_DATA_IMAGEDATAWITHOPENCV_H
16 changes: 7 additions & 9 deletions include/comm/data/ImageEncodeData.h
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
#include <vector>

namespace comm {
class ImageEncodeData : public ImageData {
class ImageEncodeData : public virtual ImageData {
public:
static const int headerSize;

Expand All @@ -25,12 +25,10 @@ namespace comm {

ImageEncodeData();

#ifdef COMM_USE_OPENCV
ImageEncodeData(cv::Mat image, int id, Encoding encoding);
#endif
ImageEncodeData(const std::vector<unsigned char> &imageEncodedBytes, int imageHeight, int imageWidth,
int imageType, int id, Encoding encoding);

ImageEncodeData(const std::vector<uchar> &imageEncodedBytes, int imageHeight, int imageWidth, int imageType,
int id, Encoding encoding);
~ImageEncodeData() override;

MessageType getMessageType() override;

Expand All @@ -46,11 +44,11 @@ namespace comm {

Encoding getEncoding();

void setImageEncodedBytes(const std::vector<uchar> &imageEncodedBytes, int imageHeight, int imageWidth,
void setImageEncodedBytes(const std::vector<unsigned char> &imageEncodedBytes, int imageHeight, int imageWidth,
int imageType, int id, Encoding _encoding);

private:
std::vector<uchar> encodedImage;
protected:
std::vector<unsigned char> encodedImage;
int encodedContentSize;
Encoding encoding;
};
Expand Down
32 changes: 32 additions & 0 deletions include/comm/data/ImageEncodeDataWithOpenCV.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
//
// Created by Andrei Costinescu ([email protected]) on 29-May-21.
//

#ifndef COMM_DATA_IMAGEENCODEDATAWITHOPENCV_H
#define COMM_DATA_IMAGEENCODEDATAWITHOPENCV_H

#include <comm/data/ImageDataWithOpenCV.h>
#include <comm/data/ImageEncodeData.h>
#include <opencv2/opencv.hpp>

namespace comm {
class ImageEncodeDataWithOpenCV : public ImageEncodeData, public ImageDataWithOpenCV {
public:
ImageEncodeDataWithOpenCV();

ImageEncodeDataWithOpenCV(cv::Mat image, int id, Encoding encoding);

ImageEncodeDataWithOpenCV(const std::vector<unsigned char> &imageEncodedBytes, int imageHeight, int imageWidth,
int imageType, int id, Encoding encoding);

~ImageEncodeDataWithOpenCV() override;

bool serialize(Buffer *buffer, int start, bool forceCopy, bool verbose) override;

char *getDeserializeBuffer() override;

bool deserialize(Buffer *buffer, int start, bool forceCopy, bool verbose) override;
};
}

#endif //COMM_DATA_IMAGEENCODEDATAWITHOPENCV_H
15 changes: 15 additions & 0 deletions include/comm/data/dataUtilsWithOpenCV.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
//
// Created by Andrei Costinescu ([email protected]) on 24.03.2021.
//

#ifndef COMM_DATA_DATAUTILSWITHOPENCV_H
#define COMM_DATA_DATAUTILSWITHOPENCV_H

#include <comm/data/MessageType.h>
#include <comm/data/CommunicationData.h>

namespace comm {
CommunicationData *createCommunicationDataPtrWithOpenCV(const MessageType &messageType);
}

#endif //COMM_DATA_DATAUTILSWITHOPENCV_H
9 changes: 6 additions & 3 deletions src/data/DataCollection.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -12,15 +12,18 @@
using namespace comm;
using namespace std;

DataCollection::DataCollection() : data(), dataKeys() {}
DataCollection::DataCollection() : DataCollection(createCommunicationDataPtr) {}

DataCollection::DataCollection(function<CommunicationData *(MessageType)> dataCreationFunction)
: data(), dataKeys(), dataCreationFunction(move(dataCreationFunction)) {}

DataCollection::~DataCollection() {
cout << "In DataCollection destructor: " << endl;
this->reset();
}

void DataCollection::reset() {
for (const auto &_data : this->data) {
for (const auto &_data: this->data) {
cout << "\tDelete " << _data.first << ": " << _data.second << endl;
delete _data.second;
}
Expand All @@ -40,7 +43,7 @@ CommunicationData *DataCollection::get(const MessageType &messageType) {
CommunicationData *commData;
string stringMessageType = messageTypeToString(messageType);
if (!mapGetIfContains(this->data, stringMessageType, commData)) {
for (const auto &dataKey : this->dataKeys) {
for (const auto &dataKey: this->dataKeys) {
if (dataKey == stringMessageType) {
(*cerror) << "The data key assertion will fail for key = " << stringMessageType << endl;
}
Expand Down
16 changes: 16 additions & 0 deletions src/data/DataCollectionWithOpenCV.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
//
// Created by Andrei Costinescu ([email protected]) on 01-Apr-21.
//

#include <comm/data/DataCollectionWithOpenCV.h>
#include <comm/data/dataUtilsWithOpenCV.h>

using namespace comm;
using namespace std;

DataCollectionWithOpenCV::DataCollectionWithOpenCV() : DataCollection(createCommunicationDataPtrWithOpenCV) {}

DataCollectionWithOpenCV::DataCollectionWithOpenCV(function<CommunicationData *(MessageType)> dataCreationFunction)
: DataCollection(move(dataCreationFunction)) {}

DataCollectionWithOpenCV::~DataCollectionWithOpenCV() = default;
Loading

0 comments on commit 67b86b7

Please sign in to comment.