Skip to content

Commit d1425ea

Browse files
authored
Merge pull request #104 from Digitelektro/beta
Beta
2 parents bf991c9 + b3680f2 commit d1425ea

48 files changed

Lines changed: 2857 additions & 903 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

CMakeLists.txt

Lines changed: 34 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,15 @@ cmake_minimum_required(VERSION 3.5)
22

33
include(ExternalProject)
44

5-
project(Meteordemod LANGUAGES CXX)
5+
project(meteordemod
6+
VERSION 2.6.5
7+
LANGUAGES CXX
8+
)
9+
10+
configure_file(cmake/version.h.in version.h)
11+
12+
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DVERSION_BUILD=${VERSION_BUILD_NUMBER}")
13+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DVERSION_BUILD=${VERSION_BUILD_NUMBER}")
614

715
set(CMAKE_CXX_STANDARD 17)
816
set(CMAKE_CXX_STANDARD_REQUIRED ON)
@@ -13,6 +21,10 @@ if (NOT CMAKE_BUILD_TYPE OR CMAKE_BUILD_TYPE STREQUAL "")
1321
endif()
1422
message(STATUS "Build type: ${CMAKE_BUILD_TYPE}")
1523

24+
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
25+
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address")
26+
endif()
27+
1628

1729
if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
1830
if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS "4.9.2")
@@ -40,6 +52,7 @@ ExternalProject_Add(libcorrect
4052
)
4153

4254
find_package(OpenCV)
55+
find_package(OpenCL)
4356

4457
link_directories(
4558
${CMAKE_BINARY_DIR}/sgp4-build/libsgp4
@@ -50,48 +63,33 @@ add_definitions(-D_USE_MATH_DEFINES -D_SILENCE_EXPERIMENTAL_FILESYSTEM_DEPRECATI
5063

5164
add_executable(meteordemod
5265
main.cpp
53-
imageproc/spreadimage.cpp
54-
imageproc/spreadimage.h
5566
imageproc/threatimage.cpp
56-
imageproc/threatimage.h
57-
decoder/bitio.cpp
58-
decoder/bitio.h
67+
imageproc/projectimage.cpp
68+
imageproc/blendimages.cpp
69+
imageproc/tps.cpp
5970
decoder/correlation.cpp
60-
decoder/correlation.h
61-
decoder/meteorimage.cpp
62-
decoder/meteorimage.h
63-
decoder/packetparser.cpp
64-
decoder/packetparser.h
6571
decoder/reedsolomon.cpp
66-
decoder/reedsolomon.h
6772
decoder/viterbi.cpp
68-
decoder/viterbi.h
6973
decoder/deinterleaver.cpp
7074
decoder/meteordecoder.cpp
71-
decoder/meteordecoder.h
75+
decoder/protocol/ccsds.cpp
76+
decoder/protocol/vcdu.cpp
77+
decoder/protocol/lrpt/decoder.cpp
78+
decoder/protocol/lrpt/msumr/segment.cpp
79+
decoder/protocol/lrpt/msumr/bitio.cpp
80+
decoder/protocol/lrpt/msumr/image.cpp
7281
common/settings.cpp
73-
common/settings.h
74-
common/version.h
7582
tools/matrix.cpp
76-
tools/matrix.h
7783
tools/tlereader.cpp
78-
tools/tlereader.h
7984
tools/vector.cpp
80-
tools/vector.h
8185
tools/pixelgeolocationcalculator.cpp
82-
tools/pixelgeolocationcalculator.h
8386
tools/databuffer.cpp
84-
tools/databuffer.h
8587
tools/iniparser.cpp
86-
tools/iniparser.h
8788
tools/threadpool.cpp
88-
tools/threadpool.h
89+
tools/opencl.cpp
8990
GIS/shapereader.cpp
90-
GIS/shapereader.h
9191
GIS/shaperenderer.cpp
92-
GIS/shaperenderer.h
9392
GIS/dbfilereader.cpp
94-
GIS/dbfilereader.h
9593
DSP/meteordemodulator.cpp
9694
DSP/agc.cpp
9795
DSP/pll.cpp
@@ -118,9 +116,19 @@ include_directories(
118116
${CMAKE_SOURCE_DIR}/external/libcorrect/include
119117
)
120118

119+
target_include_directories(meteordemod PUBLIC
120+
"${PROJECT_BINARY_DIR}"
121+
)
122+
121123
add_dependencies(meteordemod sgp4)
122124
add_dependencies(meteordemod libcorrect)
123125

126+
if(OpenCL_FOUND)
127+
target_compile_definitions(meteordemod PUBLIC OPENCL_FOUND=1)
128+
include_directories(${OpenCL_INCLUDE_DIRS})
129+
target_link_libraries(meteordemod ${OpenCL_LIBRARIES})
130+
endif()
131+
124132
if(WIN32)
125133
target_link_libraries(meteordemod
126134
${OpenCV_LIBS}
@@ -150,9 +158,6 @@ if(UNIX AND NOT APPLE)
150158
find_file (DEBIAN_FOUND debian_version debconf.conf PATHS /etc)
151159
if (DEBIAN_FOUND)
152160
SET(CPACK_GENERATOR "DEB")
153-
SET(CPACK_PACKAGE_VERSION_MAJOR "2")
154-
SET(CPACK_PACKAGE_VERSION_MINOR "5")
155-
SET(CPACK_PACKAGE_VERSION_PATCH "5")
156161
SET(CPACK_DEBIAN_PACKAGE_MAINTAINER "Digitelektro")
157162
SET(CPACK_DEBIAN_PACKAGE_HOMEPAGE "https://github.com/Digitelektro/MeteorDemod")
158163
SET(CPACK_DEBIAN_PACKAGE_DESCRIPTION "Russian Meteor M2 weather satellite data decoder")

GIS/shapereader.h

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
#include <iostream>
55
#include <iterator>
6+
#include <limits>
67
#include <memory>
78
#include <string>
89
#include <vector>
@@ -170,6 +171,10 @@ class ShapeReader {
170171
pointBuffer.valueAtIndex(index, y, LittleEndian);
171172
}
172173

174+
bool operator==(const Point& rhs) {
175+
return (std::abs(x - rhs.x) <= std::numeric_limits<double>::epsilon()) && (std::abs(y - rhs.y) <= std::numeric_limits<double>::epsilon());
176+
}
177+
173178
double x;
174179
double y;
175180
};
@@ -235,6 +240,19 @@ class ShapeReader {
235240
return *this;
236241
}
237242
}
243+
PolyLineIterator operator++(int) {
244+
auto temp = *this;
245+
if(mNumberOfPoint < mPolyLineHeader.numberOfpoints) {
246+
DataBuffer pointBuffer(16);
247+
mInputStream.read(reinterpret_cast<char*>(pointBuffer.buffer()), pointBuffer.size());
248+
point = Point(pointBuffer);
249+
mNumberOfPoint++;
250+
} else {
251+
mNumberOfPoint = 0;
252+
point = Point();
253+
}
254+
return temp;
255+
}
238256

239257
PolyLineIterator begin() {
240258
int filePosition = mRecordPosition + 12; // Recordpos + Recordheader

GIS/shaperenderer.cpp

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,11 @@ void GIS::ShapeRenderer::drawShape(const cv::Mat& src, Transform_t transform) {
3636
for(polyLineIterator->begin(); *polyLineIterator != polyLineIterator->end(); ++(*polyLineIterator)) {
3737
if(transform(polyLineIterator->point.y, polyLineIterator->point.x)) {
3838
polyLines.push_back(cv::Point2d(polyLineIterator->point.y, polyLineIterator->point.x));
39+
} else {
40+
if(polyLines.size() > 1) {
41+
cv::polylines(src, polyLines, false, mColor, mThicknes);
42+
polyLines.clear();
43+
}
3944
}
4045
}
4146

@@ -45,6 +50,42 @@ void GIS::ShapeRenderer::drawShape(const cv::Mat& src, Transform_t transform) {
4550
}
4651
}
4752
}
53+
} else if(getShapeType() == ShapeReader::ShapeType::stPolygon) {
54+
auto recordIterator = getRecordIterator();
55+
56+
if(recordIterator) {
57+
for(recordIterator->begin(); *recordIterator != recordIterator->end(); ++(*recordIterator)) {
58+
auto polyLineIterator = getPolyLineIterator(*recordIterator);
59+
60+
if(polyLineIterator) {
61+
bool isFirst = true;
62+
ShapeReader::Point first;
63+
std::vector<cv::Point> polyLines;
64+
for(polyLineIterator->begin(); *polyLineIterator != polyLineIterator->end(); ++(*polyLineIterator)) {
65+
if(!isFirst && (first == polyLineIterator->point)) {
66+
if(polyLines.size() > 1) {
67+
cv::polylines(src, polyLines, false, mColor, mThicknes);
68+
}
69+
isFirst = true;
70+
polyLines.clear();
71+
continue;
72+
}
73+
if(isFirst) {
74+
first = polyLineIterator->point;
75+
isFirst = false;
76+
}
77+
if(transform(polyLineIterator->point.y, polyLineIterator->point.x)) {
78+
polyLines.push_back(cv::Point2d(polyLineIterator->point.y, polyLineIterator->point.x));
79+
} else {
80+
if(polyLines.size() > 1) {
81+
cv::polylines(src, polyLines, false, mColor, mThicknes);
82+
polyLines.clear();
83+
}
84+
}
85+
}
86+
}
87+
}
88+
}
4889
} else if(getShapeType() == ShapeReader::ShapeType::stPoint) {
4990
auto recordIterator = getRecordIterator();
5091

cmake/version.h.in

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
#define VERSION_MAJOR @meteordemod_VERSION_MAJOR@
2+
#define VERSION_MINOR @meteordemod_VERSION_MINOR@
3+
#define VERSION_FIX @meteordemod_VERSION_PATCH@

common/settings.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,9 +79,10 @@ void Settings::parseIni(const std::string& path) {
7979
ini::extract(mIniParser.sections["Program"]["CompositeProjectionScale"], mCompositeProjectionScale, 0.75f);
8080
ini::extract(mIniParser.sections["Program"]["CompositeAzimuthalEquidistantProjection"], mCompositeEquadistantProjection, true);
8181
ini::extract(mIniParser.sections["Program"]["CompositeMercatorProjection"], mCompositeMercatorProjection, false);
82-
ini::extract(mIniParser.sections["Program"]["GenerateComposite123"], mGenerateComposite123, true);
82+
ini::extract(mIniParser.sections["Program"]["GenerateComposite321"], mGenerateComposite321, true);
8383
ini::extract(mIniParser.sections["Program"]["GenerateComposite125"], mGenerateComposite125, true);
8484
ini::extract(mIniParser.sections["Program"]["GenerateComposite221"], mGenerateComposite221, true);
85+
ini::extract(mIniParser.sections["Program"]["GenerateComposite224"], mGenerateComposite224, true);
8586
ini::extract(mIniParser.sections["Program"]["GenerateComposite68"], mGenerateComposite68, true);
8687
ini::extract(mIniParser.sections["Program"]["GenerateCompositeThermal"], mGenerateCompositeThermal, true);
8788
ini::extract(mIniParser.sections["Program"]["GenerateComposite68Rain"], mGenerateComposite68Rain, true);

common/settings.h

Lines changed: 25 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,15 @@ class Settings {
5858
uint8_t B;
5959
};
6060

61+
struct ProjectionSetting {
62+
std::string satelliteNameInTLE;
63+
float scanAngle;
64+
float yaw;
65+
float pitch;
66+
float roll;
67+
float timeOffsetMs;
68+
};
69+
6170
friend std::istream& operator>>(std::istream& is, HTMLColor& color) {
6271
std::string rgb;
6372
is >> rgb;
@@ -105,35 +114,15 @@ class Settings {
105114
return mJpegQuality;
106115
}
107116

108-
std::string getSatNameInTLE() {
109-
std::string name;
110-
ini::extract(mIniParser.sections[getSateliteName()]["SatNameInTLE"], name);
111-
return name;
112-
}
113-
float getScanAngle() {
114-
float angle;
115-
ini::extract(mIniParser.sections[getSateliteName()]["ScanAngle"], angle, 110.8f);
116-
return angle;
117-
}
118-
float getRoll() {
119-
float roll;
120-
ini::extract(mIniParser.sections[getSateliteName()]["Roll"], roll, 0.0f);
121-
return roll;
122-
}
123-
float getPitch() {
124-
float pitch;
125-
ini::extract(mIniParser.sections[getSateliteName()]["Pitch"], pitch, 0.0f);
126-
return pitch;
127-
}
128-
float getYaw() {
129-
float yaw;
130-
ini::extract(mIniParser.sections[getSateliteName()]["Yaw"], yaw, 0.0f);
131-
return yaw;
132-
}
133-
int getTimeOffsetSec() {
134-
int timeOffset;
135-
ini::extract(mIniParser.sections["Program"]["TimeOffset"], timeOffset, 0);
136-
return timeOffset;
117+
ProjectionSetting getProjectionSetting(const std::string& satellite) {
118+
ProjectionSetting result;
119+
ini::extract(mIniParser.sections[satellite]["SatNameInTLE"], result.satelliteNameInTLE);
120+
ini::extract(mIniParser.sections[satellite]["ScanAngle"], result.scanAngle, 110.8f);
121+
ini::extract(mIniParser.sections[satellite]["Roll"], result.roll, 0.0f);
122+
ini::extract(mIniParser.sections[satellite]["Pitch"], result.pitch, 0.0f);
123+
ini::extract(mIniParser.sections[satellite]["Yaw"], result.yaw, 0.0f);
124+
ini::extract(mIniParser.sections[satellite]["TimeOffset"], result.timeOffsetMs, 0.0f);
125+
return result;
137126
}
138127

139128
bool equadistantProjection() const {
@@ -164,15 +153,18 @@ class Settings {
164153
bool compositeMercatorProjection() const {
165154
return mCompositeMercatorProjection;
166155
}
167-
bool generateComposite123() const {
168-
return mGenerateComposite123;
156+
bool generateComposite321() const {
157+
return mGenerateComposite321;
169158
}
170159
bool generateComposite125() const {
171160
return mGenerateComposite125;
172161
}
173162
bool generateComposite221() const {
174163
return mGenerateComposite221;
175164
}
165+
bool generateComposite224() const {
166+
return mGenerateComposite224;
167+
}
176168
bool generateComposite68() const {
177169
return mGenerateComposite68;
178170
}
@@ -310,9 +302,10 @@ class Settings {
310302

311303
bool mCompositeEquadistantProjection;
312304
bool mCompositeMercatorProjection;
313-
bool mGenerateComposite123;
305+
bool mGenerateComposite321;
314306
bool mGenerateComposite125;
315307
bool mGenerateComposite221;
308+
bool mGenerateComposite224;
316309
bool mGenerateComposite68;
317310
bool mGenerateCompositeThermal;
318311
bool mGenerateComposite68Rain;

common/version.h

Lines changed: 0 additions & 8 deletions
This file was deleted.

decoder/bitio.h

Lines changed: 0 additions & 22 deletions
This file was deleted.

0 commit comments

Comments
 (0)