Skip to content

Commit 2bf07c9

Browse files
Encoding and decodiong methods changed
1 parent 3158cab commit 2bf07c9

16 files changed

+713
-159
lines changed

CMakeLists.txt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ endif()
3131
################################################################################
3232
SET(${PARENT}_VSOURCE ON CACHE BOOL "" ${REWRITE_FORCE})
3333
SET(${PARENT}_VSOURCE_TEST ON CACHE BOOL "" ${REWRITE_FORCE})
34+
SET(${PARENT}_VSOURCE_EXAMPLE ON CACHE BOOL "" ${REWRITE_FORCE})
3435

3536

3637

@@ -46,3 +47,7 @@ endif()
4647
if (${PARENT}_VSOURCE_TEST)
4748
add_subdirectory(test)
4849
endif()
50+
51+
if (${PARENT}_VSOURCE_EXAMPLE)
52+
add_subdirectory(example)
53+
endif()

README.md

Lines changed: 192 additions & 137 deletions
Large diffs are not rendered by default.

README.pdf

-193 KB
Binary file not shown.
208 KB
Binary file not shown.

_static/vsource_logo.png

-50.3 KB
Binary file not shown.

_static/vsource_web_logo.png

59.7 KB
Loading

example/CMakeLists.txt

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
cmake_minimum_required(VERSION 3.13)
2+
3+
4+
5+
###############################################################################
6+
## LIBRARY-PROJECT
7+
## name and version
8+
###############################################################################
9+
project(CustomVSource VERSION 1.0.0 LANGUAGES CXX)
10+
11+
12+
13+
###############################################################################
14+
## SETTINGS
15+
## basic project settings before use
16+
###############################################################################
17+
set(CMAKE_INCLUDE_CURRENT_DIR ON)
18+
set(CMAKE_CXX_STANDARD 17)
19+
set(CMAKE_CXX_STANDARD_REQUIRED ON)
20+
# Enabling export of all symbols to create a dynamic library
21+
set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON)
22+
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
23+
# creating output directory architecture in accordance with GNU guidelines
24+
set(BINARY_DIR "${CMAKE_BINARY_DIR}")
25+
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${BINARY_DIR}/bin")
26+
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${BINARY_DIR}/lib")
27+
file (GLOB_RECURSE IN_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.h.in)
28+
configure_file(${IN_FILES} ${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}Version.h)
29+
30+
31+
32+
###############################################################################
33+
## TARGET
34+
## create target and add include path
35+
###############################################################################
36+
# create glob files for *.h, *.cpp, *.hpp
37+
file (GLOB_RECURSE H_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.h)
38+
file (GLOB_RECURSE CPP_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp)
39+
file (GLOB_RECURSE HPP_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.hpp)
40+
41+
# concatenate the results (glob files) to variable
42+
set (SOURCES ${CPP_FILES} ${H_FILES})
43+
# create lib from src
44+
if (NOT TARGET ${PROJECT_NAME})
45+
add_library(${PROJECT_NAME} STATIC ${SOURCES})
46+
endif()
47+
target_include_directories(${PROJECT_NAME} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
48+
49+
50+
51+
###############################################################################
52+
## LINK LIBRARIES
53+
## linking all dependencies
54+
###############################################################################
55+
target_link_libraries(${PROJECT_NAME} VSource)
56+
57+

example/CustomVSource.cpp

Lines changed: 308 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,308 @@
1+
#include "CustomVSource.h"
2+
#include "CustomVSourceVersion.h"
3+
4+
5+
6+
cr::video::CustomVSource::CustomVSource()
7+
{
8+
// Reset open flag.
9+
m_params.isOpen = false;
10+
11+
// Init default output frame.
12+
m_outputFrame = Frame(1280, 720, Fourcc::BGR24);
13+
}
14+
15+
16+
17+
cr::video::CustomVSource::~CustomVSource()
18+
{
19+
20+
}
21+
22+
23+
24+
std::string cr::video::CustomVSource::getVersion()
25+
{
26+
return CUSTOM_VSOURCE_VERSION;
27+
}
28+
29+
30+
31+
bool cr::video::CustomVSource::openVSource(std::string& initString)
32+
{
33+
// Copy init string.
34+
m_params.source = initString;
35+
36+
// Set open flag.
37+
m_params.isOpen = true;
38+
39+
return true;
40+
}
41+
42+
43+
44+
bool cr::video::CustomVSource::initVSource(VSourceParams& params)
45+
{
46+
// Copy params.
47+
m_params = params;
48+
49+
// Set open flag.
50+
m_params.isOpen = true;
51+
52+
return true;
53+
}
54+
55+
56+
57+
bool cr::video::CustomVSource::isVSourceOpen()
58+
{
59+
return m_params.isOpen;
60+
}
61+
62+
63+
64+
void cr::video::CustomVSource::closeVSource()
65+
{
66+
// Reset open flag.
67+
m_params.isOpen = false;
68+
}
69+
70+
71+
72+
bool cr::video::CustomVSource::getFrame(Frame& frame, int32_t timeoutMsec)
73+
{
74+
// Copy frame.
75+
frame = m_outputFrame;
76+
77+
return true;
78+
}
79+
80+
81+
82+
bool cr::video::CustomVSource::setParam(VSourceParam id, float value)
83+
{
84+
// Check param ID.
85+
switch (id)
86+
{
87+
case cr::video::VSourceParam::LOG_LEVEL:
88+
{
89+
m_params.logLevel = (int)value;
90+
return true;
91+
}
92+
case cr::video::VSourceParam::WIDTH:
93+
{
94+
m_params.width = (int)value;
95+
return true;
96+
}
97+
case cr::video::VSourceParam::HEIGHT:
98+
{
99+
m_params.height = (int)value;
100+
return true;
101+
}
102+
case cr::video::VSourceParam::GAIN_MODE:
103+
{
104+
m_params.gainMode = (int)value;
105+
return true;
106+
}
107+
case cr::video::VSourceParam::GAIN:
108+
{
109+
m_params.gain = (int)value;
110+
return true;
111+
}
112+
case cr::video::VSourceParam::EXPOSURE_MODE:
113+
{
114+
m_params.exposureMode = (int)value;
115+
return true;
116+
}
117+
case cr::video::VSourceParam::EXPOSURE:
118+
{
119+
m_params.exposure = (int)value;
120+
return true;
121+
}
122+
case cr::video::VSourceParam::FOCUS_MODE:
123+
{
124+
m_params.focusMode = (int)value;
125+
return true;
126+
}
127+
case cr::video::VSourceParam::FOCUS_POS:
128+
{
129+
m_params.focusPos = (int)value;
130+
return true;
131+
}
132+
case cr::video::VSourceParam::CYCLE_TIME_MKS:
133+
{
134+
// Read only param.
135+
return false;
136+
}
137+
case cr::video::VSourceParam::FPS:
138+
{
139+
m_params.fps = value;
140+
return true;
141+
}
142+
case cr::video::VSourceParam::IS_OPEN:
143+
{
144+
// Read only param.
145+
return false;
146+
}
147+
case cr::video::VSourceParam::CUSTOM_1:
148+
{
149+
m_params.custom1 = value;
150+
return true;
151+
}
152+
case cr::video::VSourceParam::CUSTOM_2:
153+
{
154+
m_params.custom2 = value;
155+
return true;
156+
}
157+
case cr::video::VSourceParam::CUSTOM_3:
158+
{
159+
m_params.custom3 = value;
160+
return true;
161+
}
162+
default:
163+
{
164+
return false;
165+
}
166+
}
167+
168+
return false;
169+
}
170+
171+
172+
173+
float cr::video::CustomVSource::getParam(VSourceParam id)
174+
{
175+
// Check param ID.
176+
switch (id)
177+
{
178+
case cr::video::VSourceParam::LOG_LEVEL:
179+
{
180+
return (float)m_params.logLevel;
181+
}
182+
case cr::video::VSourceParam::WIDTH:
183+
{
184+
return (float)m_params.width;
185+
}
186+
case cr::video::VSourceParam::HEIGHT:
187+
{
188+
return (float)m_params.height;
189+
}
190+
case cr::video::VSourceParam::GAIN_MODE:
191+
{
192+
return (float)m_params.gainMode;
193+
}
194+
case cr::video::VSourceParam::GAIN:
195+
{
196+
return (float)m_params.gain;
197+
}
198+
case cr::video::VSourceParam::EXPOSURE_MODE:
199+
{
200+
return (float)m_params.exposureMode;
201+
}
202+
case cr::video::VSourceParam::EXPOSURE:
203+
{
204+
return (float)m_params.exposure;
205+
}
206+
case cr::video::VSourceParam::FOCUS_MODE:
207+
{
208+
return (float)m_params.focusMode;
209+
}
210+
case cr::video::VSourceParam::FOCUS_POS:
211+
{
212+
return (float)m_params.focusPos;
213+
}
214+
case cr::video::VSourceParam::CYCLE_TIME_MKS:
215+
{
216+
return (float)m_params.cycleTimeMks;
217+
}
218+
case cr::video::VSourceParam::FPS:
219+
{
220+
return m_params.fps;
221+
}
222+
case cr::video::VSourceParam::IS_OPEN:
223+
{
224+
return m_params.isOpen ? 1.0f : 0.0f;
225+
}
226+
case cr::video::VSourceParam::CUSTOM_1:
227+
{
228+
return m_params.custom1;
229+
}
230+
case cr::video::VSourceParam::CUSTOM_2:
231+
{
232+
return m_params.custom2;
233+
}
234+
case cr::video::VSourceParam::CUSTOM_3:
235+
{
236+
return m_params.custom3;
237+
}
238+
default:
239+
{
240+
return -1.0f;
241+
}
242+
}
243+
244+
return -1.0f;
245+
}
246+
247+
248+
249+
cr::video::VSourceParams cr::video::CustomVSource::getParams()
250+
{
251+
return m_params;
252+
}
253+
254+
255+
256+
bool cr::video::CustomVSource::executeCommand(VSourceCommand id)
257+
{
258+
// Check command ID.
259+
switch (id)
260+
{
261+
case cr::video::VSourceCommand::RESTART:
262+
{
263+
return true;
264+
}
265+
default:
266+
{
267+
return false;
268+
}
269+
}
270+
271+
return false;
272+
}
273+
274+
275+
276+
bool cr::video::CustomVSource::decodeAndExecuteCommand(uint8_t* data, int size)
277+
{
278+
// Decode command.
279+
VSourceCommand commandId = VSourceCommand::RESTART;
280+
VSourceParam paramId = VSourceParam::CUSTOM_1;
281+
float value = 0.0f;
282+
switch (VSource::decodeCommand(data, size, paramId, commandId, value))
283+
{
284+
// COMMAND.
285+
case 0:
286+
// Executte command.
287+
return executeCommand(commandId);
288+
// SET_PARAM.
289+
case 1:
290+
{
291+
// Set param.
292+
return setParam(paramId, value);
293+
}
294+
default:
295+
{
296+
return false;
297+
}
298+
}
299+
300+
return false;
301+
}
302+
303+
304+
305+
306+
307+
308+

0 commit comments

Comments
 (0)