From 052d2dc23a06c47afa6a9b189e05b9be8c293993 Mon Sep 17 00:00:00 2001
From: Andrey Kamaev <no@email>
Date: Wed, 30 May 2012 09:00:32 +0000
Subject: [PATCH] Merged the trunk r8459:8466 (inclusive)

---
 CMakeLists.txt                                | 271 +-----------------
 cmake/OpenCVFindLibsGUI.cmake                 |  41 +++
 ...IOLibs.cmake => OpenCVFindLibsGrfmt.cmake} |  40 ++-
 cmake/OpenCVFindLibsPerf.cmake                |  39 +++
 cmake/OpenCVFindLibsVideo.cmake               | 180 ++++++++++++
 modules/core/test/test_misc.cpp               |  25 ++
 samples/c/fback_c.c                           |   1 +
 samples/c/motempl.c                           |   2 +-
 samples/python2/video_threaded.py             |  68 ++---
 9 files changed, 332 insertions(+), 335 deletions(-)
 create mode 100644 cmake/OpenCVFindLibsGUI.cmake
 rename cmake/{OpenCVIOLibs.cmake => OpenCVFindLibsGrfmt.cmake} (78%)
 create mode 100644 cmake/OpenCVFindLibsPerf.cmake
 create mode 100644 cmake/OpenCVFindLibsVideo.cmake
 create mode 100644 modules/core/test/test_misc.cpp

diff --git a/CMakeLists.txt b/CMakeLists.txt
index bc63f3557..0c9518bbf 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -50,6 +50,7 @@ else()
   cmake_minimum_required(VERSION 2.6.3)
 endif()
 
+# must go before the project command
 set(CMAKE_CONFIGURATION_TYPES "Debug;Release" CACHE STRING "Configs" FORCE)
 if(DEFINED CMAKE_BUILD_TYPE AND CMAKE_VERSION VERSION_GREATER "2.8")
   set_property( CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS ${CMAKE_CONFIGURATION_TYPES} )
@@ -164,12 +165,10 @@ OCV_OPTION(INSTALL_ANDROID_EXAMPLES "Install Android examples"  OFF  IF ANDROID
 OCV_OPTION(INSTALL_TO_MANGLED_PATHS "Enables mangled install paths, that help with side by side installs." OFF IF (UNIX AND NOT ANDROID AND NOT IOS AND BUILD_SHARED_LIBS) )
 
 
-if(CMAKE_GENERATOR MATCHES Xcode)
-    set(ENABLE_SOLUTION_FOLDERS0 ON)
-elseif(MSVC_IDE)
-    set(ENABLE_SOLUTION_FOLDERS0 ON)
+if(MSVC_IDE OR CMAKE_GENERATOR MATCHES Xcode)
+  set(ENABLE_SOLUTION_FOLDERS0 ON)
 else()
-    set(ENABLE_SOLUTION_FOLDERS0 OFF)
+  set(ENABLE_SOLUTION_FOLDERS0 OFF)
 endif()
 
 # OpenCV build options
@@ -333,270 +332,18 @@ include(cmake/OpenCVPCHSupport.cmake REQUIRED)
 include(cmake/OpenCVModule.cmake REQUIRED)
 
 # ----------------------------------------------------------------------------
-#  Detect 3rd-party image IO libraries
+#  Detect 3rd-party libraries
 # ----------------------------------------------------------------------------
-include(cmake/OpenCVIOLibs.cmake REQUIRED)
 
-# ----------------------------------------------------------------------------
-#  Detect 3rd-party GUI libraries
-# ----------------------------------------------------------------------------
-# --- QT4 ---
-ocv_clear_vars(HAVE_QT)
-if(WITH_QT)
-  find_package(Qt4)
-  if(QT4_FOUND)
-    set(HAVE_QT TRUE)
-    add_definitions(-DHAVE_QT) #We need to define te macro this way, using cvconfig.h.cmake does not work
-  endif()
-endif()
-
-# --- GTK ---
-ocv_clear_vars(HAVE_GTK HAVE_GTHREAD HAVE_GTKGLEXT)
-if(WITH_GTK AND NOT HAVE_QT)
-  CHECK_MODULE(gtk+-2.0 HAVE_GTK)
-  CHECK_MODULE(gthread-2.0 HAVE_GTHREAD)
-  if(WITH_OPENGL)
-    CHECK_MODULE(gtkglext-1.0 HAVE_GTKGLEXT)
-  endif()
-endif()
-
-# --- OpenGl ---
-ocv_clear_vars(HAVE_OPENGL HAVE_QT_OPENGL)
-if(WITH_OPENGL)
-  if(WIN32 OR QT_QTOPENGL_FOUND OR HAVE_GTKGLEXT)
-    find_package (OpenGL QUIET)
-    if(OPENGL_FOUND)
-      set(HAVE_OPENGL TRUE)
-      set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} ${OPENGL_LIBRARIES})
-      if(QT_QTOPENGL_FOUND)
-        set(HAVE_QT_OPENGL TRUE)
-        add_definitions(-DHAVE_QT_OPENGL)
-      else()
-        ocv_include_directories(${OPENGL_INCLUDE_DIR})
-      endif()
-    endif()
-  endif()
-endif(WITH_OPENGL)
-
-# ----------------------------------------------------------------------------
-#  Detect 3rd-party video IO libraries
-# ----------------------------------------------------------------------------
-# --- GStreamer ---
-ocv_clear_vars(HAVE_GSTREAMER)
-if(WITH_GSTREAMER)
-  CHECK_MODULE(gstreamer-base-0.10 HAVE_GSTREAMER)
-  if(HAVE_GSTREAMER)
-    CHECK_MODULE(gstreamer-app-0.10 HAVE_GSTREAMER)
-  endif()
-  if(HAVE_GSTREAMER)
-    CHECK_MODULE(gstreamer-video-0.10 HAVE_GSTREAMER)
-  endif()
-endif(WITH_GSTREAMER)
-
-# --- unicap ---
-ocv_clear_vars(HAVE_UNICAP)
-if(WITH_UNICAP)
-  CHECK_MODULE(libunicap HAVE_UNICAP_)
-  CHECK_MODULE(libucil HAVE_UNICAP_UCIL)
-  if(HAVE_UNICAP_ AND HAVE_UNICAP_UCIL)
-    set(HAVE_UNICAP TRUE)
-  endif()
-endif(WITH_UNICAP)
-
-# --- PvApi ---
-ocv_clear_vars(HAVE_PVAPI)
-if(WITH_PVAPI)
-  find_path(PVAPI_INCLUDE_PATH "PvApi.h"
-            PATHS /usr/local /opt /usr ENV ProgramFiles ENV ProgramW6432
-            PATH_SUFFIXES include "Allied Vision Technologies/GigESDK/inc-pc" "AVT GigE SDK/inc-pc" "GigESDK/inc-pc"
-            DOC "The path to PvAPI header")
-
-  if(PVAPI_INCLUDE_PATH)
-    if(X86 AND NOT WIN32)
-      set(PVAPI_SDK_SUBDIR x86)
-    elseif(X86_64)
-      set(PVAPI_SDK_SUBDIR x64)
-    elseif(CMAKE_SYSTEM_PROCESSOR MATCHES arm)
-      set(PVAPI_SDK_SUBDIR arm)
-    endif()
-
-    get_filename_component(_PVAPI_LIBRARY "${PVAPI_INCLUDE_PATH}/../lib-pc" ABSOLUTE)
-    if(PVAPI_SDK_SUBDIR)
-      set(_PVAPI_LIBRARY "${_PVAPI_LIBRARY}/${PVAPI_SDK_SUBDIR}")
-    endif()
-    if(NOT WIN32 AND CMAKE_COMPILER_IS_GNUCXX)
-      set(_PVAPI_LIBRARY "${_PVAPI_LIBRARY}/${CMAKE_OPENCV_GCC_VERSION_MAJOR}.${CMAKE_OPENCV_GCC_VERSION_MINOR}")
-    endif()
-
-    set(PVAPI_LIBRARY "${_PVAPI_LIBRARY}/${CMAKE_STATIC_LIBRARY_PREFIX}PvAPI${CMAKE_STATIC_LIBRARY_SUFFIX}" CACHE PATH "The PvAPI library")
-    if(EXISTS "${PVAPI_LIBRARY}")
-      set(HAVE_PVAPI TRUE)
-    endif()
-  endif(PVAPI_INCLUDE_PATH)
-endif(WITH_PVAPI)
-
-# --- Dc1394 ---
-ocv_clear_vars(HAVE_DC1394 HAVE_DC1394_2)
-if(WITH_1394)
-  CHECK_MODULE(libdc1394-2 HAVE_DC1394_2)
-  if(NOT HAVE_DC1394_2)
-    CHECK_MODULE(libdc1394 HAVE_DC1394)
-  endif()
-endif(WITH_1394)
-
-# --- xine ---
-ocv_clear_vars(HAVE_XINE)
-if(WITH_XINE)
-  CHECK_MODULE(libxine HAVE_XINE)
-endif(WITH_XINE)
-
-# --- V4L ---
-ocv_clear_vars(HAVE_LIBV4L HAVE_CAMV4L HAVE_CAMV4L2)
-if(WITH_V4L)
-  CHECK_MODULE(libv4l1 HAVE_LIBV4L)
-  CHECK_INCLUDE_FILE(linux/videodev.h HAVE_CAMV4L)
-  CHECK_INCLUDE_FILE(linux/videodev2.h HAVE_CAMV4L2)
-endif(WITH_V4L)
-
-# --- OpenNI ---
-ocv_clear_vars(HAVE_OPENNI HAVE_OPENNI_PRIME_SENSOR_MODULE)
-if(WITH_OPENNI)
-  include(cmake/OpenCVFindOpenNI.cmake)
-endif(WITH_OPENNI)
-
-# --- XIMEA ---
-ocv_clear_vars(HAVE_XIMEA)
-if(WITH_XIMEA)
-  include(cmake/OpenCVFindXimea.cmake)
-  if(XIMEA_FOUND)
-    set(HAVE_XIMEA TRUE)
-  endif()
-endif(WITH_XIMEA)
-
-# --- FFMPEG ---
-ocv_clear_vars(HAVE_FFMPEG HAVE_FFMPEG_CODEC HAVE_FFMPEG_FORMAT HAVE_FFMPEG_UTIL HAVE_FFMPEG_SWSCALE HAVE_GENTOO_FFMPEG HAVE_FFMPEG_FFMPEG)
-if(WITH_FFMPEG)
-  if(WIN32)
-    include(3rdparty/ffmpeg/ffmpeg_version.cmake REQUIRED)
-  elseif(UNIX)
-    CHECK_MODULE(libavcodec HAVE_FFMPEG_CODEC)
-    CHECK_MODULE(libavformat HAVE_FFMPEG_FORMAT)
-    CHECK_MODULE(libavutil HAVE_FFMPEG_UTIL)
-    CHECK_MODULE(libswscale HAVE_FFMPEG_SWSCALE)
-
-    CHECK_INCLUDE_FILE(libavformat/avformat.h HAVE_GENTOO_FFMPEG)
-    CHECK_INCLUDE_FILE(ffmpeg/avformat.h HAVE_FFMPEG_FFMPEG)
-    if(NOT HAVE_GENTOO_FFMPEG AND NOT HAVE_FFMPEG_FFMPEG)
-      if(EXISTS /usr/include/ffmpeg/libavformat/avformat.h OR HAVE_FFMPEG_SWSCALE)
-        set(HAVE_GENTOO_FFMPEG TRUE)
-      endif()
-    endif()
-    if(HAVE_FFMPEG_CODEC AND HAVE_FFMPEG_FORMAT AND HAVE_FFMPEG_UTIL AND HAVE_FFMPEG_SWSCALE)
-      set(HAVE_FFMPEG TRUE)
-    endif()
-
-    if(HAVE_FFMPEG)
-      # Find the bzip2 library because it is required on some systems
-      FIND_LIBRARY(BZIP2_LIBRARIES NAMES bz2 bzip2)
-      if(NOT BZIP2_LIBRARIES)
-        # Do an other trial
-        FIND_FILE(BZIP2_LIBRARIES NAMES libbz2.so.1 PATHS /lib)
-      endif()
-    endif(HAVE_FFMPEG)
-  endif()
-
-  if(APPLE)
-    find_path(FFMPEG_INCLUDE_DIR "libavformat/avformat.h"
-              PATHS /usr/local /usr /opt
-              PATH_SUFFIXES include
-              DOC "The path to FFMPEG headers")
-    if(FFMPEG_INCLUDE_DIR)
-      set(HAVE_GENTOO_FFMPEG TRUE)
-      set(FFMPEG_LIB_DIR "${FFMPEG_INCLUDE_DIR}/../lib" CACHE PATH "Full path of FFMPEG library directory")
-      if(EXISTS "${FFMPEG_LIB_DIR}/libavcodec.a")
-        set(HAVE_FFMPEG_CODEC 1)
-        set(ALIASOF_libavcodec_VERSION "Unknown")
-        if(EXISTS "${FFMPEG_LIB_DIR}/libavformat.a")
-          set(HAVE_FFMPEG_FORMAT 1)
-          set(ALIASOF_libavformat_VERSION "Unknown")
-          if(EXISTS "${FFMPEG_LIB_DIR}/libavutil.a")
-            set(HAVE_FFMPEG_UTIL 1)
-            set(ALIASOF_libavutil_VERSION "Unknown")
-            if(EXISTS "${FFMPEG_LIB_DIR}/libswscale.a")
-              set(HAVE_FFMPEG_SWSCALE 1)
-              set(ALIASOF_libswscale_VERSION "Unknown")
-              set(HAVE_FFMPEG 1)
-            endif()
-          endif()
-        endif()
-      endif()
-    endif(FFMPEG_INCLUDE_DIR)
-    if(HAVE_FFMPEG)
-      set(HIGHGUI_LIBRARIES ${HIGHGUI_LIBRARIES} "${FFMPEG_LIB_DIR}/libavcodec.a"
-          "${FFMPEG_LIB_DIR}/libavformat.a" "${FFMPEG_LIB_DIR}/libavutil.a"
-          "${FFMPEG_LIB_DIR}/libswscale.a")
-      ocv_include_directories(${FFMPEG_INCLUDE_DIR})
-    endif()
-  endif(APPLE)
-endif(WITH_FFMPEG)
-
-# --- VideoInput ---
-if(WITH_VIDEOINPUT)
-  # always have VideoInput on Windows
-  set(HAVE_VIDEOINPUT 1)
-endif(WITH_VIDEOINPUT)
-
-# --- Extra HighGUI libs on Windows ---
-if(WIN32)
-  list(APPEND HIGHGUI_LIBRARIES comctl32 gdi32 ole32)
-  if(MSVC)
-    list(APPEND HIGHGUI_LIBRARIES vfw32)
-  elseif(MINGW64)
-    list(APPEND HIGHGUI_LIBRARIES msvfw32 avifil32 avicap32 winmm)
-  elseif(MINGW)
-    list(APPEND HIGHGUI_LIBRARIES vfw32 winmm)
-  endif()
-endif(WIN32)
+include(cmake/OpenCVFindLibsGrfmt.cmake REQUIRED)
+include(cmake/OpenCVFindLibsGUI.cmake   REQUIRED)
+include(cmake/OpenCVFindLibsVideo.cmake REQUIRED)
+include(cmake/OpenCVFindLibsPerf.cmake  REQUIRED)
 
 
 # ----------------------------------------------------------------------------
 #  Detect other 3rd-party libraries/tools
 # ----------------------------------------------------------------------------
-# --- TBB ---
-if(WITH_TBB)
-  include(cmake/OpenCVDetectTBB.cmake REQUIRED)
-endif(WITH_TBB)
-
-# --- IPP ---
-ocv_clear_vars(IPP_FOUND)
-if(WITH_IPP)
-  include(cmake/OpenCVFindIPP.cmake)
-  if(IPP_FOUND)
-    add_definitions(-DHAVE_IPP)
-    ocv_include_directories(${IPP_INCLUDE_DIRS})
-    link_directories(${IPP_LIBRARY_DIRS})
-    set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} ${IPP_LIBRARIES})
-  endif()
-endif(WITH_IPP)
-
-# --- CUDA ---
-if(WITH_CUDA)
-  include(cmake/OpenCVDetectCUDA.cmake REQUIRED)
-endif(WITH_CUDA)
-
-# --- Eigen ---
-if(WITH_EIGEN)
-  find_path(EIGEN_INCLUDE_PATH "Eigen/Core"
-            PATHS /usr/local /opt /usr ENV ProgramFiles ENV ProgramW6432
-            PATH_SUFFIXES include/eigen3 include/eigen2 Eigen/include/eigen3 Eigen/include/eigen2
-            DOC "The path to Eigen3/Eigen2 headers")
-
-  if(EIGEN_INCLUDE_PATH)
-    ocv_include_directories(${EIGEN_INCLUDE_PATH})
-    ocv_parse_header("${EIGEN_INCLUDE_PATH}/Eigen/src/Core/util/Macros.h" EIGEN_VERSION_LINES EIGEN_WORLD_VERSION EIGEN_MAJOR_VERSION EIGEN_MINOR_VERSION)
-    set(HAVE_EIGEN 1)
-  endif()
-endif(WITH_EIGEN)
 
 # --- LATEX for pdf documentation ---
 if(BUILD_DOCS)
diff --git a/cmake/OpenCVFindLibsGUI.cmake b/cmake/OpenCVFindLibsGUI.cmake
new file mode 100644
index 000000000..c883a80ce
--- /dev/null
+++ b/cmake/OpenCVFindLibsGUI.cmake
@@ -0,0 +1,41 @@
+# ----------------------------------------------------------------------------
+#  Detect 3rd-party GUI libraries
+# ----------------------------------------------------------------------------
+
+# --- QT4 ---
+ocv_clear_vars(HAVE_QT)
+if(WITH_QT)
+  find_package(Qt4)
+  if(QT4_FOUND)
+    set(HAVE_QT TRUE)
+    add_definitions(-DHAVE_QT) # We need to define the macro this way, using cvconfig.h does not work
+  endif()
+endif()
+
+# --- GTK ---
+ocv_clear_vars(HAVE_GTK HAVE_GTHREAD HAVE_GTKGLEXT)
+if(WITH_GTK AND NOT HAVE_QT)
+  CHECK_MODULE(gtk+-2.0 HAVE_GTK)
+  CHECK_MODULE(gthread-2.0 HAVE_GTHREAD)
+  if(WITH_OPENGL)
+    CHECK_MODULE(gtkglext-1.0 HAVE_GTKGLEXT)
+  endif()
+endif()
+
+# --- OpenGl ---
+ocv_clear_vars(HAVE_OPENGL HAVE_QT_OPENGL)
+if(WITH_OPENGL)
+  if(WIN32 OR QT_QTOPENGL_FOUND OR HAVE_GTKGLEXT)
+    find_package (OpenGL QUIET)
+    if(OPENGL_FOUND)
+      set(HAVE_OPENGL TRUE)
+      list(APPEND OPENCV_LINKER_LIBS ${OPENGL_LIBRARIES})
+      if(QT_QTOPENGL_FOUND)
+        set(HAVE_QT_OPENGL TRUE)
+        add_definitions(-DHAVE_QT_OPENGL)
+      else()
+        ocv_include_directories(${OPENGL_INCLUDE_DIR})
+      endif()
+    endif()
+  endif()
+endif(WITH_OPENGL)
diff --git a/cmake/OpenCVIOLibs.cmake b/cmake/OpenCVFindLibsGrfmt.cmake
similarity index 78%
rename from cmake/OpenCVIOLibs.cmake
rename to cmake/OpenCVFindLibsGrfmt.cmake
index 8b0dd082e..47632cd89 100644
--- a/cmake/OpenCVIOLibs.cmake
+++ b/cmake/OpenCVFindLibsGrfmt.cmake
@@ -1,12 +1,10 @@
-macro(unset_all)
-  foreach(var ${ARGN})
-    unset(${var} CACHE)
-  endforeach()
-endmacro()
+# ----------------------------------------------------------------------------
+#  Detect 3rd-party image IO libraries
+# ----------------------------------------------------------------------------
 
-################### zlib - required
+# --- zlib (required) ---
 if(BUILD_ZLIB)
-  unset_all(ZLIB_FOUND)
+  ocv_clear_vars(ZLIB_FOUND)
 else()
   include(FindZLIB)
   if(ZLIB_FOUND)
@@ -25,7 +23,7 @@ else()
 endif()
 
 if(NOT ZLIB_FOUND)
-  unset_all(ZLIB_LIBRARY ZLIB_LIBRARIES ZLIB_INCLUDE_DIR)
+  ocv_clear_vars(ZLIB_LIBRARY ZLIB_LIBRARIES ZLIB_INCLUDE_DIR)
 
   set(ZLIB_LIBRARY zlib)
   set(ZLIB_LIBRARIES ${ZLIB_LIBRARY})
@@ -33,10 +31,10 @@ if(NOT ZLIB_FOUND)
   set(ZLIB_INCLUDE_DIR "${${ZLIB_LIBRARY}_SOURCE_DIR}" "${${ZLIB_LIBRARY}_BINARY_DIR}")
 endif()
 
-################### libtiff - optional (should be searched after zlib)
+# --- libtiff (optional, should be searched after zlib) ---
 if(WITH_TIFF)
   if(BUILD_TIFF)
-    unset_all(TIFF_FOUND)
+    ocv_clear_vars(TIFF_FOUND)
   else()
     include(FindTIFF)
     if(TIFF_FOUND)
@@ -46,7 +44,7 @@ if(WITH_TIFF)
 endif()
 
 if(WITH_TIFF AND NOT TIFF_FOUND)
-  unset_all(TIFF_LIBRARY TIFF_LIBRARIES TIFF_INCLUDE_DIR)
+  ocv_clear_vars(TIFF_LIBRARY TIFF_LIBRARIES TIFF_INCLUDE_DIR)
 
   set(TIFF_LIBRARY libtiff)
   set(TIFF_LIBRARIES ${TIFF_LIBRARY})
@@ -63,17 +61,17 @@ if(TIFF_BIGTIFF_VERSION AND NOT TIFF_VERSION_BIG)
   set(TIFF_VERSION_BIG ${TIFF_BIGTIFF_VERSION})
 endif()
 
-################### libjpeg - optional
+# --- libjpeg (optional) ---
 if(WITH_JPEG)
   if(BUILD_JPEG)
-    unset_all(JPEG_FOUND)
+    ocv_clear_vars(JPEG_FOUND)
   else()
     include(FindJPEG)
   endif()
 endif()
 
 if(WITH_JPEG AND NOT JPEG_FOUND)
-  unset_all(JPEG_LIBRARY JPEG_LIBRARIES JPEG_INCLUDE_DIR)
+  ocv_clear_vars(JPEG_LIBRARY JPEG_LIBRARIES JPEG_INCLUDE_DIR)
 
   set(JPEG_LIBRARY libjpeg)
   set(JPEG_LIBRARIES ${JPEG_LIBRARY})
@@ -84,17 +82,17 @@ endif()
 ocv_parse_header("${JPEG_INCLUDE_DIR}/jpeglib.h" JPEG_VERSION_LINES JPEG_LIB_VERSION)
 
 
-################### libjasper - optional (should be searched after libjpeg)
+# --- libjasper (optional, should be searched after libjpeg) ---
 if(WITH_JASPER)
   if(BUILD_JASPER)
-    unset_all(JASPER_FOUND)
+    ocv_clear_vars(JASPER_FOUND)
   else()
     include(FindJasper)
   endif()
 endif()
 
 if(WITH_JASPER AND NOT JASPER_FOUND)
-  unset_all(JASPER_LIBRARY JASPER_LIBRARIES JASPER_INCLUDE_DIR)
+  ocv_clear_vars(JASPER_LIBRARY JASPER_LIBRARIES JASPER_INCLUDE_DIR)
 
   set(JASPER_LIBRARY libjasper)
   set(JASPER_LIBRARIES ${JASPER_LIBRARY})
@@ -106,10 +104,10 @@ if(NOT JASPER_VERSION_STRING)
   ocv_parse_header2(JASPER "${JASPER_INCLUDE_DIR}/jasper/jas_config.h" JAS_VERSION "")
 endif()
 
-################### libpng - optional (should be searched after zlib)
+# --- libpng (optional, should be searched after zlib) ---
 if(WITH_PNG)
   if(BUILD_PNG)
-    unset_all(PNG_FOUND)
+    ocv_clear_vars(PNG_FOUND)
   else()
     include(FindPNG)
     if(PNG_FOUND)
@@ -125,7 +123,7 @@ if(WITH_PNG)
 endif()
 
 if(WITH_PNG AND NOT PNG_FOUND)
-  unset_all(PNG_LIBRARY PNG_LIBRARIES PNG_INCLUDE_DIR PNG_PNG_INCLUDE_DIR HAVE_PNG_H HAVE_LIBPNG_PNG_H PNG_DEFINITIONS)
+  ocv_clear_vars(PNG_LIBRARY PNG_LIBRARIES PNG_INCLUDE_DIR PNG_PNG_INCLUDE_DIR HAVE_PNG_H HAVE_LIBPNG_PNG_H PNG_DEFINITIONS)
 
   set(PNG_LIBRARY libpng)
   set(PNG_LIBRARIES ${PNG_LIBRARY})
@@ -137,7 +135,7 @@ endif()
 
 set(PNG_VERSION "${PNG_LIBPNG_VER_MAJOR}.${PNG_LIBPNG_VER_MINOR}.${PNG_LIBPNG_VER_RELEASE}")
 
-################### OpenEXR - optional
+# --- OpenEXR (optional) ---
 if(WITH_OPENEXR)
   include("${OpenCV_SOURCE_DIR}/cmake/OpenCVFindOpenEXR.cmake")
 endif()
diff --git a/cmake/OpenCVFindLibsPerf.cmake b/cmake/OpenCVFindLibsPerf.cmake
new file mode 100644
index 000000000..5cc42375f
--- /dev/null
+++ b/cmake/OpenCVFindLibsPerf.cmake
@@ -0,0 +1,39 @@
+# ----------------------------------------------------------------------------
+#  Detect other 3rd-party performance and math libraries
+# ----------------------------------------------------------------------------
+
+# --- TBB ---
+if(WITH_TBB)
+  include("${OpenCV_SOURCE_DIR}/cmake/OpenCVDetectTBB.cmake" REQUIRED)
+endif(WITH_TBB)
+
+# --- IPP ---
+ocv_clear_vars(IPP_FOUND)
+if(WITH_IPP)
+  include("${OpenCV_SOURCE_DIR}/cmake/OpenCVFindIPP.cmake")
+  if(IPP_FOUND)
+    add_definitions(-DHAVE_IPP)
+    ocv_include_directories(${IPP_INCLUDE_DIRS})
+    link_directories(${IPP_LIBRARY_DIRS})
+    set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} ${IPP_LIBRARIES})
+  endif()
+endif(WITH_IPP)
+
+# --- CUDA ---
+if(WITH_CUDA)
+  include("${OpenCV_SOURCE_DIR}/cmake/OpenCVDetectCUDA.cmake" REQUIRED)
+endif(WITH_CUDA)
+
+# --- Eigen ---
+if(WITH_EIGEN)
+  find_path(EIGEN_INCLUDE_PATH "Eigen/Core"
+            PATHS /usr/local /opt /usr ENV ProgramFiles ENV ProgramW6432
+            PATH_SUFFIXES include/eigen3 include/eigen2 Eigen/include/eigen3 Eigen/include/eigen2
+            DOC "The path to Eigen3/Eigen2 headers")
+
+  if(EIGEN_INCLUDE_PATH)
+    ocv_include_directories(${EIGEN_INCLUDE_PATH})
+    ocv_parse_header("${EIGEN_INCLUDE_PATH}/Eigen/src/Core/util/Macros.h" EIGEN_VERSION_LINES EIGEN_WORLD_VERSION EIGEN_MAJOR_VERSION EIGEN_MINOR_VERSION)
+    set(HAVE_EIGEN 1)
+  endif()
+endif(WITH_EIGEN)
diff --git a/cmake/OpenCVFindLibsVideo.cmake b/cmake/OpenCVFindLibsVideo.cmake
new file mode 100644
index 000000000..41bfc6553
--- /dev/null
+++ b/cmake/OpenCVFindLibsVideo.cmake
@@ -0,0 +1,180 @@
+# ----------------------------------------------------------------------------
+#  Detect 3rd-party video IO libraries
+# ----------------------------------------------------------------------------
+
+# --- GStreamer ---
+ocv_clear_vars(HAVE_GSTREAMER)
+if(WITH_GSTREAMER)
+  CHECK_MODULE(gstreamer-base-0.10 HAVE_GSTREAMER)
+  if(HAVE_GSTREAMER)
+    CHECK_MODULE(gstreamer-app-0.10 HAVE_GSTREAMER)
+  endif()
+  if(HAVE_GSTREAMER)
+    CHECK_MODULE(gstreamer-video-0.10 HAVE_GSTREAMER)
+  endif()
+endif(WITH_GSTREAMER)
+
+# --- unicap ---
+ocv_clear_vars(HAVE_UNICAP)
+if(WITH_UNICAP)
+  CHECK_MODULE(libunicap HAVE_UNICAP_)
+  CHECK_MODULE(libucil HAVE_UNICAP_UCIL)
+  if(HAVE_UNICAP_ AND HAVE_UNICAP_UCIL)
+    set(HAVE_UNICAP TRUE)
+  endif()
+endif(WITH_UNICAP)
+
+# --- PvApi ---
+ocv_clear_vars(HAVE_PVAPI)
+if(WITH_PVAPI)
+  find_path(PVAPI_INCLUDE_PATH "PvApi.h"
+            PATHS /usr/local /opt /usr ENV ProgramFiles ENV ProgramW6432
+            PATH_SUFFIXES include "Allied Vision Technologies/GigESDK/inc-pc" "AVT GigE SDK/inc-pc" "GigESDK/inc-pc"
+            DOC "The path to PvAPI header")
+
+  if(PVAPI_INCLUDE_PATH)
+    if(X86 AND NOT WIN32)
+      set(PVAPI_SDK_SUBDIR x86)
+    elseif(X86_64)
+      set(PVAPI_SDK_SUBDIR x64)
+    elseif(CMAKE_SYSTEM_PROCESSOR MATCHES arm)
+      set(PVAPI_SDK_SUBDIR arm)
+    endif()
+
+    get_filename_component(_PVAPI_LIBRARY "${PVAPI_INCLUDE_PATH}/../lib-pc" ABSOLUTE)
+    if(PVAPI_SDK_SUBDIR)
+      set(_PVAPI_LIBRARY "${_PVAPI_LIBRARY}/${PVAPI_SDK_SUBDIR}")
+    endif()
+    if(NOT WIN32 AND CMAKE_COMPILER_IS_GNUCXX)
+      set(_PVAPI_LIBRARY "${_PVAPI_LIBRARY}/${CMAKE_OPENCV_GCC_VERSION_MAJOR}.${CMAKE_OPENCV_GCC_VERSION_MINOR}")
+    endif()
+
+    set(PVAPI_LIBRARY "${_PVAPI_LIBRARY}/${CMAKE_STATIC_LIBRARY_PREFIX}PvAPI${CMAKE_STATIC_LIBRARY_SUFFIX}" CACHE PATH "The PvAPI library")
+    if(EXISTS "${PVAPI_LIBRARY}")
+      set(HAVE_PVAPI TRUE)
+    endif()
+  endif(PVAPI_INCLUDE_PATH)
+endif(WITH_PVAPI)
+
+# --- Dc1394 ---
+ocv_clear_vars(HAVE_DC1394 HAVE_DC1394_2)
+if(WITH_1394)
+  CHECK_MODULE(libdc1394-2 HAVE_DC1394_2)
+  if(NOT HAVE_DC1394_2)
+    CHECK_MODULE(libdc1394 HAVE_DC1394)
+  endif()
+endif(WITH_1394)
+
+# --- xine ---
+ocv_clear_vars(HAVE_XINE)
+if(WITH_XINE)
+  CHECK_MODULE(libxine HAVE_XINE)
+endif(WITH_XINE)
+
+# --- V4L ---
+ocv_clear_vars(HAVE_LIBV4L HAVE_CAMV4L HAVE_CAMV4L2)
+if(WITH_V4L)
+  CHECK_MODULE(libv4l1 HAVE_LIBV4L)
+  CHECK_INCLUDE_FILE(linux/videodev.h HAVE_CAMV4L)
+  CHECK_INCLUDE_FILE(linux/videodev2.h HAVE_CAMV4L2)
+endif(WITH_V4L)
+
+# --- OpenNI ---
+ocv_clear_vars(HAVE_OPENNI HAVE_OPENNI_PRIME_SENSOR_MODULE)
+if(WITH_OPENNI)
+  include("${OpenCV_SOURCE_DIR}/cmake/OpenCVFindOpenNI.cmake")
+endif(WITH_OPENNI)
+
+# --- XIMEA ---
+ocv_clear_vars(HAVE_XIMEA)
+if(WITH_XIMEA)
+  include("${OpenCV_SOURCE_DIR}/cmake/OpenCVFindXimea.cmake")
+  if(XIMEA_FOUND)
+    set(HAVE_XIMEA TRUE)
+  endif()
+endif(WITH_XIMEA)
+
+# --- FFMPEG ---
+ocv_clear_vars(HAVE_FFMPEG HAVE_FFMPEG_CODEC HAVE_FFMPEG_FORMAT HAVE_FFMPEG_UTIL HAVE_FFMPEG_SWSCALE HAVE_GENTOO_FFMPEG HAVE_FFMPEG_FFMPEG)
+if(WITH_FFMPEG)
+  if(WIN32)
+    include("${OpenCV_SOURCE_DIR}/3rdparty/ffmpeg/ffmpeg_version.cmake" REQUIRED)
+  elseif(UNIX)
+    CHECK_MODULE(libavcodec HAVE_FFMPEG_CODEC)
+    CHECK_MODULE(libavformat HAVE_FFMPEG_FORMAT)
+    CHECK_MODULE(libavutil HAVE_FFMPEG_UTIL)
+    CHECK_MODULE(libswscale HAVE_FFMPEG_SWSCALE)
+
+    CHECK_INCLUDE_FILE(libavformat/avformat.h HAVE_GENTOO_FFMPEG)
+    CHECK_INCLUDE_FILE(ffmpeg/avformat.h HAVE_FFMPEG_FFMPEG)
+    if(NOT HAVE_GENTOO_FFMPEG AND NOT HAVE_FFMPEG_FFMPEG)
+      if(EXISTS /usr/include/ffmpeg/libavformat/avformat.h OR HAVE_FFMPEG_SWSCALE)
+        set(HAVE_GENTOO_FFMPEG TRUE)
+      endif()
+    endif()
+    if(HAVE_FFMPEG_CODEC AND HAVE_FFMPEG_FORMAT AND HAVE_FFMPEG_UTIL AND HAVE_FFMPEG_SWSCALE)
+      set(HAVE_FFMPEG TRUE)
+    endif()
+
+    if(HAVE_FFMPEG)
+      # Find the bzip2 library because it is required on some systems
+      FIND_LIBRARY(BZIP2_LIBRARIES NAMES bz2 bzip2)
+      if(NOT BZIP2_LIBRARIES)
+        # Do an other trial
+        FIND_FILE(BZIP2_LIBRARIES NAMES libbz2.so.1 PATHS /lib)
+      endif()
+    endif(HAVE_FFMPEG)
+  endif()
+
+  if(APPLE)
+    find_path(FFMPEG_INCLUDE_DIR "libavformat/avformat.h"
+              PATHS /usr/local /usr /opt
+              PATH_SUFFIXES include
+              DOC "The path to FFMPEG headers")
+    if(FFMPEG_INCLUDE_DIR)
+      set(HAVE_GENTOO_FFMPEG TRUE)
+      set(FFMPEG_LIB_DIR "${FFMPEG_INCLUDE_DIR}/../lib" CACHE PATH "Full path of FFMPEG library directory")
+      if(EXISTS "${FFMPEG_LIB_DIR}/libavcodec.a")
+        set(HAVE_FFMPEG_CODEC 1)
+        set(ALIASOF_libavcodec_VERSION "Unknown")
+        if(EXISTS "${FFMPEG_LIB_DIR}/libavformat.a")
+          set(HAVE_FFMPEG_FORMAT 1)
+          set(ALIASOF_libavformat_VERSION "Unknown")
+          if(EXISTS "${FFMPEG_LIB_DIR}/libavutil.a")
+            set(HAVE_FFMPEG_UTIL 1)
+            set(ALIASOF_libavutil_VERSION "Unknown")
+            if(EXISTS "${FFMPEG_LIB_DIR}/libswscale.a")
+              set(HAVE_FFMPEG_SWSCALE 1)
+              set(ALIASOF_libswscale_VERSION "Unknown")
+              set(HAVE_FFMPEG 1)
+            endif()
+          endif()
+        endif()
+      endif()
+    endif(FFMPEG_INCLUDE_DIR)
+    if(HAVE_FFMPEG)
+      set(HIGHGUI_LIBRARIES ${HIGHGUI_LIBRARIES} "${FFMPEG_LIB_DIR}/libavcodec.a"
+          "${FFMPEG_LIB_DIR}/libavformat.a" "${FFMPEG_LIB_DIR}/libavutil.a"
+          "${FFMPEG_LIB_DIR}/libswscale.a")
+      ocv_include_directories(${FFMPEG_INCLUDE_DIR})
+    endif()
+  endif(APPLE)
+endif(WITH_FFMPEG)
+
+# --- VideoInput ---
+if(WITH_VIDEOINPUT)
+  # always have VideoInput on Windows
+  set(HAVE_VIDEOINPUT 1)
+endif(WITH_VIDEOINPUT)
+
+# --- Extra HighGUI libs on Windows ---
+if(WIN32)
+  list(APPEND HIGHGUI_LIBRARIES comctl32 gdi32 ole32)
+  if(MSVC)
+    list(APPEND HIGHGUI_LIBRARIES vfw32)
+  elseif(MINGW64)
+    list(APPEND HIGHGUI_LIBRARIES msvfw32 avifil32 avicap32 winmm)
+  elseif(MINGW)
+    list(APPEND HIGHGUI_LIBRARIES vfw32 winmm)
+  endif()
+endif(WIN32)
diff --git a/modules/core/test/test_misc.cpp b/modules/core/test/test_misc.cpp
new file mode 100644
index 000000000..43daf6718
--- /dev/null
+++ b/modules/core/test/test_misc.cpp
@@ -0,0 +1,25 @@
+#include "test_precomp.hpp"
+
+using namespace cv;
+using namespace std;
+
+TEST(Core_Drawing, _914)
+{
+    const int rows = 256;
+    const int cols = 256;
+
+    Mat img(rows, cols, CV_8UC1, Scalar(255));
+
+    line(img, Point(0, 10), Point(255, 10), Scalar(0), 2, 4);
+    line(img, Point(-5, 20), Point(260, 20), Scalar(0), 2, 4);
+    line(img, Point(10, 0), Point(10, 255), Scalar(0), 2, 4);
+
+    double x0 = 0.0/pow(2.0, -2.0);
+    double x1 = 255.0/pow(2.0, -2.0);
+    double y = 30.5/pow(2.0, -2.0);
+
+    line(img, Point(int(x0), int(y)), Point(int(x1), int(y)), Scalar(0), 2, 4, 2);
+
+    int pixelsDrawn = rows*cols - countNonZero(img);
+    ASSERT_EQ( (3*rows + cols)*3 - 3*9, pixelsDrawn);
+}
\ No newline at end of file
diff --git a/samples/c/fback_c.c b/samples/c/fback_c.c
index 7515bcc1e..3bc5063c1 100644
--- a/samples/c/fback_c.c
+++ b/samples/c/fback_c.c
@@ -1,5 +1,6 @@
 #include "opencv2/video/tracking.hpp"
 #include "opencv2/highgui/highgui.hpp"
+#include "opencv2/imgproc/imgproc_c.h"
 #include <stdio.h>
 void help()
 {
diff --git a/samples/c/motempl.c b/samples/c/motempl.c
index 822a42934..ebcc8d8cb 100644
--- a/samples/c/motempl.c
+++ b/samples/c/motempl.c
@@ -1,6 +1,6 @@
 #include "opencv2/video/tracking.hpp"
-#include "opencv2/imgproc/imgproc.hpp"
 #include "opencv2/highgui/highgui.hpp"
+#include "opencv2/imgproc/imgproc_c.h"
 #include <time.h>
 #include <stdio.h>
 #include <ctype.h>
diff --git a/samples/python2/video_threaded.py b/samples/python2/video_threaded.py
index 6b2cdacef..85d9b6a3d 100644
--- a/samples/python2/video_threaded.py
+++ b/samples/python2/video_threaded.py
@@ -1,63 +1,29 @@
 import numpy as np
 import cv2
 
-from Queue import Queue
-from threading import Thread
+from multiprocessing.pool import ThreadPool
 from collections import deque
 
-class Worker(Thread):
-    def __init__(self, tasks):
-        Thread.__init__(self)
-        self.tasks = tasks
-        self.daemon = True
-        self.start()
-    
-    def run(self):
-        while True:
-            func, args, kargs = self.tasks.get()
-            try: func(*args, **kargs)
-            except Exception, e: print e
-            self.tasks.task_done()
-
-class ThreadPool:
-    def __init__(self, num_threads):
-        self.tasks = Queue(num_threads)
-        for _ in range(num_threads): Worker(self.tasks)
-
-    def add_task(self, func, *args, **kargs):
-        self.tasks.put((func, args, kargs))
-
-    def wait_completion(self):
-        self.tasks.join()
 
 if __name__ == '__main__':
-    results = deque()
+    def process_frame(frame):
+        # some intensive computation...
+        frame = cv2.medianBlur(frame, 19)
+        frame = cv2.medianBlur(frame, 19)
+        frame = cv2.medianBlur(frame, 19)
+        return frame
 
-    def process_frame(i, frame):
-        global results
-        res = cv2.medianBlur(frame, 15)
-        results.append((i, res))
-    
-    pool = ThreadPool(4)
+    threadn = 8
     cap = cv2.VideoCapture(0)
-    frame_count = 0
-    last_frame = None
-    last_count = -1
+    pool = ThreadPool(processes = threadn)
+    pending = deque()
     while True:
-        ret, frame = cap.read()
-        pool.add_task(process_frame, frame_count, frame.copy())
-        frame_count += 1
-        while len(results) > 0:
-            i, frame = results.popleft()
-            if i > last_count:
-                last_count, last_frame = i, frame
-        if last_frame is not None:
-            cv2.imshow('res', last_frame)
+        while len(pending) > 0 and pending[0].ready():
+            res = pending.popleft().get()
+            cv2.imshow('result', res)
+        if len(pending) < threadn+1:
+            ret, frame = cap.read()
+            task = pool.apply_async(process_frame, (frame.copy(),))
+            pending.append(task)
         if cv2.waitKey(1) == 27:
             break
-
-    pool.wait_completion()
-
-
-
-