0001-OpenCVFindXimea.cmake-update.patch

Marian Zajko, 2012-11-29 05:09 pm

Download (47.5 kB)

 
b/cmake/OpenCVFindXimea.cmake
1
# - Find XIMEA
2
# This module finds if XIMEA Software package is installed
3
# and determines where the binaries and header files are.
4
# This code sets the following variables:
5
#
6
#  XIMEA_FOUND          - True if XIMEA API found
7
#  XIMEA_PATH:          - Path to the XIMEA API folder
8
#  XIMEA_LIBRARY_DIR    - XIMEA libraries folder
9
#
10
# Created: 5 Aug 2011 by Marian Zajko ([email protected])
11
# Updated: 25 June 2012 by Igor Kuzmin ([email protected])
12
#
13

  
14
set(XIMEA_FOUND)
15
set(XIMEA_PATH)
16
set(XIMEA_LIBRARY_DIR)
17

  
18
if(WIN32)
19
  # Try to find the XIMEA API path in registry.
20
  GET_FILENAME_COMPONENT(XIMEA_PATH "[HKEY_CURRENT_USER\\Software\\XIMEA\\CamSupport\\API;Path]" ABSOLUTE)
21

  
22
  if(EXISTS XIMEA_PATH)
23
    set(XIMEA_FOUND 1)
24
    # set LIB folders
25
    set(XIMEA_LIBRARY_DIR "${XIMEA_PATH}/x86")
26
  else()
27
    set(XIMEA_FOUND 0)
28
  endif()
29
else()
30
  if(EXISTS /opt/XIMEA)
31
    set(XIMEA_FOUND 1)
32
    # set folders
33
    set(XIMEA_PATH /opt/XIMEA/include)
34
  else()
35
    set(XIMEA_FOUND 0)
36
  endif()
37
endif()
38

  
39
mark_as_advanced(FORCE XIMEA_FOUND)
40
mark_as_advanced(FORCE XIMEA_PATH)
41
mark_as_advanced(FORCE XIMEA_LIBRARY_DIR)
42

  
1
# - Find XIMEA
2
# This module finds if XIMEA Software package is installed
3
# and determines where the binaries and header files are.
4
# This code sets the following variables:
5
#
6
#  XIMEA_FOUND          - True if XIMEA API found
7
#  XIMEA_PATH:          - Path to the XIMEA API folder
8
#  XIMEA_LIBRARY_DIR    - XIMEA libraries folder
9
#
10
# Created: 5 Aug 2011 by Marian Zajko ([email protected])
11
# Updated: 25 June 2012 by Igor Kuzmin ([email protected])
12
# Updated: 22 October 2012 by Marian Zajko ([email protected])
13
#
14

  
15
set(XIMEA_FOUND)
16
set(XIMEA_PATH)
17
set(XIMEA_LIBRARY_DIR)
18

  
19
if(WIN32)
20
  # Try to find the XIMEA API path in registry.
21
  GET_FILENAME_COMPONENT(XIMEA_PATH "[HKEY_CURRENT_USER\\Software\\XIMEA\\CamSupport\\API;Path]" ABSOLUTE)
22
 
23
  if(EXISTS ${XIMEA_PATH})
24
    set(XIMEA_FOUND 1)
25
    # set LIB folders
26
    if(CMAKE_CL_64)
27
      set(XIMEA_LIBRARY_DIR "${XIMEA_PATH}/x64")
28
    else()
29
      set(XIMEA_LIBRARY_DIR "${XIMEA_PATH}/x86")
30
    endif()
31
  else()
32
    set(XIMEA_FOUND 0)
33
  endif()
34
else()
35
  if(EXISTS /opt/XIMEA)
36
    set(XIMEA_FOUND 1)
37
    # set folders
38
    set(XIMEA_PATH /opt/XIMEA/include)
39
  else()
40
    set(XIMEA_FOUND 0)
41
  endif()
42
endif()
43

  
44
mark_as_advanced(FORCE XIMEA_FOUND)
45
mark_as_advanced(FORCE XIMEA_PATH)
46
mark_as_advanced(FORCE XIMEA_LIBRARY_DIR)
47

  
b/modules/highgui/CMakeLists.txt
1
set(the_description "High-level GUI and Media I/O")
2
ocv_add_module(highgui opencv_imgproc OPTIONAL opencv_androidcamera)
3

  
4
# ----------------------------------------------------------------------------
5
#  CMake file for highgui. See root CMakeLists.txt
6
#   Some parts taken from version of Hartmut Seichter, HIT Lab NZ.
7
#   Jose Luis Blanco, 2008
8
# ----------------------------------------------------------------------------
9

  
10
ocv_clear_vars(GRFMT_LIBS)
11

  
12
if(WITH_PNG OR WITH_TIFF OR WITH_OPENEXR)
13
  ocv_include_directories(${ZLIB_INCLUDE_DIR})
14
  list(APPEND GRFMT_LIBS ${ZLIB_LIBRARIES})
15
endif()
16

  
17
if(WITH_JPEG)
18
  add_definitions(-DHAVE_JPEG)
19
  ocv_include_directories(${JPEG_INCLUDE_DIR})
20
  list(APPEND GRFMT_LIBS ${JPEG_LIBRARIES})
21
endif()
22

  
23
if(WITH_PNG)
24
  add_definitions(-DHAVE_PNG)
25
  add_definitions(${PNG_DEFINITIONS})
26
  ocv_include_directories(${PNG_INCLUDE_DIR})
27
  list(APPEND GRFMT_LIBS ${PNG_LIBRARIES})
28
endif()
29

  
30
if(WITH_TIFF)
31
  add_definitions(-DHAVE_TIFF)
32
  ocv_include_directories(${TIFF_INCLUDE_DIR})
33
  list(APPEND GRFMT_LIBS ${TIFF_LIBRARIES})
34
endif()
35

  
36
if(WITH_JASPER)
37
  add_definitions(-DHAVE_JASPER)
38
  ocv_include_directories(${JASPER_INCLUDE_DIR})
39
  list(APPEND GRFMT_LIBS ${JASPER_LIBRARIES})
40
endif()
41

  
42
if(WITH_OPENEXR)
43
  add_definitions(-DHAVE_OPENEXR)
44
  include_directories(SYSTEM ${OPENEXR_INCLUDE_PATHS})
45
  list(APPEND GRFMT_LIBS ${OPENEXR_LIBRARIES})
46
endif()
47

  
48
file(GLOB grfmt_hdrs src/grfmt*.hpp)
49
file(GLOB grfmt_srcs src/grfmt*.cpp)
50
list(APPEND grfmt_hdrs src/bitstrm.hpp)
51
list(APPEND grfmt_srcs src/bitstrm.cpp)
52

  
53
source_group("Src\\grfmts" FILES ${grfmt_hdrs} ${grfmt_srcs})
54

  
55
set(highgui_hdrs
56
    src/precomp.hpp
57
    src/utils.hpp
58
    src/cap_ffmpeg_impl.hpp
59
    )
60

  
61
set(highgui_srcs
62
    src/cap.cpp
63
    src/cap_images.cpp
64
    src/cap_ffmpeg.cpp
65
    src/loadsave.cpp
66
    src/precomp.cpp
67
    src/utils.cpp
68
    src/window.cpp
69
    )
70

  
71
file(GLOB highgui_ext_hdrs "include/opencv2/${name}/*.hpp" "include/opencv2/${name}/*.h")
72

  
73
if(HAVE_QT)
74
  if (HAVE_QT_OPENGL)
75
    set(QT_USE_QTOPENGL TRUE)
76
  endif()
77
  include(${QT_USE_FILE})
78

  
79
  if(QT_INCLUDE_DIR)
80
    ocv_include_directories(${QT_INCLUDE_DIR})
81
  endif()
82

  
83
  QT4_ADD_RESOURCES(_RCC_OUTFILES src/window_QT.qrc)
84
  QT4_WRAP_CPP(_MOC_OUTFILES src/window_QT.h)
85

  
86
  list(APPEND HIGHGUI_LIBRARIES ${QT_LIBRARIES} ${QT_QTTEST_LIBRARY})
87
  list(APPEND highgui_srcs src/window_QT.cpp ${_MOC_OUTFILES} ${_RCC_OUTFILES})
88
  ocv_check_flag_support(CXX -Wno-missing-declarations _have_flag)
89
  if(${_have_flag})
90
    set_source_files_properties(${_RCC_OUTFILES} PROPERTIES COMPILE_FLAGS -Wno-missing-declarations)
91
  endif()
92
elseif(WIN32)
93
  list(APPEND highgui_srcs src/window_w32.cpp)
94
elseif(HAVE_GTK)
95
  list(APPEND highgui_srcs src/window_gtk.cpp)
96
elseif(APPLE)
97
  if(WITH_CARBON)
98
    add_definitions(-DHAVE_CARBON=1)
99
    list(APPEND highgui_srcs src/window_carbon.cpp)
100
    list(APPEND HIGHGUI_LIBRARIES "-framework Carbon" "-framework QuickTime")
101
  elseif(NOT IOS)
102
    add_definitions(-DHAVE_COCOA=1)
103
    list(APPEND highgui_srcs src/window_cocoa.mm)
104
    list(APPEND HIGHGUI_LIBRARIES "-framework Cocoa")
105
  endif()
106
endif()
107

  
108
if(WIN32)
109
  list(APPEND highgui_srcs src/cap_vfw.cpp src/cap_cmu.cpp src/cap_dshow.cpp)
110
endif(WIN32)
111

  
112
if(HAVE_XINE)
113
  list(APPEND highgui_srcs src/cap_xine.cpp)
114
endif(HAVE_XINE)
115

  
116
if(HAVE_DC1394_2)
117
  list(APPEND highgui_srcs src/cap_dc1394_v2.cpp)
118
endif(HAVE_DC1394_2)
119

  
120
if(HAVE_DC1394)
121
  list(APPEND highgui_srcs src/cap_dc1394.cpp)
122
endif(HAVE_DC1394)
123

  
124
if(HAVE_GSTREAMER)
125
  list(APPEND highgui_srcs src/cap_gstreamer.cpp)
126
endif(HAVE_GSTREAMER)
127

  
128
if(HAVE_UNICAP)
129
  list(APPEND highgui_srcs src/cap_unicap.cpp)
130
endif(HAVE_UNICAP)
131

  
132
if(HAVE_LIBV4L)
133
  list(APPEND highgui_srcs src/cap_libv4l.cpp)
134
elseif(HAVE_CAMV4L OR HAVE_CAMV4L2)
135
  list(APPEND highgui_srcs src/cap_v4l.cpp)
136
endif()
137

  
138
if(HAVE_OPENNI)
139
  list(APPEND highgui_srcs src/cap_openni.cpp)
140
  ocv_include_directories(${OPENNI_INCLUDE_DIR})
141
  list(APPEND HIGHGUI_LIBRARIES ${OPENNI_LIBRARY})
142
endif(HAVE_OPENNI)
143

  
144
if(HAVE_opencv_androidcamera)
145
  list(APPEND highgui_srcs src/cap_android.cpp)
146
  add_definitions(-DHAVE_ANDROID_NATIVE_CAMERA)#TODO: remove this line
147
endif(HAVE_opencv_androidcamera)
148

  
149
if(HAVE_XIMEA)
150
  list(APPEND highgui_srcs src/cap_ximea.cpp)
151
  ocv_include_directories(${XIMEA_PATH})
152
  if(XIMEA_LIBRARY_DIR)
153
    link_directories(${XIMEA_LIBRARY_DIR})
154
  endif()
155
  list(APPEND HIGHGUI_LIBRARIES m3api)
156
endif(HAVE_XIMEA)
157

  
158
if(HAVE_FFMPEG)
159
  if(UNIX AND BZIP2_LIBRARIES)
160
    list(APPEND HIGHGUI_LIBRARIES ${BZIP2_LIBRARIES})
161
  endif()
162
  if(APPLE)
163
    list(APPEND HIGHGUI_LIBRARIES "-framework VideoDecodeAcceleration" bz2)
164
  endif()
165
endif(HAVE_FFMPEG)
166

  
167
if(HAVE_PVAPI)
168
  add_definitions(-DHAVE_PVAPI)
169
  ocv_include_directories(${PVAPI_INCLUDE_PATH})
170
  set(highgui_srcs src/cap_pvapi.cpp ${highgui_srcs})
171
  list(APPEND HIGHGUI_LIBRARIES ${PVAPI_LIBRARY})
172
endif()
173

  
174
if(HAVE_GIGE_API)
175
  add_definitions(-DHAVE_GIGE_API)
176
  ocv_include_directories(${GIGEAPI_INCLUDE_PATH})
177
  set(highgui_srcs src/cap_giganetix.cpp ${highgui_srcs})
178
  list(APPEND HIGHGUI_LIBRARIES ${GIGEAPI_LIBRARIES})
179
  list(APPEND highgui_srcs src/cap_giganetix.cpp)
180
endif(HAVE_GIGE_API)
181

  
182
if(WITH_IMAGEIO)
183
  add_definitions(-DHAVE_IMAGEIO=1)
184
  if(IOS)
185
    list(APPEND HIGHGUI_LIBRARIES "-framework ImageIO")
186
  endif()
187
endif(WITH_IMAGEIO)
188

  
189
if(WITH_AVFOUNDATION)
190
  add_definitions(-DHAVE_AVFOUNDATION=1)
191
  list(APPEND highgui_srcs src/cap_avfoundation.mm)
192
  list(APPEND HIGHGUI_LIBRARIES "-framework AVFoundation" "-framework QuartzCore")
193
elseif(APPLE)
194
  add_definitions(-DHAVE_QUICKTIME=1)
195
  if(WITH_QUICKTIME)
196
    list(APPEND highgui_srcs src/cap_qt.cpp)
197
    list(APPEND HIGHGUI_LIBRARIES "-framework Carbon" "-framework QuickTime" "-framework CoreFoundation" "-framework QuartzCore")
198
  else()
199
    list(APPEND highgui_srcs src/cap_qtkit.mm)
200
    list(APPEND HIGHGUI_LIBRARIES "-framework QTKit" "-framework QuartzCore" "-framework AppKit")
201
  endif()
202
endif()
203

  
204
if(IOS)
205
  add_definitions(-DHAVE_IOS=1)
206
  list(APPEND highgui_srcs src/cap_ios_abstract_camera.mm src/cap_ios_photo_camera.mm src/cap_ios_video_camera.mm)
207
  list(APPEND HIGHGUI_LIBRARIES "-framework Accelerate" "-framework AVFoundation" "-framework CoreGraphics" "-framework CoreImage" "-framework CoreMedia" "-framework CoreVideo" "-framework QuartzCore" "-framework AssetsLibrary")
208
endif()
209

  
210
if(WIN32)
211
  link_directories("${OpenCV_SOURCE_DIR}/3rdparty/lib") # for ffmpeg wrapper only
212
  include_directories(AFTER SYSTEM "${OpenCV_SOURCE_DIR}/3rdparty/include") # for directshow in VS2005 and multi-monitor support on MinGW
213
endif()
214

  
215
if(UNIX)
216
  #these variables are set by CHECK_MODULE macro
217
  foreach(P ${HIGHGUI_INCLUDE_DIRS})
218
    ocv_include_directories(${P})
219
  endforeach()
220

  
221
  foreach(P ${HIGHGUI_LIBRARY_DIRS})
222
    link_directories(${P})
223
  endforeach()
224
endif()
225

  
226
source_group("Src" FILES ${highgui_srcs} ${highgui_hdrs})
227
source_group("Include" FILES ${highgui_ext_hdrs})
228
ocv_set_module_sources(HEADERS ${highgui_ext_hdrs} SOURCES ${highgui_srcs} ${highgui_hdrs} ${grfmt_srcs} ${grfmt_hdrs})
229
ocv_module_include_directories()
230

  
231
ocv_create_module(${GRFMT_LIBS} ${HIGHGUI_LIBRARIES})
232

  
233
if(BUILD_SHARED_LIBS)
234
  add_definitions(-DHIGHGUI_EXPORTS)
235
endif()
236

  
237
if(MSVC)
238
  set_target_properties(${the_module} PROPERTIES LINK_FLAGS "/NODEFAULTLIB:atlthunk.lib /NODEFAULTLIB:atlsd.lib /NODEFAULTLIB:libcmt.lib /DEBUG")
239
endif()
240

  
241
#stop automatic dependencies propagation for this module
242
set_target_properties(${the_module} PROPERTIES LINK_INTERFACE_LIBRARIES "")
243

  
244
ocv_add_precompiled_headers(${the_module})
245
ocv_warnings_disable(CMAKE_CXX_FLAGS -Wno-deprecated-declarations)
246

  
247
if(WIN32 AND WITH_FFMPEG)
248
  #copy ffmpeg dll to the output folder
249
  if(MSVC64 OR MINGW64)
250
    set(FFMPEG_SUFFIX _64)
251
  endif()
252

  
253
  set(ffmpeg_bare_name "opencv_ffmpeg${FFMPEG_SUFFIX}.dll")
254
  set(ffmpeg_bare_name_ver "opencv_ffmpeg${OPENCV_DLLVERSION}${FFMPEG_SUFFIX}.dll")
255
  set(ffmpeg_path "${OpenCV_SOURCE_DIR}/3rdparty/ffmpeg/${ffmpeg_bare_name}")
256

  
257
  #if(MSVC AND CMAKE_VERSION VERSION_GREATER "2.8.2")
258
  #  add_custom_command(TARGET ${the_module} POST_BUILD
259
  #                     COMMAND ${CMAKE_COMMAND} -E copy "${ffmpeg_path}" "${EXECUTABLE_OUTPUT_PATH}/$<CONFIGURATION>/${ffmpeg_bare_name_ver}"
260
  #                     COMMENT "Copying ${ffmpeg_path} to the output directory")
261
  #else
262
  if(MSVC_IDE)
263
    add_custom_command(TARGET ${the_module} POST_BUILD
264
                       COMMAND ${CMAKE_COMMAND} -E copy "${ffmpeg_path}" "${EXECUTABLE_OUTPUT_PATH}/Release/${ffmpeg_bare_name_ver}"
265
                       COMMAND ${CMAKE_COMMAND} -E copy "${ffmpeg_path}" "${EXECUTABLE_OUTPUT_PATH}/Debug/${ffmpeg_bare_name_ver}"
266
                       COMMENT "Copying ${ffmpeg_path} to the output directory")
267
  elseif(MSVC)
268
    add_custom_command(TARGET ${the_module} POST_BUILD
269
                       COMMAND ${CMAKE_COMMAND} -E copy "${ffmpeg_path}" "${EXECUTABLE_OUTPUT_PATH}/${CMAKE_BUILD_TYPE}/${ffmpeg_bare_name_ver}"
270
                       COMMENT "Copying ${ffmpeg_path} to the output directory")
271
  else()
272
    add_custom_command(TARGET ${the_module} POST_BUILD
273
                       COMMAND ${CMAKE_COMMAND} -E copy "${ffmpeg_path}" "${EXECUTABLE_OUTPUT_PATH}/${ffmpeg_bare_name_ver}"
274
                       COMMENT "Copying ${ffmpeg_path} to the output directory")
275
  endif()
276

  
277
  install(FILES "${ffmpeg_path}" DESTINATION bin COMPONENT main RENAME "${ffmpeg_bare_name_ver}")
278
endif()
279

  
280
ocv_add_accuracy_tests()
281
ocv_add_perf_tests()
1
set(the_description "High-level GUI and Media I/O")
2
ocv_add_module(highgui opencv_imgproc OPTIONAL opencv_androidcamera)
3

  
4
# ----------------------------------------------------------------------------
5
#  CMake file for highgui. See root CMakeLists.txt
6
#   Some parts taken from version of Hartmut Seichter, HIT Lab NZ.
7
#   Jose Luis Blanco, 2008
8
# ----------------------------------------------------------------------------
9

  
10
ocv_clear_vars(GRFMT_LIBS)
11

  
12
if(WITH_PNG OR WITH_TIFF OR WITH_OPENEXR)
13
  ocv_include_directories(${ZLIB_INCLUDE_DIR})
14
  list(APPEND GRFMT_LIBS ${ZLIB_LIBRARIES})
15
endif()
16

  
17
if(WITH_JPEG)
18
  add_definitions(-DHAVE_JPEG)
19
  ocv_include_directories(${JPEG_INCLUDE_DIR})
20
  list(APPEND GRFMT_LIBS ${JPEG_LIBRARIES})
21
endif()
22

  
23
if(WITH_PNG)
24
  add_definitions(-DHAVE_PNG)
25
  add_definitions(${PNG_DEFINITIONS})
26
  ocv_include_directories(${PNG_INCLUDE_DIR})
27
  list(APPEND GRFMT_LIBS ${PNG_LIBRARIES})
28
endif()
29

  
30
if(WITH_TIFF)
31
  add_definitions(-DHAVE_TIFF)
32
  ocv_include_directories(${TIFF_INCLUDE_DIR})
33
  list(APPEND GRFMT_LIBS ${TIFF_LIBRARIES})
34
endif()
35

  
36
if(WITH_JASPER)
37
  add_definitions(-DHAVE_JASPER)
38
  ocv_include_directories(${JASPER_INCLUDE_DIR})
39
  list(APPEND GRFMT_LIBS ${JASPER_LIBRARIES})
40
endif()
41

  
42
if(WITH_OPENEXR)
43
  add_definitions(-DHAVE_OPENEXR)
44
  include_directories(SYSTEM ${OPENEXR_INCLUDE_PATHS})
45
  list(APPEND GRFMT_LIBS ${OPENEXR_LIBRARIES})
46
endif()
47

  
48
file(GLOB grfmt_hdrs src/grfmt*.hpp)
49
file(GLOB grfmt_srcs src/grfmt*.cpp)
50
list(APPEND grfmt_hdrs src/bitstrm.hpp)
51
list(APPEND grfmt_srcs src/bitstrm.cpp)
52

  
53
source_group("Src\\grfmts" FILES ${grfmt_hdrs} ${grfmt_srcs})
54

  
55
set(highgui_hdrs
56
    src/precomp.hpp
57
    src/utils.hpp
58
    src/cap_ffmpeg_impl.hpp
59
    )
60

  
61
set(highgui_srcs
62
    src/cap.cpp
63
    src/cap_images.cpp
64
    src/cap_ffmpeg.cpp
65
    src/loadsave.cpp
66
    src/precomp.cpp
67
    src/utils.cpp
68
    src/window.cpp
69
    )
70

  
71
file(GLOB highgui_ext_hdrs "include/opencv2/${name}/*.hpp" "include/opencv2/${name}/*.h")
72

  
73
if(HAVE_QT)
74
  if (HAVE_QT_OPENGL)
75
    set(QT_USE_QTOPENGL TRUE)
76
  endif()
77
  include(${QT_USE_FILE})
78

  
79
  if(QT_INCLUDE_DIR)
80
    ocv_include_directories(${QT_INCLUDE_DIR})
81
  endif()
82

  
83
  QT4_ADD_RESOURCES(_RCC_OUTFILES src/window_QT.qrc)
84
  QT4_WRAP_CPP(_MOC_OUTFILES src/window_QT.h)
85

  
86
  list(APPEND HIGHGUI_LIBRARIES ${QT_LIBRARIES} ${QT_QTTEST_LIBRARY})
87
  list(APPEND highgui_srcs src/window_QT.cpp ${_MOC_OUTFILES} ${_RCC_OUTFILES})
88
  ocv_check_flag_support(CXX -Wno-missing-declarations _have_flag)
89
  if(${_have_flag})
90
    set_source_files_properties(${_RCC_OUTFILES} PROPERTIES COMPILE_FLAGS -Wno-missing-declarations)
91
  endif()
92
elseif(WIN32)
93
  list(APPEND highgui_srcs src/window_w32.cpp)
94
elseif(HAVE_GTK)
95
  list(APPEND highgui_srcs src/window_gtk.cpp)
96
elseif(APPLE)
97
  if(WITH_CARBON)
98
    add_definitions(-DHAVE_CARBON=1)
99
    list(APPEND highgui_srcs src/window_carbon.cpp)
100
    list(APPEND HIGHGUI_LIBRARIES "-framework Carbon" "-framework QuickTime")
101
  elseif(NOT IOS)
102
    add_definitions(-DHAVE_COCOA=1)
103
    list(APPEND highgui_srcs src/window_cocoa.mm)
104
    list(APPEND HIGHGUI_LIBRARIES "-framework Cocoa")
105
  endif()
106
endif()
107

  
108
if(WIN32)
109
  list(APPEND highgui_srcs src/cap_vfw.cpp src/cap_cmu.cpp src/cap_dshow.cpp)
110
endif(WIN32)
111

  
112
if(HAVE_XINE)
113
  list(APPEND highgui_srcs src/cap_xine.cpp)
114
endif(HAVE_XINE)
115

  
116
if(HAVE_DC1394_2)
117
  list(APPEND highgui_srcs src/cap_dc1394_v2.cpp)
118
endif(HAVE_DC1394_2)
119

  
120
if(HAVE_DC1394)
121
  list(APPEND highgui_srcs src/cap_dc1394.cpp)
122
endif(HAVE_DC1394)
123

  
124
if(HAVE_GSTREAMER)
125
  list(APPEND highgui_srcs src/cap_gstreamer.cpp)
126
endif(HAVE_GSTREAMER)
127

  
128
if(HAVE_UNICAP)
129
  list(APPEND highgui_srcs src/cap_unicap.cpp)
130
endif(HAVE_UNICAP)
131

  
132
if(HAVE_LIBV4L)
133
  list(APPEND highgui_srcs src/cap_libv4l.cpp)
134
elseif(HAVE_CAMV4L OR HAVE_CAMV4L2)
135
  list(APPEND highgui_srcs src/cap_v4l.cpp)
136
endif()
137

  
138
if(HAVE_OPENNI)
139
  list(APPEND highgui_srcs src/cap_openni.cpp)
140
  ocv_include_directories(${OPENNI_INCLUDE_DIR})
141
  list(APPEND HIGHGUI_LIBRARIES ${OPENNI_LIBRARY})
142
endif(HAVE_OPENNI)
143

  
144
if(HAVE_opencv_androidcamera)
145
  list(APPEND highgui_srcs src/cap_android.cpp)
146
  add_definitions(-DHAVE_ANDROID_NATIVE_CAMERA)#TODO: remove this line
147
endif(HAVE_opencv_androidcamera)
148

  
149
if(HAVE_XIMEA)
150
  list(APPEND highgui_srcs src/cap_ximea.cpp)
151
  ocv_include_directories(${XIMEA_PATH})
152
  if(XIMEA_LIBRARY_DIR)
153
    link_directories(${XIMEA_LIBRARY_DIR})
154
  endif()
155
  if(CMAKE_CL_64)
156
    list(APPEND HIGHGUI_LIBRARIES m3apiX64)
157
  else()
158
    list(APPEND HIGHGUI_LIBRARIES m3api)
159
  endif()
160
endif(HAVE_XIMEA)
161

  
162
if(HAVE_FFMPEG)
163
  if(UNIX AND BZIP2_LIBRARIES)
164
    list(APPEND HIGHGUI_LIBRARIES ${BZIP2_LIBRARIES})
165
  endif()
166
  if(APPLE)
167
    list(APPEND HIGHGUI_LIBRARIES "-framework VideoDecodeAcceleration" bz2)
168
  endif()
169
endif(HAVE_FFMPEG)
170

  
171
if(HAVE_PVAPI)
172
  add_definitions(-DHAVE_PVAPI)
173
  ocv_include_directories(${PVAPI_INCLUDE_PATH})
174
  set(highgui_srcs src/cap_pvapi.cpp ${highgui_srcs})
175
  list(APPEND HIGHGUI_LIBRARIES ${PVAPI_LIBRARY})
176
endif()
177

  
178
if(HAVE_GIGE_API)
179
  add_definitions(-DHAVE_GIGE_API)
180
  ocv_include_directories(${GIGEAPI_INCLUDE_PATH})
181
  set(highgui_srcs src/cap_giganetix.cpp ${highgui_srcs})
182
  list(APPEND HIGHGUI_LIBRARIES ${GIGEAPI_LIBRARIES})
183
  list(APPEND highgui_srcs src/cap_giganetix.cpp)
184
endif(HAVE_GIGE_API)
185

  
186
if(WITH_IMAGEIO)
187
  add_definitions(-DHAVE_IMAGEIO=1)
188
  if(IOS)
189
    list(APPEND HIGHGUI_LIBRARIES "-framework ImageIO")
190
  endif()
191
endif(WITH_IMAGEIO)
192

  
193
if(WITH_AVFOUNDATION)
194
  add_definitions(-DHAVE_AVFOUNDATION=1)
195
  list(APPEND highgui_srcs src/cap_avfoundation.mm)
196
  list(APPEND HIGHGUI_LIBRARIES "-framework AVFoundation" "-framework QuartzCore")
197
elseif(APPLE)
198
  add_definitions(-DHAVE_QUICKTIME=1)
199
  if(WITH_QUICKTIME)
200
    list(APPEND highgui_srcs src/cap_qt.cpp)
201
    list(APPEND HIGHGUI_LIBRARIES "-framework Carbon" "-framework QuickTime" "-framework CoreFoundation" "-framework QuartzCore")
202
  else()
203
    list(APPEND highgui_srcs src/cap_qtkit.mm)
204
    list(APPEND HIGHGUI_LIBRARIES "-framework QTKit" "-framework QuartzCore" "-framework AppKit")
205
  endif()
206
endif()
207

  
208
if(IOS)
209
  add_definitions(-DHAVE_IOS=1)
210
  list(APPEND highgui_srcs src/cap_ios_abstract_camera.mm src/cap_ios_photo_camera.mm src/cap_ios_video_camera.mm)
211
  list(APPEND HIGHGUI_LIBRARIES "-framework Accelerate" "-framework AVFoundation" "-framework CoreGraphics" "-framework CoreImage" "-framework CoreMedia" "-framework CoreVideo" "-framework QuartzCore" "-framework AssetsLibrary")
212
endif()
213

  
214
if(WIN32)
215
  link_directories("${OpenCV_SOURCE_DIR}/3rdparty/lib") # for ffmpeg wrapper only
216
  include_directories(AFTER SYSTEM "${OpenCV_SOURCE_DIR}/3rdparty/include") # for directshow in VS2005 and multi-monitor support on MinGW
217
endif()
218

  
219
if(UNIX)
220
  #these variables are set by CHECK_MODULE macro
221
  foreach(P ${HIGHGUI_INCLUDE_DIRS})
222
    ocv_include_directories(${P})
223
  endforeach()
224

  
225
  foreach(P ${HIGHGUI_LIBRARY_DIRS})
226
    link_directories(${P})
227
  endforeach()
228
endif()
229

  
230
source_group("Src" FILES ${highgui_srcs} ${highgui_hdrs})
231
source_group("Include" FILES ${highgui_ext_hdrs})
232
ocv_set_module_sources(HEADERS ${highgui_ext_hdrs} SOURCES ${highgui_srcs} ${highgui_hdrs} ${grfmt_srcs} ${grfmt_hdrs})
233
ocv_module_include_directories()
234

  
235
ocv_create_module(${GRFMT_LIBS} ${HIGHGUI_LIBRARIES})
236

  
237
if(BUILD_SHARED_LIBS)
238
  add_definitions(-DHIGHGUI_EXPORTS)
239
endif()
240

  
241
if(MSVC)
242
  set_target_properties(${the_module} PROPERTIES LINK_FLAGS "/NODEFAULTLIB:atlthunk.lib /NODEFAULTLIB:atlsd.lib /NODEFAULTLIB:libcmt.lib /DEBUG")
243
endif()
244

  
245
#stop automatic dependencies propagation for this module
246
set_target_properties(${the_module} PROPERTIES LINK_INTERFACE_LIBRARIES "")
247

  
248
ocv_add_precompiled_headers(${the_module})
249
ocv_warnings_disable(CMAKE_CXX_FLAGS -Wno-deprecated-declarations)
250

  
251
if(WIN32 AND WITH_FFMPEG)
252
  #copy ffmpeg dll to the output folder
253
  if(MSVC64 OR MINGW64)
254
    set(FFMPEG_SUFFIX _64)
255
  endif()
256

  
257
  set(ffmpeg_bare_name "opencv_ffmpeg${FFMPEG_SUFFIX}.dll")
258
  set(ffmpeg_bare_name_ver "opencv_ffmpeg${OPENCV_DLLVERSION}${FFMPEG_SUFFIX}.dll")
259
  set(ffmpeg_path "${OpenCV_SOURCE_DIR}/3rdparty/ffmpeg/${ffmpeg_bare_name}")
260

  
261
  #if(MSVC AND CMAKE_VERSION VERSION_GREATER "2.8.2")
262
  #  add_custom_command(TARGET ${the_module} POST_BUILD
263
  #                     COMMAND ${CMAKE_COMMAND} -E copy "${ffmpeg_path}" "${EXECUTABLE_OUTPUT_PATH}/$<CONFIGURATION>/${ffmpeg_bare_name_ver}"
264
  #                     COMMENT "Copying ${ffmpeg_path} to the output directory")
265
  #else
266
  if(MSVC_IDE)
267
    add_custom_command(TARGET ${the_module} POST_BUILD
268
                       COMMAND ${CMAKE_COMMAND} -E copy "${ffmpeg_path}" "${EXECUTABLE_OUTPUT_PATH}/Release/${ffmpeg_bare_name_ver}"
269
                       COMMAND ${CMAKE_COMMAND} -E copy "${ffmpeg_path}" "${EXECUTABLE_OUTPUT_PATH}/Debug/${ffmpeg_bare_name_ver}"
270
                       COMMENT "Copying ${ffmpeg_path} to the output directory")
271
  elseif(MSVC)
272
    add_custom_command(TARGET ${the_module} POST_BUILD
273
                       COMMAND ${CMAKE_COMMAND} -E copy "${ffmpeg_path}" "${EXECUTABLE_OUTPUT_PATH}/${CMAKE_BUILD_TYPE}/${ffmpeg_bare_name_ver}"
274
                       COMMENT "Copying ${ffmpeg_path} to the output directory")
275
  else()
276
    add_custom_command(TARGET ${the_module} POST_BUILD
277
                       COMMAND ${CMAKE_COMMAND} -E copy "${ffmpeg_path}" "${EXECUTABLE_OUTPUT_PATH}/${ffmpeg_bare_name_ver}"
278
                       COMMENT "Copying ${ffmpeg_path} to the output directory")
279
  endif()
280

  
281
  install(FILES "${ffmpeg_path}" DESTINATION bin COMPONENT main RENAME "${ffmpeg_bare_name_ver}")
282
endif()
283

  
284
ocv_add_accuracy_tests()
285
ocv_add_perf_tests()
b/modules/highgui/src/cap_ximea.cpp
1
#include "precomp.hpp"
2

  
3
#include "xiApi.h"
4
#include "xiExt.h"
5
#include "m3Api.h"
6

  
7
/**********************************************************************************/
8

  
9
class CvCaptureCAM_XIMEA : public CvCapture
10
{
11
public:
12
    CvCaptureCAM_XIMEA() { init(); }
13
    virtual ~CvCaptureCAM_XIMEA() { close(); }
14

  
15
    virtual bool open( int index );
16
    virtual void close();
17
    virtual double getProperty(int);
18
    virtual bool setProperty(int, double);
19
    virtual bool grabFrame();
20
    virtual IplImage* retrieveFrame(int);
21
    virtual int getCaptureDomain() { return CV_CAP_XIAPI; } // Return the type of the capture object: CV_CAP_VFW, etc...
22

  
23
protected:
24
    void init();
25
    void errMsg(const char* msg, int errNum);
26
    IplImage* frame;
27

  
28
    HANDLE    hmv;
29
    DWORD     numDevices;
30
    XI_IMG    image;
31
    int       width;
32
    int       height;
33
    int       format;
34
    int       timeout;
35
};
36

  
37
/**********************************************************************************/
38

  
39
CvCapture* cvCreateCameraCapture_XIMEA( int index )
40
{
41
     CvCaptureCAM_XIMEA* capture = new CvCaptureCAM_XIMEA;
42

  
43
    if( capture->open( index ))
44
        return capture;
45

  
46
    delete capture;
47
    return 0;
48
}
49

  
50
/**********************************************************************************/
51
// Enumerate connected devices
52
void CvCaptureCAM_XIMEA::init()
53
{
54
    xiGetNumberDevices( &numDevices);
55
    hmv = NULL;
56
    memset(&image, 0, sizeof(XI_IMG));
57
}
58

  
59

  
60
/**********************************************************************************/
61
// Initialize camera input
62
bool CvCaptureCAM_XIMEA::open( int wIndex )
63
{
64
    int mvret = XI_OK;
65

  
66
    if(numDevices == 0)
67
        return false;
68

  
69
    if((mvret = xiOpenDevice( wIndex, &hmv)) != XI_OK)
70
    {
71
        errMsg("Open XI_DEVICE failed", mvret);
72
        return false;
73
    }
74

  
75
    // always use auto exposure/gain
76
    mvret = xiSetParamInt( hmv, XI_PRM_AEAG, 1);
77
    if(mvret != XI_OK) goto error;
78

  
79
    // always use auto white ballance
80
    mvret = xiSetParamInt( hmv, XI_PRM_AUTO_WB, 1);
81
    if(mvret != XI_OK) goto error;
82

  
83
    mvret = xiGetParamInt( hmv, XI_PRM_WIDTH, &width);
84
    if(mvret != XI_OK) goto error;
85

  
86
    mvret = xiGetParamInt( hmv, XI_PRM_HEIGHT, &height);
87
    if(mvret != XI_OK) goto error;
88

  
89
    // default image format RGB24
90
    format = XI_RGB24;
91
    mvret = xiSetParamInt( hmv, XI_PRM_IMAGE_DATA_FORMAT, format);
92
    if(mvret != XI_OK) goto error;
93

  
94
    // allocate frame buffer for RGB24 image
95
    frame = cvCreateImage(cvSize( width, height), IPL_DEPTH_8U, 3);
96

  
97
    //default capture timeout 10s
98
    timeout = 10000;
99

  
100
    mvret = xiStartAcquisition(hmv);
101
    if(mvret != XI_OK)
102
    {
103
        errMsg("StartAcquisition XI_DEVICE failed", mvret);
104
        goto error;
105
    }
106

  
107
    return true;
108

  
109
error:
110
    xiCloseDevice(hmv);
111
    hmv = NULL;
112
    return false;
113
}
114

  
115
/**********************************************************************************/
116

  
117
void CvCaptureCAM_XIMEA::close()
118
{
119
    if(hmv)
120
    {
121
        xiStopAcquisition(hmv);
122
        xiCloseDevice(hmv);
123
        hmv = NULL;
124
    }
125
}
126

  
127
/**********************************************************************************/
128

  
129
bool CvCaptureCAM_XIMEA::grabFrame()
130
{
131
    image.size = sizeof(XI_IMG);
132
    int mvret = xiGetImage( hmv, timeout, &image);
133

  
134
    if(mvret == MM40_ACQUISITION_STOPED)
135
    {
136
        xiStartAcquisition(hmv);
137
        mvret = xiGetImage(hmv, timeout, &image);
138
    }
139

  
140
    if(mvret != XI_OK)
141
    {
142
        errMsg("Error during GetImage", mvret);
143
        return false;
144
    }
145

  
146
    return true;
147
}
148

  
149
/**********************************************************************************/
150

  
151
IplImage* CvCaptureCAM_XIMEA::retrieveFrame(int)
152
{
153
    // update cvImage after format has changed
154
    if( (int)image.width != width || (int)image.height != height || image.frm != (XI_IMG_FORMAT)format)
155
    {
156
        cvReleaseImage(&frame);
157
        switch( image.frm)
158
        {
159
        case XI_MONO8  : frame = cvCreateImage(cvSize( image.width, image.height), IPL_DEPTH_8U, 1); break;
160
        case XI_MONO16 : frame = cvCreateImage(cvSize( image.width, image.height), IPL_DEPTH_16U, 1); break;
161
        case XI_RGB24  : frame = cvCreateImage(cvSize( image.width, image.height), IPL_DEPTH_8U, 3); break;
162
        case XI_RGB32  : frame = cvCreateImage(cvSize( image.width, image.height), IPL_DEPTH_8U, 4); break;
163
        default :
164
            return frame;
165
        }
166
        // update global image format
167
        format = image.frm;
168
        width = image.width;
169
        height = image.height;
170
    }
171

  
172
    // copy pixel data
173
    switch( image.frm)
174
    {
175
    case XI_MONO8  : memcpy( frame->imageData, image.bp, image.width*image.height); break;
176
    case XI_MONO16 : memcpy( frame->imageData, image.bp, image.width*image.height*sizeof(WORD)); break;
177
    case XI_RGB24  : memcpy( frame->imageData, image.bp, image.width*image.height*3); break;
178
    case XI_RGB32  : memcpy( frame->imageData, image.bp, image.width*image.height*sizeof(DWORD)); break;
179
    default: break;
180
    }
181
    return frame;
182
}
183

  
184
/**********************************************************************************/
185

  
186
double CvCaptureCAM_XIMEA::getProperty( int property_id )
187
{
188
    if(hmv == NULL)
189
        return 0;
190

  
191
    int ival = 0;
192
    float fval = 0;
193

  
194
    switch( property_id )
195
    {
196
    // OCV parameters
197
    case CV_CAP_PROP_POS_FRAMES   : return (double) image.nframe;
198
    case CV_CAP_PROP_FRAME_WIDTH  : xiGetParamInt( hmv, XI_PRM_WIDTH, &ival); return ival;
199
    case CV_CAP_PROP_FRAME_HEIGHT : xiGetParamInt( hmv, XI_PRM_HEIGHT, &ival); return ival;
200
    case CV_CAP_PROP_FPS          : xiGetParamFloat( hmv, XI_PRM_FRAMERATE, &fval); return fval;
201
    case CV_CAP_PROP_GAIN         : xiGetParamFloat( hmv, XI_PRM_GAIN, &fval); return fval;
202
    case CV_CAP_PROP_EXPOSURE     : xiGetParamInt( hmv, XI_PRM_EXPOSURE, &ival); return ival;
203

  
204
    // XIMEA camera properties
205
    case CV_CAP_PROP_XI_DOWNSAMPLING  : xiGetParamInt( hmv, XI_PRM_DOWNSAMPLING, &ival); return ival;
206
    case CV_CAP_PROP_XI_DATA_FORMAT   : xiGetParamInt( hmv, XI_PRM_IMAGE_DATA_FORMAT, &ival); return ival;
207
    case CV_CAP_PROP_XI_OFFSET_X      : xiGetParamInt( hmv, XI_PRM_OFFSET_X, &ival); return ival;
208
    case CV_CAP_PROP_XI_OFFSET_Y      : xiGetParamInt( hmv, XI_PRM_OFFSET_Y, &ival); return ival;
209
    case CV_CAP_PROP_XI_TRG_SOURCE    : xiGetParamInt( hmv, XI_PRM_TRG_SOURCE, &ival); return ival;
210
    case CV_CAP_PROP_XI_GPI_SELECTOR  : xiGetParamInt( hmv, XI_PRM_GPI_SELECTOR, &ival); return ival;
211
    case CV_CAP_PROP_XI_GPI_MODE      : xiGetParamInt( hmv, XI_PRM_GPI_MODE, &ival); return ival;
212
    case CV_CAP_PROP_XI_GPI_LEVEL     : xiGetParamInt( hmv, XI_PRM_GPI_LEVEL, &ival); return ival;
213
    case CV_CAP_PROP_XI_GPO_SELECTOR  : xiGetParamInt( hmv, XI_PRM_GPO_SELECTOR, &ival); return ival;
214
    case CV_CAP_PROP_XI_GPO_MODE      : xiGetParamInt( hmv, XI_PRM_GPO_MODE, &ival); return ival;
215
    case CV_CAP_PROP_XI_LED_SELECTOR  : xiGetParamInt( hmv, XI_PRM_LED_SELECTOR, &ival); return ival;
216
    case CV_CAP_PROP_XI_LED_MODE      : xiGetParamInt( hmv, XI_PRM_LED_MODE, &ival); return ival;
217
    case CV_CAP_PROP_XI_AUTO_WB       : xiGetParamInt( hmv, XI_PRM_AUTO_WB, &ival); return ival;
218
    case CV_CAP_PROP_XI_AEAG          : xiGetParamInt( hmv, XI_PRM_AEAG, &ival); return ival;
219
    case CV_CAP_PROP_XI_EXP_PRIORITY  : xiGetParamFloat( hmv, XI_PRM_EXP_PRIORITY, &fval); return fval;
220
    case CV_CAP_PROP_XI_AE_MAX_LIMIT  : xiGetParamInt( hmv, XI_PRM_EXP_PRIORITY, &ival); return ival;
221
    case CV_CAP_PROP_XI_AG_MAX_LIMIT  : xiGetParamFloat( hmv, XI_PRM_AG_MAX_LIMIT, &fval); return fval;
222
    case CV_CAP_PROP_XI_AEAG_LEVEL    : xiGetParamInt( hmv, XI_PRM_AEAG_LEVEL, &ival); return ival;
223
    case CV_CAP_PROP_XI_TIMEOUT       : return timeout;
224

  
225
    }
226
    return 0;
227
}
228

  
229
/**********************************************************************************/
230

  
231
bool CvCaptureCAM_XIMEA::setProperty( int property_id, double value )
232
{
233
    int ival = (int) value;
234
    float fval = (float) value;
235

  
236
    int mvret = XI_OK;
237

  
238
    switch(property_id)
239
    {
240
    // OCV parameters
241
    case CV_CAP_PROP_FRAME_WIDTH  : mvret = xiSetParamInt( hmv, XI_PRM_WIDTH, ival);
242
        if(mvret == XI_OK) width = ival;
243
        break;
244
    case CV_CAP_PROP_FRAME_HEIGHT : mvret = xiSetParamInt( hmv, XI_PRM_HEIGHT, ival);
245
        if(mvret == XI_OK) height = ival;
246
        break;
247
    case CV_CAP_PROP_FPS          : mvret = xiSetParamFloat( hmv, XI_PRM_FRAMERATE, fval); break;
248
    case CV_CAP_PROP_GAIN         : mvret = xiSetParamFloat( hmv, XI_PRM_GAIN, fval); break;
249
    case CV_CAP_PROP_EXPOSURE     : mvret = xiSetParamInt( hmv, XI_PRM_EXPOSURE, ival); break;
250
    // XIMEA camera properties
251
    case CV_CAP_PROP_XI_DOWNSAMPLING  : mvret = xiSetParamInt( hmv, XI_PRM_DOWNSAMPLING, ival); break;
252
    case CV_CAP_PROP_XI_DATA_FORMAT   : mvret = xiSetParamInt( hmv, XI_PRM_IMAGE_DATA_FORMAT, ival);
253
        if(mvret == XI_OK) format = ival;
254
        break;
255
    case CV_CAP_PROP_XI_OFFSET_X      : mvret = xiSetParamInt( hmv, XI_PRM_OFFSET_X, ival); break;
256
    case CV_CAP_PROP_XI_OFFSET_Y      : mvret = xiSetParamInt( hmv, XI_PRM_OFFSET_Y, ival); break;
257
    case CV_CAP_PROP_XI_TRG_SOURCE    : mvret = xiSetParamInt( hmv, XI_PRM_TRG_SOURCE, ival); break;
258
    case CV_CAP_PROP_XI_GPI_SELECTOR  : mvret = xiSetParamInt( hmv, XI_PRM_GPI_SELECTOR, ival); break;
259
    case CV_CAP_PROP_XI_TRG_SOFTWARE  : mvret = xiSetParamInt( hmv, XI_PRM_TRG_SOURCE, 1); break;
260
    case CV_CAP_PROP_XI_GPI_MODE      : mvret = xiSetParamInt( hmv, XI_PRM_GPI_MODE, ival); break;
261
    case CV_CAP_PROP_XI_GPI_LEVEL     : mvret = xiSetParamInt( hmv, XI_PRM_GPI_LEVEL, ival); break;
262
    case CV_CAP_PROP_XI_GPO_SELECTOR  : mvret = xiSetParamInt( hmv, XI_PRM_GPO_SELECTOR, ival); break;
263
    case CV_CAP_PROP_XI_GPO_MODE      : mvret = xiSetParamInt( hmv, XI_PRM_GPO_MODE, ival); break;
264
    case CV_CAP_PROP_XI_LED_SELECTOR  : mvret = xiSetParamInt( hmv, XI_PRM_LED_SELECTOR, ival); break;
265
    case CV_CAP_PROP_XI_LED_MODE      : mvret = xiSetParamInt( hmv, XI_PRM_LED_MODE, ival); break;
266
    case CV_CAP_PROP_XI_AUTO_WB       : mvret = xiSetParamInt( hmv, XI_PRM_AUTO_WB, ival); break;
267
    case CV_CAP_PROP_XI_MANUAL_WB     : mvret = xiSetParamInt( hmv, XI_PRM_LED_MODE, ival); break;
268
    case CV_CAP_PROP_XI_AEAG          : mvret = xiSetParamInt( hmv, XI_PRM_AEAG, ival); break;
269
    case CV_CAP_PROP_XI_EXP_PRIORITY  : mvret = xiSetParamFloat( hmv, XI_PRM_EXP_PRIORITY, fval); break;
270
    case CV_CAP_PROP_XI_AE_MAX_LIMIT  : mvret = xiSetParamInt( hmv, XI_PRM_EXP_PRIORITY, ival); break;
271
    case CV_CAP_PROP_XI_AG_MAX_LIMIT  : mvret = xiSetParamFloat( hmv, XI_PRM_AG_MAX_LIMIT, fval); break;
272
    case CV_CAP_PROP_XI_AEAG_LEVEL    : mvret = xiSetParamInt( hmv, XI_PRM_AEAG_LEVEL, ival); break;
273
    case CV_CAP_PROP_XI_TIMEOUT       : timeout = ival; break;
274
    }
275

  
276
    if(mvret != XI_OK)
277
    {
278
        errMsg("Set parameter error", mvret);
279
        return false;
280
    }
281
    else
282
        return true;
283

  
284
}
285

  
286
/**********************************************************************************/
287

  
288
void CvCaptureCAM_XIMEA::errMsg(const char* msg, int errNum)
289
{
290
#if defined WIN32 || defined _WIN32
291
    char buf[512];
292
    sprintf( buf, "%s : %d\n", msg, errNum);
293
    OutputDebugString(buf);
294
#else
295
    fprintf(stderr, "%s : %d\n", msg, errNum);
296
#endif
297
}
298

  
1
#include "precomp.hpp"
2

  
3
#include "xiApi.h"
4
#include "xiExt.h"
5
#include "m3Api.h"
6

  
7
/**********************************************************************************/
8

  
9
class CvCaptureCAM_XIMEA : public CvCapture
10
{
11
public:
12
    CvCaptureCAM_XIMEA() { init(); }
13
    virtual ~CvCaptureCAM_XIMEA() { close(); }
14

  
15
    virtual bool open( int index );
16
    virtual void close();
17
    virtual double getProperty(int);
18
    virtual bool setProperty(int, double);
19
    virtual bool grabFrame();
20
    virtual IplImage* retrieveFrame(int);
21
    virtual int getCaptureDomain() { return CV_CAP_XIAPI; } // Return the type of the capture object: CV_CAP_VFW, etc...
22

  
23
protected:
24
    void init();
25
    void errMsg(const char* msg, int errNum);
26
	void resetImage();
27
	int  getBpp();
28
    IplImage* frame;
29

  
30
    HANDLE    hmv;
31
    DWORD     numDevices;
32
    XI_IMG    image;
33
    int       width;
34
    int       height;
35
    int       format;
36
    int       timeout;
37
	int       isColor;
38
};
39

  
40
/**********************************************************************************/
41

  
42
CvCapture* cvCreateCameraCapture_XIMEA( int index )
43
{
44
     CvCaptureCAM_XIMEA* capture = new CvCaptureCAM_XIMEA;
45

  
46
    if( capture->open( index ))
47
        return capture;
48

  
49
    delete capture;
50
    return 0;
51
}
52

  
53
/**********************************************************************************/
54
// Enumerate connected devices
55
void CvCaptureCAM_XIMEA::init()
56
{
57
    xiGetNumberDevices( &numDevices);
58
    hmv = NULL;
59
    memset(&image, 0, sizeof(XI_IMG));
60
}
61

  
62

  
63
/**********************************************************************************/
64
// Initialize camera input
65
bool CvCaptureCAM_XIMEA::open( int wIndex )
66
{
67
    int mvret = XI_OK;
68

  
69
    if(numDevices == 0)
70
        return false;
71

  
72
    if((mvret = xiOpenDevice( wIndex, &hmv)) != XI_OK)
73
    {
74
        errMsg("Open XI_DEVICE failed", mvret);
75
        return false;
76
    }
77

  
78
    // always use auto exposure/gain
79
    mvret = xiSetParamInt( hmv, XI_PRM_AEAG, 1);
80
    if(mvret != XI_OK) goto error;
81

  
82
    // always use auto white ballance
83
    mvret = xiSetParamInt( hmv, XI_PRM_AUTO_WB, 1);
84
    if(mvret != XI_OK) goto error;
85

  
86
    mvret = xiGetParamInt( hmv, XI_PRM_WIDTH, &width);
87
    if(mvret != XI_OK) goto error;
88

  
89
    mvret = xiGetParamInt( hmv, XI_PRM_HEIGHT, &height);
90
    if(mvret != XI_OK) goto error;
91

  
92
    // default image format RGB24
93
    format = XI_RGB24;
94
    mvret = xiSetParamInt( hmv, XI_PRM_IMAGE_DATA_FORMAT, format);
95
    if(mvret != XI_OK) goto error;
96

  
97
    // allocate frame buffer for RGB24 image
98
    frame = cvCreateImage(cvSize( width, height), IPL_DEPTH_8U, 3);
99

  
100
    // check if is color camera
101
    xiGetParamInt(hmv, XI_PRM_IMAGE_IS_COLOR, &isColor);
102

  
103
    //default capture timeout 10s
104
    timeout = 10000;
105

  
106
    mvret = xiStartAcquisition(hmv);
107
    if(mvret != XI_OK)
108
    {
109
        errMsg("StartAcquisition XI_DEVICE failed", mvret);
110
        goto error;
111
    }
112

  
113
    return true;
114

  
115
error:
116
    xiCloseDevice(hmv);
117
    hmv = NULL;
118
    return false;
119
}
120

  
121
/**********************************************************************************/
122

  
123
void CvCaptureCAM_XIMEA::close()
124
{
125
	if(frame)
126
		cvReleaseImage(&frame);
127

  
128
    xiStopAcquisition(hmv);
129
    xiCloseDevice(hmv);
130
    hmv = NULL;
131
}
132

  
133
/**********************************************************************************/
134

  
135
bool CvCaptureCAM_XIMEA::grabFrame()
136
{
137
    image.size = sizeof(XI_IMG);
138
    int mvret = xiGetImage( hmv, timeout, &image);
139

  
140
    if(mvret == MM40_ACQUISITION_STOPED)
141
    {
142
        xiStartAcquisition(hmv);
143
        mvret = xiGetImage(hmv, timeout, &image);
144
    }
145

  
146
    if(mvret != XI_OK)
147
    {
148
        errMsg("Error during GetImage", mvret);
149
        return false;
150
    }
151

  
152
    return true;
153
}
154

  
155
/**********************************************************************************/
156

  
157
IplImage* CvCaptureCAM_XIMEA::retrieveFrame(int)
158
{
159
    // update cvImage after format has changed
160
	resetImage();
161
    
162
    // copy pixel data
163
    switch( image.frm)
164
    {
165
    case XI_MONO8       : 
166
	case XI_RAW8        : memcpy( frame->imageData, image.bp, image.width*image.height); break;
167
    case XI_MONO16      :
168
	case XI_RAW16       : memcpy( frame->imageData, image.bp, image.width*image.height*sizeof(WORD)); break;
169
    case XI_RGB24       :
170
	case XI_RGB_PLANAR  :
171
		if(isColor)
172
		{
173
			memcpy( frame->imageData, image.bp, image.width*image.height*3); 
174
			break;
175
		}
176
		else
177
		{
178
			memcpy( frame->imageData, image.bp, image.width*image.height); 
179
			break;
180
		}
181
    case XI_RGB32       : 
182
		if(isColor)
183
		{
184
			memcpy( frame->imageData, image.bp, image.width*image.height*4); 
185
			break;
186
		}
187
		else
188
		{
189
			memcpy( frame->imageData, image.bp, image.width*image.height); 
190
			break;
191
		}
192
    default: break;
193
    }
194
    return frame;
195
}
196

  
197
/**********************************************************************************/
198

  
199
double CvCaptureCAM_XIMEA::getProperty( int property_id )
200
{
201
    if(hmv == NULL)
202
        return 0;
203

  
204
    int ival = 0;
205
    float fval = 0;
206

  
207
    switch( property_id )
208
    {
209
    // OCV parameters
210
    case CV_CAP_PROP_POS_FRAMES   : return (double) image.nframe;
211
    case CV_CAP_PROP_FRAME_WIDTH  : xiGetParamInt( hmv, XI_PRM_WIDTH, &ival); return ival;
212
    case CV_CAP_PROP_FRAME_HEIGHT : xiGetParamInt( hmv, XI_PRM_HEIGHT, &ival); return ival;
213
    case CV_CAP_PROP_FPS          : xiGetParamFloat( hmv, XI_PRM_FRAMERATE, &fval); return fval;
214
    case CV_CAP_PROP_GAIN         : xiGetParamFloat( hmv, XI_PRM_GAIN, &fval); return fval;
215
    case CV_CAP_PROP_EXPOSURE     : xiGetParamInt( hmv, XI_PRM_EXPOSURE, &ival); return ival;
216

  
217
    // XIMEA camera properties
218
    case CV_CAP_PROP_XI_DOWNSAMPLING  : xiGetParamInt( hmv, XI_PRM_DOWNSAMPLING, &ival); return ival;
219
    case CV_CAP_PROP_XI_DATA_FORMAT   : xiGetParamInt( hmv, XI_PRM_IMAGE_DATA_FORMAT, &ival); return ival;
220
    case CV_CAP_PROP_XI_OFFSET_X      : xiGetParamInt( hmv, XI_PRM_OFFSET_X, &ival); return ival;
221
    case CV_CAP_PROP_XI_OFFSET_Y      : xiGetParamInt( hmv, XI_PRM_OFFSET_Y, &ival); return ival;
222
    case CV_CAP_PROP_XI_TRG_SOURCE    : xiGetParamInt( hmv, XI_PRM_TRG_SOURCE, &ival); return ival;
223
    case CV_CAP_PROP_XI_GPI_SELECTOR  : xiGetParamInt( hmv, XI_PRM_GPI_SELECTOR, &ival); return ival;
224
    case CV_CAP_PROP_XI_GPI_MODE      : xiGetParamInt( hmv, XI_PRM_GPI_MODE, &ival); return ival;
225
    case CV_CAP_PROP_XI_GPI_LEVEL     : xiGetParamInt( hmv, XI_PRM_GPI_LEVEL, &ival); return ival;
226
    case CV_CAP_PROP_XI_GPO_SELECTOR  : xiGetParamInt( hmv, XI_PRM_GPO_SELECTOR, &ival); return ival;
227
    case CV_CAP_PROP_XI_GPO_MODE      : xiGetParamInt( hmv, XI_PRM_GPO_MODE, &ival); return ival;
228
    case CV_CAP_PROP_XI_LED_SELECTOR  : xiGetParamInt( hmv, XI_PRM_LED_SELECTOR, &ival); return ival;
229
    case CV_CAP_PROP_XI_LED_MODE      : xiGetParamInt( hmv, XI_PRM_LED_MODE, &ival); return ival;
230
    case CV_CAP_PROP_XI_AUTO_WB       : xiGetParamInt( hmv, XI_PRM_AUTO_WB, &ival); return ival;
231
    case CV_CAP_PROP_XI_AEAG          : xiGetParamInt( hmv, XI_PRM_AEAG, &ival); return ival;
232
    case CV_CAP_PROP_XI_EXP_PRIORITY  : xiGetParamFloat( hmv, XI_PRM_EXP_PRIORITY, &fval); return fval;
233
    case CV_CAP_PROP_XI_AE_MAX_LIMIT  : xiGetParamInt( hmv, XI_PRM_EXP_PRIORITY, &ival); return ival;
234
    case CV_CAP_PROP_XI_AG_MAX_LIMIT  : xiGetParamFloat( hmv, XI_PRM_AG_MAX_LIMIT, &fval); return fval;
235
    case CV_CAP_PROP_XI_AEAG_LEVEL    : xiGetParamInt( hmv, XI_PRM_AEAG_LEVEL, &ival); return ival;
236
    case CV_CAP_PROP_XI_TIMEOUT       : return timeout;
237

  
238
    }
239
    return 0;
240
}
241

  
242
/**********************************************************************************/
243

  
244
bool CvCaptureCAM_XIMEA::setProperty( int property_id, double value )
245
{
246
    int ival = (int) value;
247
    float fval = (float) value;
248

  
249
    int mvret = XI_OK;
250

  
251
    switch(property_id)
252
    {
253
    // OCV parameters
254
    case CV_CAP_PROP_FRAME_WIDTH  : mvret = xiSetParamInt( hmv, XI_PRM_WIDTH, ival);
255
        if(mvret == XI_OK) width = ival;
256
        break;
257
    case CV_CAP_PROP_FRAME_HEIGHT : mvret = xiSetParamInt( hmv, XI_PRM_HEIGHT, ival);
258
        if(mvret == XI_OK) height = ival;
259
        break;
260
    case CV_CAP_PROP_FPS          : mvret = xiSetParamFloat( hmv, XI_PRM_FRAMERATE, fval); break;
261
    case CV_CAP_PROP_GAIN         : mvret = xiSetParamFloat( hmv, XI_PRM_GAIN, fval); break;
262
    case CV_CAP_PROP_EXPOSURE     : mvret = xiSetParamInt( hmv, XI_PRM_EXPOSURE, ival); break;
263
    // XIMEA camera properties
264
    case CV_CAP_PROP_XI_DOWNSAMPLING  : mvret = xiSetParamInt( hmv, XI_PRM_DOWNSAMPLING, ival); break;
265
    case CV_CAP_PROP_XI_DATA_FORMAT   : mvret = xiSetParamInt( hmv, XI_PRM_IMAGE_DATA_FORMAT, ival);
266
        if(mvret == XI_OK) format = ival;
267
        break;
268
    case CV_CAP_PROP_XI_OFFSET_X      : mvret = xiSetParamInt( hmv, XI_PRM_OFFSET_X, ival); break;
269
    case CV_CAP_PROP_XI_OFFSET_Y      : mvret = xiSetParamInt( hmv, XI_PRM_OFFSET_Y, ival); break;
270
    case CV_CAP_PROP_XI_TRG_SOURCE    : mvret = xiSetParamInt( hmv, XI_PRM_TRG_SOURCE, ival); break;
271
    case CV_CAP_PROP_XI_GPI_SELECTOR  : mvret = xiSetParamInt( hmv, XI_PRM_GPI_SELECTOR, ival); break;
272
    case CV_CAP_PROP_XI_TRG_SOFTWARE  : mvret = xiSetParamInt( hmv, XI_PRM_TRG_SOURCE, 1); break;
273
    case CV_CAP_PROP_XI_GPI_MODE      : mvret = xiSetParamInt( hmv, XI_PRM_GPI_MODE, ival); break;
274
    case CV_CAP_PROP_XI_GPI_LEVEL     : mvret = xiSetParamInt( hmv, XI_PRM_GPI_LEVEL, ival); break;
275
    case CV_CAP_PROP_XI_GPO_SELECTOR  : mvret = xiSetParamInt( hmv, XI_PRM_GPO_SELECTOR, ival); break;
276
    case CV_CAP_PROP_XI_GPO_MODE      : mvret = xiSetParamInt( hmv, XI_PRM_GPO_MODE, ival); break;
277
    case CV_CAP_PROP_XI_LED_SELECTOR  : mvret = xiSetParamInt( hmv, XI_PRM_LED_SELECTOR, ival); break;
278
    case CV_CAP_PROP_XI_LED_MODE      : mvret = xiSetParamInt( hmv, XI_PRM_LED_MODE, ival); break;
279
    case CV_CAP_PROP_XI_AUTO_WB       : mvret = xiSetParamInt( hmv, XI_PRM_AUTO_WB, ival); break;
280
    case CV_CAP_PROP_XI_MANUAL_WB     : mvret = xiSetParamInt( hmv, XI_PRM_LED_MODE, ival); break;
281
    case CV_CAP_PROP_XI_AEAG          : mvret = xiSetParamInt( hmv, XI_PRM_AEAG, ival); break;
282
    case CV_CAP_PROP_XI_EXP_PRIORITY  : mvret = xiSetParamFloat( hmv, XI_PRM_EXP_PRIORITY, fval); break;
283
    case CV_CAP_PROP_XI_AE_MAX_LIMIT  : mvret = xiSetParamInt( hmv, XI_PRM_EXP_PRIORITY, ival); break;
284
    case CV_CAP_PROP_XI_AG_MAX_LIMIT  : mvret = xiSetParamFloat( hmv, XI_PRM_AG_MAX_LIMIT, fval); break;
285
    case CV_CAP_PROP_XI_AEAG_LEVEL    : mvret = xiSetParamInt( hmv, XI_PRM_AEAG_LEVEL, ival); break;
286
    case CV_CAP_PROP_XI_TIMEOUT       : timeout = ival; break;
287
    }
288

  
289
    if(mvret != XI_OK)
290
    {
291
        errMsg("Set parameter error", mvret);
292
        return false;
293
    }
294
    else
295
        return true;
296

  
297
}
298

  
299
/**********************************************************************************/
300

  
301
void CvCaptureCAM_XIMEA::errMsg(const char* msg, int errNum)
302
{
303
#if defined WIN32 || defined _WIN32
304
    char buf[512];
305
    sprintf( buf, "%s : %d\n", msg, errNum);
306
    OutputDebugString(buf);
307
#else
308
    fprintf(stderr, "%s : %d\n", msg, errNum);
309
#endif
310
}
311

  
312
/**********************************************************************************/
313

  
314
void CvCaptureCAM_XIMEA::resetImage()
315
{
316
	if( (int)image.width != width || (int)image.height != height || image.frm != (XI_IMG_FORMAT)format || getBpp() != frame->nChannels)
317
    {
318
        if(frame)
319
			cvReleaseImage(&frame);
320

  
321
        switch( image.frm)
322
        {
323
		case XI_MONO8       :
324
		case XI_RAW8        : frame = cvCreateImage(cvSize( image.width, image.height), IPL_DEPTH_8U, 1); break;
325
        case XI_MONO16      : 
326
		case XI_RAW16       : frame = cvCreateImage(cvSize( image.width, image.height), IPL_DEPTH_16U, 1); break;
327
		case XI_RGB24       : 
328
		case XI_RGB_PLANAR  :
329
			if(isColor)
330
			{
331
				frame = cvCreateImage(cvSize( image.width, image.height), IPL_DEPTH_8U, 3); 
332
				break;
333
			}
334
			else
335
			{
336
				frame = cvCreateImage(cvSize( image.width, image.height), IPL_DEPTH_8U, 1); 
337
				break;
338
			}
339
        case XI_RGB32       : 
340
			if(isColor)
341
			{
342
				frame = cvCreateImage(cvSize( image.width, image.height), IPL_DEPTH_8U, 4); break;
343
			}
344
			else
345
			{
346
				frame = cvCreateImage(cvSize( image.width, image.height), IPL_DEPTH_8U, 1); break;
347
			}
348
        default :
349
            return;
350
        }
351
        // update global image format
352
        format = image.frm;
353
        width = image.width;
354
        height = image.height;
355
    }
356
}
357

  
358
/**********************************************************************************/
359

  
360
int  CvCaptureCAM_XIMEA::getBpp()
361
{
362
	switch( image.frm)
363
    {
364
	case XI_MONO8       :
365
	case XI_RAW8        : return 1;
366
    case XI_MONO16      : 
367
	case XI_RAW16       : return 2;
368
	case XI_RGB24       : 
369
	case XI_RGB_PLANAR  :
370
		if(isColor)
371
			return 3;
372
		else
373
			return 1;
374
    case XI_RGB32       : 
375
		if(isColor)
376
			return 4;
377
		else
378
			return 1;
379
    default :
380
        return 0;
381
    }
382
}
383

  
299 384
/**********************************************************************************/
300
-