Initial commit of two preliminary plugins, videolevels and niimaqsrc
This commit is contained in:
29
.gitignore
vendored
Normal file
29
.gitignore
vendored
Normal file
@@ -0,0 +1,29 @@
|
||||
|
||||
#ignore thumbnails created by windows
|
||||
Thumbs.db
|
||||
#Ignore files build by Visual Studio
|
||||
*.obj
|
||||
*.exe
|
||||
*.pdb
|
||||
*.user
|
||||
*.aps
|
||||
*.pch
|
||||
*.vspscc
|
||||
*_i.c
|
||||
*_p.c
|
||||
*.ncb
|
||||
*.suo
|
||||
*.tlb
|
||||
*.tlh
|
||||
*.bak
|
||||
*.cache
|
||||
*.ilk
|
||||
*.log
|
||||
[Bb]in
|
||||
[Dd]ebug*/
|
||||
*.lib
|
||||
*.sbr
|
||||
obj/
|
||||
[Rr]elease*/
|
||||
_ReSharper*/
|
||||
[Tt]est[Rr]esult*
|
||||
29
.gitignore.bak
Normal file
29
.gitignore.bak
Normal file
@@ -0,0 +1,29 @@
|
||||
|
||||
#ignore thumbnails created by windows
|
||||
Thumbs.db
|
||||
#Ignore files build by Visual Studio
|
||||
*.obj
|
||||
*.exe
|
||||
*.pdb
|
||||
*.user
|
||||
*.aps
|
||||
*.pch
|
||||
*.vspscc
|
||||
*_i.c
|
||||
*_p.c
|
||||
*.ncb
|
||||
*.suo
|
||||
*.tlb
|
||||
*.tlh
|
||||
*.bak
|
||||
*.cache
|
||||
*.ilk
|
||||
*.log
|
||||
[Bb]in
|
||||
[Dd]ebug*/
|
||||
*.lib
|
||||
*.sbr
|
||||
obj/
|
||||
[Rr]elease*/
|
||||
_ReSharper*/
|
||||
[Tt]est[Rr]esult*
|
||||
60
CMakeLists.txt
Normal file
60
CMakeLists.txt
Normal file
@@ -0,0 +1,60 @@
|
||||
cmake_minimum_required ( VERSION "2.6.0" )
|
||||
|
||||
list ( APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/modules )
|
||||
|
||||
project ( gst-plugins-vision )
|
||||
|
||||
find_package ( Glib2 REQUIRED )
|
||||
find_package ( Gstreamer COMPONENTS gstbase )
|
||||
find_package ( LibXml2 )
|
||||
find_package ( LibIconv )
|
||||
find_package ( NIIMAQ REQUIRED ) # make this optional
|
||||
|
||||
function ( check_package name LEVEL )
|
||||
if ( ${name}_FOUND )
|
||||
message ( STATUS "Found ${name}... YES" )
|
||||
else ( ${name}_FOUND )
|
||||
message ( STATUS "Found ${name}... NO" )
|
||||
if ( LEVEL )
|
||||
if ( WIN32 )
|
||||
message ( FATAL_ERROR "You should set the env variable ${name}_DIR" )
|
||||
else ( WIN32 )
|
||||
message ( FATAL_ERROR "You should install ${name} dev package" )
|
||||
endif ( WIN32 )
|
||||
endif ( LEVEL )
|
||||
endif ( ${name}_FOUND )
|
||||
endfunction ( check_package )
|
||||
|
||||
# required packages
|
||||
check_package ( GLIB2 1 )
|
||||
check_package ( GSTREAMER 1 )
|
||||
|
||||
# conditionnal required packages
|
||||
INCLUDE ( CheckIncludeFiles )
|
||||
CHECK_INCLUDE_FILES ( "${GSTREAMER_gstconfig_INCLUDE_DIR}/gst/gstconfig.h" GST_USING_BINARY_REGISTRY )
|
||||
if ( NOT GST_USING_BINARY_REGISTRY )
|
||||
check_package ( LIBXML2 1 )
|
||||
check_package ( LIBICONV 1 )
|
||||
endif ( NOT GST_USING_BINARY_REGISTRY )
|
||||
|
||||
# debug
|
||||
message ( "****" ${GLIB2_INCLUDE_DIR} )
|
||||
message ( "****" ${GLIB2_LIBRARIES} )
|
||||
message ( "****" ${GSTREAMER_INCLUDE_DIR} )
|
||||
message ( "****" ${GSTREAMER_LIBRARIES} )
|
||||
message ( "****" ${NIIMAQ_INCLUDE_DIR} )
|
||||
message ( "****" ${NIIMAQ_LIBRARIES} )
|
||||
|
||||
include_directories (
|
||||
.
|
||||
${GSTREAMER_INCLUDE_DIR}
|
||||
${GLIB2_INCLUDE_DIR} )
|
||||
|
||||
if ( NOT GST_USING_BINARY_REGISTRY )
|
||||
include_directories ( AFTER
|
||||
${LIBXML2_INCLUDE_DIR}
|
||||
${LIBICONV_INCLUDE_DIR} )
|
||||
endif ( NOT GST_USING_BINARY_REGISTRY )
|
||||
|
||||
add_subdirectory ( gst )
|
||||
add_subdirectory ( sys )
|
||||
11
cmake/modules/FindATK.cmake
Normal file
11
cmake/modules/FindATK.cmake
Normal file
@@ -0,0 +1,11 @@
|
||||
FILE(TO_CMAKE_PATH "$ENV{ATK_DIR}" TRY1_DIR)
|
||||
FILE(TO_CMAKE_PATH "${ATK_DIR}" TRY2_DIR)
|
||||
FILE(GLOB ATK_DIR ${TRY1_DIR} ${TRY2_DIR})
|
||||
|
||||
FIND_PATH(ATK_INCLUDE_DIR atk/atk.h
|
||||
PATHS ${ATK_DIR}/include /usr/local/include/atk-1.0 /usr/include/atk-1.0
|
||||
ENV INCLUDE DOC "Directory containing atk/atk.h include file")
|
||||
|
||||
IF (ATK_INCLUDE_DIR)
|
||||
SET(ATK_FOUND TRUE)
|
||||
ENDIF (ATK_INCLUDE_DIR)
|
||||
11
cmake/modules/FindCairo.cmake
Normal file
11
cmake/modules/FindCairo.cmake
Normal file
@@ -0,0 +1,11 @@
|
||||
FILE(TO_CMAKE_PATH "$ENV{CAIRO_DIR}" TRY1_DIR)
|
||||
FILE(TO_CMAKE_PATH "${CAIRO_DIR}" TRY2_DIR)
|
||||
FILE(GLOB CAIRO_DIR ${TRY1_DIR} ${TRY2_DIR})
|
||||
|
||||
FIND_PATH(CAIRO_INCLUDE_DIR cairo.h
|
||||
PATHS ${CAIRO_DIR}/include /usr/local/include/cairo /usr/include/cairo
|
||||
ENV INCLUDE DOC "Directory containing cairo.h include file")
|
||||
|
||||
IF (CAIRO_INCLUDE_DIR)
|
||||
SET(CAIRO_FOUND TRUE)
|
||||
ENDIF (CAIRO_INCLUDE_DIR)
|
||||
44
cmake/modules/FindGTK2.cmake
Normal file
44
cmake/modules/FindGTK2.cmake
Normal file
@@ -0,0 +1,44 @@
|
||||
FILE(TO_CMAKE_PATH "$ENV{GTK2_DIR}" TRY1_DIR)
|
||||
FILE(TO_CMAKE_PATH "${GTK2_DIR}" TRY2_DIR)
|
||||
FILE(GLOB GTK_DIR ${TRY1_DIR} ${TRY2_DIR})
|
||||
|
||||
FIND_PATH(GTK_gtk_2_INCLUDE_DIR gtk/gtk.h
|
||||
PATHS ${GTK_DIR}/include /usr/local/include/gtk-2.0 /usr/include/gtk-2.0
|
||||
ENV INCLUDE DOC "Directory containing gtk/gtk.h include file")
|
||||
|
||||
FIND_PATH(GTK_gdk_2_INCLUDE_DIR gdk/gdk.h
|
||||
PATHS ${GTK_DIR}/include /usr/local/include/gtk-2.0 /usr/include/gtk-2.0
|
||||
ENV INCLUDE DOC "Directory containing gdk/gdk.h include file")
|
||||
|
||||
FIND_PATH(GTK_gdkconfig_2_INCLUDE_DIR gdkconfig.h
|
||||
PATHS ${GTK_DIR}/include ${GTK_DIR}/lib/include /usr/local/include/gtk-2.0 /usr/include/gtk-2.0 /usr/lib/gtk-2.0/include /usr/local/lib/gtk-2.0/include
|
||||
ENV INCLUDE DOC "Directory containing gdkconfig.h include file")
|
||||
|
||||
FIND_LIBRARY(GTK_gdk_pixbuf_2_LIBRARY NAMES gdk_pixbuf-2.0
|
||||
PATHS ${GTK_DIR}/lib ${GTK_DIR}/bin ${GTK_DIR}/win32/bin ${GTK_DIR}/lib ${GTK_DIR}/win32/lib /usr/local/lib /usr/lib
|
||||
ENV LIB
|
||||
DOC "gdk_pixbuf library to link with"
|
||||
NO_SYSTEM_ENVIRONMENT_PATH)
|
||||
|
||||
FIND_LIBRARY(GTK_gdk_2_LIBRARY NAMES gdk-win32-2.0 gdk-x11-2.0
|
||||
PATHS ${GTK_DIR}/lib ${GTK_DIR}/bin ${GTK_DIR}/win32/bin ${GTK_DIR}/lib ${GTK_DIR}/win32/lib /usr/lib /usr/local/lib
|
||||
ENV LIB
|
||||
DOC "gdk2 library to link with"
|
||||
NO_SYSTEM_ENVIRONMENT_PATH)
|
||||
|
||||
FIND_LIBRARY(GTK_gtk_2_LIBRARY NAMES gtk-win32-2.0 gtk-x11-2.0
|
||||
PATHS ${GTK_DIR}/lib ${GTK_DIR}/bin ${GTK_DIR}/win32/bin ${GTK_DIR}/lib ${GTK_DIR}/win32/lib /usr/lib /usr/local/lib
|
||||
ENV LIB
|
||||
DOC "gtk2 library to link with"
|
||||
NO_SYSTEM_ENVIRONMENT_PATH)
|
||||
|
||||
|
||||
IF (GTK_gtk_2_INCLUDE_DIR AND GTK_gdk_2_INCLUDE_DIR AND GTK_gdkconfig_2_INCLUDE_DIR AND
|
||||
GTK_gdk_pixbuf_2_LIBRARY AND GTK_gdk_2_LIBRARY AND GTK_gtk_2_LIBRARY)
|
||||
SET(GTK2_INCLUDE_DIR ${GTK_gtk_2_INCLUDE_DIR} ${GTK_gdk_2_INCLUDE_DIR} ${GTK_gdkconfig_2_INCLUDE_DIR})
|
||||
list(REMOVE_DUPLICATES GTK2_INCLUDE_DIR)
|
||||
SET(GTK2_LIBRARIES ${GTK_gdk_pixbuf_2_LIBRARY} ${GTK_gdk_2_LIBRARY} ${GTK_gtk_2_LIBRARY})
|
||||
list(REMOVE_DUPLICATES GTK2_LIBRARIES)
|
||||
SET(GTK2_FOUND TRUE)
|
||||
ENDIF (GTK_gtk_2_INCLUDE_DIR AND GTK_gdk_2_INCLUDE_DIR AND GTK_gdkconfig_2_INCLUDE_DIR AND
|
||||
GTK_gdk_pixbuf_2_LIBRARY AND GTK_gdk_2_LIBRARY AND GTK_gtk_2_LIBRARY)
|
||||
17
cmake/modules/FindGlew.cmake
Normal file
17
cmake/modules/FindGlew.cmake
Normal file
@@ -0,0 +1,17 @@
|
||||
FILE(TO_CMAKE_PATH "$ENV{GLEW_DIR}" TRY1_DIR)
|
||||
FILE(TO_CMAKE_PATH "${GLEW_DIR}" TRY2_DIR)
|
||||
FILE(GLOB GLEW_DIR ${TRY1_DIR} ${TRY2_DIR})
|
||||
|
||||
FIND_PATH(GLEW_INCLUDE_DIR GL/glew.h
|
||||
PATHS ${GLEW_DIR}/include /usr/local/include /usr/include
|
||||
ENV INCLUDE DOC "Directory containing GL/glew.h include file")
|
||||
|
||||
FIND_LIBRARY(GLEW_LIBRARY NAMES glew32 GLEW glew32s
|
||||
PATHS ${GLEW_DIR}/bin ${GLEW_DIR}/win32/bin ${GLEW_DIR}/lib ${GLEW_DIR}/win32/lib /usr/local/lib /usr/lib
|
||||
ENV LIB
|
||||
DOC "glew library to link with"
|
||||
NO_SYSTEM_ENVIRONMENT_PATH)
|
||||
|
||||
IF (GLEW_INCLUDE_DIR AND GLEW_LIBRARY)
|
||||
SET(GLEW_FOUND TRUE)
|
||||
ENDIF (GLEW_INCLUDE_DIR AND GLEW_LIBRARY)
|
||||
43
cmake/modules/FindGlib2.cmake
Normal file
43
cmake/modules/FindGlib2.cmake
Normal file
@@ -0,0 +1,43 @@
|
||||
FILE(TO_CMAKE_PATH "$ENV{GLIB2_DIR}" TRY1_DIR)
|
||||
FILE(TO_CMAKE_PATH "${GLIB2_DIR}" TRY2_DIR)
|
||||
FILE(GLOB GLIB2_DIR ${TRY1_DIR} ${TRY2_DIR})
|
||||
|
||||
FIND_PATH(GLIB_glib_2_INCLUDE_DIR glib.h
|
||||
PATHS ${GLIB2_DIR}/include ${GLIB2_DIR}/include/glib-2.0 /usr/local/include/glib-2.0 /usr/include/glib-2.0 /opt/local/include/glib-2.0
|
||||
ENV INCLUDE DOC "Directory containing glib.h include file")
|
||||
|
||||
FIND_PATH(GLIB_glibconfig_2_INCLUDE_DIR glibconfig.h
|
||||
PATHS ${GLIB2_DIR}/include ${GLIB2_DIR}/include/glib-2.0 ${GLIB2_DIR}/lib/include ${GLIB2_DIR}/lib/glib-2.0/include /usr/local/include/glib-2.0 /usr/include/glib-2.0 /usr/lib/glib-2.0/include /usr/local/lib/glib-2.0/include /opt/local/lib/glib-2.0/include
|
||||
ENV INCLUDE DOC "Directory containing glibconfig.h include file")
|
||||
|
||||
FIND_LIBRARY(GLIB_glib_2_LIBRARY NAMES glib-2.0
|
||||
PATHS ${GLIB2_DIR}/bin ${GLIB2_DIR}/win32/bin ${GLIB2_DIR}/lib ${GLIB2_DIR}/win32/lib /usr/local/lib /usr/lib /opt/local/lib
|
||||
ENV LIB
|
||||
DOC "glib library to link with"
|
||||
NO_SYSTEM_ENVIRONMENT_PATH)
|
||||
|
||||
FIND_LIBRARY(GLIB_gmodule_2_LIBRARY NAMES gmodule-2.0
|
||||
PATHS ${GLIB2_DIR}/bin ${GLIB2_DIR}/win32/bin ${GLIB2_DIR}/lib ${GLIB2_DIR}/win32/lib /usr/local/lib /usr/lib /opt/local/lib
|
||||
ENV LIB
|
||||
DOC "gmodule library to link with"
|
||||
NO_SYSTEM_ENVIRONMENT_PATH)
|
||||
|
||||
FIND_LIBRARY(GLIB_gobject_2_LIBRARY NAMES gobject-2.0
|
||||
PATHS ${GLIB2_DIR}/bin ${GLIB2_DIR}/win32/bin ${GLIB2_DIR}/lib ${GLIB2_DIR}/win32/lib /usr/local/lib /usr/lib /opt/local/lib
|
||||
ENV LIB
|
||||
DOC "gobject library to link with"
|
||||
NO_SYSTEM_ENVIRONMENT_PATH)
|
||||
|
||||
FIND_LIBRARY(GLIB_gthread_2_LIBRARY NAMES gthread-2.0
|
||||
PATHS ${GLIB2_DIR}/bin ${GLIB2_DIR}/win32/bin ${GLIB2_DIR}/lib ${GLIB2_DIR}/win32/lib /usr/local/lib /usr/lib /opt/local/lib
|
||||
ENV LIB
|
||||
DOC "gthread library to link with"
|
||||
NO_SYSTEM_ENVIRONMENT_PATH)
|
||||
|
||||
IF (GLIB_glib_2_INCLUDE_DIR AND GLIB_glibconfig_2_INCLUDE_DIR AND GLIB_glib_2_LIBRARY AND GLIB_gmodule_2_LIBRARY AND GLIB_gobject_2_LIBRARY AND GLIB_gthread_2_LIBRARY)
|
||||
SET(GLIB2_INCLUDE_DIR ${GLIB_glib_2_INCLUDE_DIR} ${GLIB_glibconfig_2_INCLUDE_DIR})
|
||||
list(REMOVE_DUPLICATES GLIB2_INCLUDE_DIR)
|
||||
SET(GLIB2_LIBRARIES ${GLIB_glib_2_LIBRARY} ${GLIB_gmodule_2_LIBRARY} ${GLIB_gobject_2_LIBRARY} ${GLIB_gthread_2_LIBRARY})
|
||||
list(REMOVE_DUPLICATES GLIB2_LIBRARIES)
|
||||
SET(GLIB2_FOUND TRUE)
|
||||
ENDIF (GLIB_glib_2_INCLUDE_DIR AND GLIB_glibconfig_2_INCLUDE_DIR AND GLIB_glib_2_LIBRARY AND GLIB_gmodule_2_LIBRARY AND GLIB_gobject_2_LIBRARY AND GLIB_gthread_2_LIBRARY)
|
||||
134
cmake/modules/FindGstreamer.cmake
Normal file
134
cmake/modules/FindGstreamer.cmake
Normal file
@@ -0,0 +1,134 @@
|
||||
FILE(TO_CMAKE_PATH "$ENV{GSTREAMER_DIR}" TRY1_DIR)
|
||||
FILE(TO_CMAKE_PATH "${GSTREAMER_DIR}" TRY2_DIR)
|
||||
FILE(GLOB GSTREAMER_DIR ${TRY1_DIR} ${TRY2_DIR})
|
||||
message(STATUS ": GSTREAMER_DIR=${GSTREAMER_DIR}")
|
||||
|
||||
FIND_PATH(GSTREAMER_gst_INCLUDE_DIR gst/gst.h
|
||||
PATHS ${GSTREAMER_DIR}/include ${GSTREAMER_DIR}/include/gstreamer-0.10 /usr/local/include/gstreamer-0.10 /usr/include/gstreamer-0.10 C:/gstreamer/include/gstreamer-0.10/gst
|
||||
ENV INCLUDE DOC "Directory containing gst/gst.h include file")
|
||||
message(STATUS "GSTREAMER_gst_INCLUDE_DIR = ${GSTREAMER_gst_INCLUDE_DIR}")
|
||||
|
||||
FIND_PATH(GSTREAMER_gstconfig_INCLUDE_DIR gst/gstconfig.h
|
||||
PATHS ${GSTREAMER_DIR}/include ${GSTREAMER_DIR}/lib/include ${GSTREAMER_DIR}/include/gstreamer-0.10 /usr/local/include/gstreamer-0.10 /usr/include/gstreamer-0.10 /usr/local/lib/include/gstreamer-0.10 /usr/lib/include/gstreamer-0.10
|
||||
ENV INCLUDE DOC "Directory containing gst/gstconfig.h include file")
|
||||
message(STATUS "GSTREAMER_gstconfig_INCLUDE_DIR = ${GSTREAMER_gstconfig_INCLUDE_DIR}")
|
||||
|
||||
FIND_LIBRARY(GSTREAMER_gstaudio_LIBRARY NAMES gstaudio-0.10 libgstaudio-0.10 gstaudio
|
||||
PATHS ${GSTREAMER_DIR}/bin ${GSTREAMER_DIR}/win32/bin ${GSTREAMER_DIR}/bin/bin C:/gstreamer/bin ${GSTREAMER_DIR}/lib ${GSTREAMER_DIR}/win32/lib /usr/local/lib /usr/lib
|
||||
ENV LIB
|
||||
DOC "gstaudio library to link with"
|
||||
NO_SYSTEM_ENVIRONMENT_PATH)
|
||||
message(STATUS "GSTREAMER_gstaudio_LIBRARY = ${GSTREAMER_gstaudio_LIBRARY}")
|
||||
|
||||
FIND_LIBRARY(GSTREAMER_gstbase_LIBRARY NAMES gstbase-0.10 libgstbase-0.10 gstbase
|
||||
PATHS ${GSTREAMER_DIR}/bin ${GSTREAMER_DIR}/win32/bin ${GSTREAMER_DIR}/bin/bin C:/gstreamer/bin ${GSTREAMER_DIR}/lib ${GSTREAMER_DIR}/win32/lib /usr/local/lib /usr/lib
|
||||
ENV LIB
|
||||
DOC "gstbase library to link with"
|
||||
NO_SYSTEM_ENVIRONMENT_PATH)
|
||||
|
||||
FIND_LIBRARY(GLIB_gstcdda_LIBRARY NAMES gstcdda-0.10 libgstcdda-0.10 gstcdda
|
||||
PATHS ${GSTREAMER_DIR}/bin ${GSTREAMER_DIR}/win32/bin ${GSTREAMER_DIR}/bin/bin C:/gstreamer/bin ${GSTREAMER_DIR}/lib ${GSTREAMER_DIR}/win32/lib /usr/local/lib /usr/lib
|
||||
ENV LIB
|
||||
DOC "gstcdda library to link with"
|
||||
NO_SYSTEM_ENVIRONMENT_PATH)
|
||||
|
||||
FIND_LIBRARY(GSTREAMER_gstcontroller_LIBRARY NAMES gstcontroller-0.10 libgstcontroller-0.10 gstcontroller
|
||||
PATHS ${GSTREAMER_DIR}/bin ${GSTREAMER_DIR}/win32/bin ${GSTREAMER_DIR}/bin/bin C:/gstreamer/bin ${GSTREAMER_DIR}/lib ${GSTREAMER_DIR}/win32/lib /usr/local/lib /usr/lib
|
||||
ENV LIB
|
||||
DOC "gstcontroller library to link with"
|
||||
NO_SYSTEM_ENVIRONMENT_PATH)
|
||||
|
||||
FIND_LIBRARY(GSTREAMER_gstdataprotocol_LIBRARY NAMES gstdataprotocol-0.10 libgstdataprotocol-0.10 gstdataprotocol
|
||||
PATHS ${GSTREAMER_DIR}/bin ${GSTREAMER_DIR}/win32/bin ${GSTREAMER_DIR}/bin/bin C:/gstreamer/bin ${GSTREAMER_DIR}/lib ${GSTREAMER_DIR}/win32/lib /usr/local/lib /usr/lib
|
||||
ENV LIB
|
||||
DOC "gstdataprotocol library to link with"
|
||||
NO_SYSTEM_ENVIRONMENT_PATH)
|
||||
|
||||
FIND_LIBRARY(GSTREAMER_gstinterfaces_LIBRARY NAMES gstinterfaces-0.10 libgstinterfaces-0.10 gstinterfaces
|
||||
PATHS ${GSTREAMER_DIR}/bin ${GSTREAMER_DIR}/win32/bin ${GSTREAMER_DIR}/bin/bin C:/gstreamer/bin ${GSTREAMER_DIR}/lib ${GSTREAMER_DIR}/win32/lib /usr/local/lib /usr/lib
|
||||
ENV LIB
|
||||
DOC "gstinterfaces library to link with"
|
||||
NO_SYSTEM_ENVIRONMENT_PATH)
|
||||
|
||||
FIND_LIBRARY(GSTREAMER_gstnet_LIBRARY NAMES gstnet-0.10 libgstnet-0.10 gstnet
|
||||
PATHS ${GSTREAMER_DIR}/bin ${GSTREAMER_DIR}/win32/bin ${GSTREAMER_DIR}/bin/bin C:/gstreamer/bin ${GSTREAMER_DIR}/lib ${GSTREAMER_DIR}/win32/lib /usr/local/lib /usr/lib
|
||||
ENV LIB
|
||||
DOC "gstnet library to link with"
|
||||
NO_SYSTEM_ENVIRONMENT_PATH)
|
||||
|
||||
FIND_LIBRARY(GSTREAMER_gstnetbuffer_LIBRARY NAMES gstnetbuffer-0.10 libgstnetbuffer-0.10 gstnetbuffer
|
||||
PATHS ${GSTREAMER_DIR}/bin ${GSTREAMER_DIR}/win32/bin ${GSTREAMER_DIR}/bin/bin C:/gstreamer/bin ${GSTREAMER_DIR}/lib ${GSTREAMER_DIR}/win32/lib /usr/local/lib /usr/lib
|
||||
ENV LIB
|
||||
DOC "gstnetbuffer library to link with"
|
||||
NO_SYSTEM_ENVIRONMENT_PATH)
|
||||
|
||||
FIND_LIBRARY(GSTREAMER_gstpbutils_LIBRARY NAMES gstpbutils-0.10 libgstpbutils-0.10 gstpbutils
|
||||
PATHS ${GSTREAMER_DIR}/bin ${GSTREAMER_DIR}/win32/bin ${GSTREAMER_DIR}/bin/bin C:/gstreamer/bin ${GSTREAMER_DIR}/lib ${GSTREAMER_DIR}/win32/lib /usr/local/lib /usr/lib
|
||||
ENV LIB
|
||||
DOC "gstpbutils library to link with"
|
||||
NO_SYSTEM_ENVIRONMENT_PATH)
|
||||
|
||||
FIND_LIBRARY(GSTREAMER_gstreamer_LIBRARY NAMES gstreamer-0.10 libgstreamer-0.10 gstreamer
|
||||
PATHS ${GSTREAMER_DIR}/bin ${GSTREAMER_DIR}/win32/bin ${GSTREAMER_DIR}/bin/bin C:/gstreamer/bin ${GSTREAMER_DIR}/lib ${GSTREAMER_DIR}/win32/lib /usr/local/lib /usr/lib
|
||||
ENV LIB
|
||||
DOC "gstreamer library to link with"
|
||||
NO_SYSTEM_ENVIRONMENT_PATH)
|
||||
|
||||
FIND_LIBRARY(GSTREAMER_gstriff_LIBRARY NAMES gstriff-0.10 libgstriff-0.10 gstriff
|
||||
PATHS ${GSTREAMER_DIR}/bin ${GSTREAMER_DIR}/win32/bin ${GSTREAMER_DIR}/bin/bin C:/gstreamer/bin ${GSTREAMER_DIR}/lib ${GSTREAMER_DIR}/win32/lib /usr/local/lib /usr/lib
|
||||
ENV LIB
|
||||
DOC "gstriff library to link with"
|
||||
NO_SYSTEM_ENVIRONMENT_PATH)
|
||||
|
||||
FIND_LIBRARY(GSTREAMER_gstrtp_LIBRARY NAMES gstrtp-0.10 libgstrtp-0.10 gstrtp
|
||||
PATHS ${GSTREAMER_DIR}/bin ${GSTREAMER_DIR}/win32/bin ${GSTREAMER_DIR}/bin/bin C:/gstreamer/bin ${GSTREAMER_DIR}/lib ${GSTREAMER_DIR}/win32/lib /usr/local/lib /usr/lib
|
||||
ENV LIB
|
||||
DOC "gstrtp library to link with"
|
||||
NO_SYSTEM_ENVIRONMENT_PATH)
|
||||
|
||||
FIND_LIBRARY(GSTREAMER_gstrtsp_LIBRARY NAMES gstrtsp-0.10 libgstrtsp-0.10 gstrtsp
|
||||
PATHS ${GSTREAMER_DIR}/bin ${GSTREAMER_DIR}/win32/bin ${GSTREAMER_DIR}/bin/bin C:/gstreamer/bin ${GSTREAMER_DIR}/lib ${GSTREAMER_DIR}/win32/lib /usr/local/lib /usr/lib
|
||||
ENV LIB
|
||||
DOC "gstrtsp library to link with"
|
||||
NO_SYSTEM_ENVIRONMENT_PATH)
|
||||
|
||||
#FIND_LIBRARY(GSTREAMER_gstsdp_LIBRARY NAMES gstsdp-0.10 libgstsdp-0.10
|
||||
# PATHS ${GSTREAMER_DIR}/bin ${GSTREAMER_DIR}/win32/bin ${GSTREAMER_DIR}/bin/bin C:/gstreamer/bin ${GSTREAMER_DIR}/lib ${GSTREAMER_DIR}/win32/lib /usr/local/lib /usr/lib
|
||||
# ENV LIB
|
||||
# DOC "gstsdp library to link with"
|
||||
# NO_SYSTEM_ENVIRONMENT_PATH)
|
||||
|
||||
FIND_LIBRARY(GSTREAMER_gsttag_LIBRARY NAMES gsttag-0.10 libgsttag-0.10 gsttag
|
||||
PATHS ${GSTREAMER_DIR}/bin ${GSTREAMER_DIR}/win32/bin ${GSTREAMER_DIR}/bin/bin C:/gstreamer/bin ${GSTREAMER_DIR}/lib ${GSTREAMER_DIR}/win32/lib /usr/local/lib /usr/lib
|
||||
ENV LIB
|
||||
DOC "gsttag library to link with"
|
||||
NO_SYSTEM_ENVIRONMENT_PATH)
|
||||
|
||||
FIND_LIBRARY(GSTREAMER_gstvideo_LIBRARY NAMES gstvideo-0.10 libgstvideo-0.10 gstvideo
|
||||
PATHS ${GSTREAMER_DIR}/bin ${GSTREAMER_DIR}/win32/bin ${GSTREAMER_DIR}/bin/bin C:/gstreamer/bin ${GSTREAMER_DIR}/lib ${GSTREAMER_DIR}/win32/lib /usr/local/lib /usr/lib
|
||||
ENV LIB
|
||||
DOC "gstvideo library to link with"
|
||||
NO_SYSTEM_ENVIRONMENT_PATH)
|
||||
|
||||
|
||||
#IF (GSTREAMER_gst_INCLUDE_DIR AND GSTREAMER_gstconfig_INCLUDE_DIR AND
|
||||
# GSTREAMER_gstaudio_LIBRARY AND GSTREAMER_gstbase_LIBRARY AND GSTREAMER_gstcontroller_LIBRARY AND
|
||||
# GSTREAMER_gstdataprotocol_LIBRARY AND GSTREAMER_gstinterfaces_LIBRARY AND GSTREAMER_gstnet_LIBRARY AND
|
||||
# GSTREAMER_gstnetbuffer_LIBRARY AND GSTREAMER_gstpbutils_LIBRARY AND GSTREAMER_gstreamer_LIBRARY AND
|
||||
# GSTREAMER_gstriff_LIBRARY AND GSTREAMER_gstrtp_LIBRARY AND GSTREAMER_gstrtsp_LIBRARY AND GSTREAMER_gstsdp_LIBRARY AND
|
||||
# GSTREAMER_gsttag_LIBRARY AND GSTREAMER_gstvideo_LIBRARY)
|
||||
SET(GSTREAMER_INCLUDE_DIR ${GSTREAMER_gst_INCLUDE_DIR} ${GSTREAMER_gstconfig_INCLUDE_DIR})
|
||||
list(REMOVE_DUPLICATES GSTREAMER_INCLUDE_DIR)
|
||||
SET(GSTREAMER_LIBRARIES ${GSTREAMER_gstaudio_LIBRARY} ${GSTREAMER_gstbase_LIBRARY}
|
||||
${GSTREAMER_gstcontroller_LIBRARY} ${GSTREAMER_gstdataprotocol_LIBRARY} ${GSTREAMER_gstinterfaces_LIBRARY}
|
||||
${GSTREAMER_gstnet_LIBRARY} ${GSTREAMER_gstnetbuffer_LIBRARY} ${GSTREAMER_gstpbutils_LIBRARY}
|
||||
${GSTREAMER_gstreamer_LIBRARY} ${GSTREAMER_gstriff_LIBRARY} ${GSTREAMER_gstrtp_LIBRARY}
|
||||
${GSTREAMER_gstrtsp_LIBRARY} ${GSTREAMER_gstsdp_LIBRARY} ${GSTREAMER_gsttag_LIBRARY} ${GSTREAMER_gstvideo_LIBRARY})
|
||||
list(REMOVE_DUPLICATES GSTREAMER_LIBRARIES)
|
||||
SET(GSTREAMER_FOUND TRUE)
|
||||
#ENDIF (GSTREAMER_gst_INCLUDE_DIR AND GSTREAMER_gstconfig_INCLUDE_DIR AND
|
||||
# GSTREAMER_gstaudio_LIBRARY AND GSTREAMER_gstbase_LIBRARY AND GSTREAMER_gstcontroller_LIBRARY AND
|
||||
# GSTREAMER_gstdataprotocol_LIBRARY AND GSTREAMER_gstinterfaces_LIBRARY AND GSTREAMER_gstnet_LIBRARY AND
|
||||
# GSTREAMER_gstnetbuffer_LIBRARY AND GSTREAMER_gstpbutils_LIBRARY AND GSTREAMER_gstreamer_LIBRARY AND
|
||||
# GSTREAMER_gstriff_LIBRARY AND GSTREAMER_gstrtp_LIBRARY AND GSTREAMER_gstrtsp_LIBRARY AND GSTREAMER_gstsdp_LIBRARY AND
|
||||
# GSTREAMER_gsttag_LIBRARY AND GSTREAMER_gstvideo_LIBRARY)
|
||||
11
cmake/modules/FindLibIconv.cmake
Normal file
11
cmake/modules/FindLibIconv.cmake
Normal file
@@ -0,0 +1,11 @@
|
||||
FILE(TO_CMAKE_PATH "$ENV{LIBICONV_DIR}" TRY1_DIR)
|
||||
FILE(TO_CMAKE_PATH "${LIBICONV_DIR}" TRY2_DIR)
|
||||
FILE(GLOB LIBICONV_DIR ${TRY1_DIR} ${TRY2_DIR})
|
||||
|
||||
FIND_PATH(LIBICONV_INCLUDE_DIR iconv.h
|
||||
PATHS ${LIBICONV_DIR}/include /usr/local/include /usr/include
|
||||
ENV INCLUDE DOC "Directory containing iconv.h include file")
|
||||
|
||||
IF (LIBICONV_INCLUDE_DIR)
|
||||
SET(LIBICONV_FOUND TRUE)
|
||||
ENDIF (LIBICONV_INCLUDE_DIR)
|
||||
11
cmake/modules/FindLibXml2.cmake
Normal file
11
cmake/modules/FindLibXml2.cmake
Normal file
@@ -0,0 +1,11 @@
|
||||
FILE(TO_CMAKE_PATH "$ENV{LIBXML2_DIR}" TRY1_DIR)
|
||||
FILE(TO_CMAKE_PATH "${LIBXML2_DIR}" TRY2_DIR)
|
||||
FILE(GLOB LIBXML2_DIR ${TRY1_DIR} ${TRY2_DIR})
|
||||
|
||||
FIND_PATH(LIBXML2_INCLUDE_DIR libxml/parser.h
|
||||
PATHS ${LIBXML2_DIR}/include ${LIBXML2_DIR}/include/libxml2 /usr/local/include/libxml2 /usr/include/libxml2
|
||||
ENV INCLUDE DOC "Directory containing libxml/parser.h include file")
|
||||
|
||||
IF (LIBXML2_INCLUDE_DIR)
|
||||
SET(LIBXML2_FOUND TRUE)
|
||||
ENDIF (LIBXML2_INCLUDE_DIR)
|
||||
17
cmake/modules/FindLibpng.cmake
Normal file
17
cmake/modules/FindLibpng.cmake
Normal file
@@ -0,0 +1,17 @@
|
||||
FILE(TO_CMAKE_PATH "$ENV{PNG_DIR}" TRY1_DIR)
|
||||
FILE(TO_CMAKE_PATH "${PNG_DIR}" TRY2_DIR)
|
||||
FILE(GLOB PNG_DIR ${TRY1_DIR} ${TRY2_DIR})
|
||||
|
||||
FIND_PATH(PNG_INCLUDE_DIR png.h
|
||||
PATHS ${PNG_DIR}/include /usr/local/include /usr/include
|
||||
ENV INCLUDE DOC "Directory containing png.h include file")
|
||||
|
||||
FIND_LIBRARY(PNG_LIBRARY NAMES png12 png
|
||||
PATHS ${PNG_DIR}/bin ${PNG_DIR}/win32/bin ${PNG_DIR}/lib ${PNG_DIR}/win32/lib /usr/local/lib /usr/lib
|
||||
ENV LIB
|
||||
DOC "png library to link with"
|
||||
NO_SYSTEM_ENVIRONMENT_PATH)
|
||||
|
||||
IF (PNG_INCLUDE_DIR AND PNG_LIBRARY)
|
||||
SET(PNG_FOUND TRUE)
|
||||
ENDIF (PNG_INCLUDE_DIR AND PNG_LIBRARY)
|
||||
17
cmake/modules/FindNIIMAQ.cmake
Normal file
17
cmake/modules/FindNIIMAQ.cmake
Normal file
@@ -0,0 +1,17 @@
|
||||
FILE(TO_CMAKE_PATH "$ENV{NIIMAQ_DIR}" TRY1_DIR)
|
||||
FILE(TO_CMAKE_PATH "${NIIMAQ_DIR}" TRY2_DIR)
|
||||
FILE(GLOB NIIMAQ_DIR ${TRY1_DIR} ${TRY2_DIR})
|
||||
|
||||
FIND_PATH(NIIMAQ_INCLUDE_DIR niimaq.h
|
||||
PATHS "${NIIMAQ_DIR}/Shared/ExternalCompilerSupport/C/Include" "${NIIMAQ_DIR}/Include"
|
||||
ENV INCLUDE DOC "Directory containing niimaq.h include file")
|
||||
|
||||
FIND_LIBRARY(NIIMAQ_LIBRARY NAMES imaq
|
||||
PATHS "${NIIMAQ_DIR}/Shared/ExternalCompilerSupport/C/Lib32/MSVC" "${NIIMAQ_DIR}/Lib32/MSVC"
|
||||
ENV LIB
|
||||
DOC "niimaq library to link with"
|
||||
NO_SYSTEM_ENVIRONMENT_PATH)
|
||||
|
||||
IF (NIIMAQ_INCLUDE_DIR AND NIIMAQ_LIBRARY)
|
||||
SET(NIIMAQ_FOUND TRUE)
|
||||
ENDIF (NIIMAQ_INCLUDE_DIR AND NIIMAQ_LIBRARY)
|
||||
30
cmake/modules/FindOpenGL.cmake.off
Normal file
30
cmake/modules/FindOpenGL.cmake.off
Normal file
@@ -0,0 +1,30 @@
|
||||
FILE(TO_CMAKE_PATH "$ENV{OPENGL_DIR}" TRY1_DIR)
|
||||
FILE(TO_CMAKE_PATH "${OPENGL_DIR}" TRY2_DIR)
|
||||
FILE(GLOB OPENGL_DIR ${TRY1_DIR} ${TRY2_DIR})
|
||||
|
||||
FIND_PATH(OPENGL_gl_INCLUDE_DIR GL/gl.h
|
||||
PATHS ${OPENGL_DIR}/include /usr/local/include /usr/include
|
||||
ENV INCLUDE DOC "Directory containing GL/gl.h include file")
|
||||
|
||||
FIND_PATH(OPENGL_glu_INCLUDE_DIR GL/glu.h
|
||||
PATHS ${OPENGL_DIR}/include /usr/local/include /usr/include
|
||||
ENV INCLUDE DOC "Directory containing GL/glu.h include file")
|
||||
|
||||
FIND_LIBRARY(OPENGL_gl_LIBRARY NAMES opengl32 GL
|
||||
PATHS ${OPENGL_DIR}/bin ${OPENGL_DIR}/win32/bin ${OPENGL_DIR}/lib ${OPENGL_DIR}/win32/lib /usr/local/lib /usr/lib
|
||||
ENV LIB
|
||||
DOC "gl library to link with"
|
||||
NO_SYSTEM_ENVIRONMENT_PATH)
|
||||
|
||||
FIND_LIBRARY(OPENGL_glu_LIBRARY NAMES glu32 GLU
|
||||
PATHS ${OPENGL_DIR}/bin ${OPENGL_DIR}/win32/bin ${OPENGL_DIR}/lib ${OPENGL_DIR}/win32/lib /usr/local/lib /usr/lib
|
||||
ENV LIB
|
||||
DOC "glu library to link with"
|
||||
NO_SYSTEM_ENVIRONMENT_PATH)
|
||||
|
||||
IF (OPENGL_gl_INCLUDE_DIR AND OPENGL_glu_INCLUDE_DIR AND OPENGL_gl_LIBRARY AND OPENGL_glu_LIBRARY)
|
||||
SET(OPENGL_INCLUDE_DIR ${OPENGL_gl_INCLUDE_DIR} ${OPENGL_glu_INCLUDE_DIR})
|
||||
list(REMOVE_DUPLICATES OPENGL_INCLUDE_DIR)
|
||||
SET(OPENGL_LIBRARIES ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY})
|
||||
list(REMOVE_DUPLICATES OPENGL_LIBRARIES)
|
||||
ENDIF (OPENGL_gl_INCLUDE_DIR AND OPENGL_glu_INCLUDE_DIR AND OPENGL_gl_LIBRARY AND OPENGL_glu_LIBRARY)
|
||||
17
cmake/modules/FindZlib.cmake
Normal file
17
cmake/modules/FindZlib.cmake
Normal file
@@ -0,0 +1,17 @@
|
||||
FILE(TO_CMAKE_PATH "$ENV{ZLIB_DIR}" TRY1_DIR)
|
||||
FILE(TO_CMAKE_PATH "${ZLIB_DIR}" TRY2_DIR)
|
||||
FILE(GLOB ZLIB_DIR ${TRY1_DIR} ${TRY2_DIR})
|
||||
|
||||
FIND_PATH(ZLIB_INCLUDE_DIR zlib.h
|
||||
PATHS ${ZLIB_DIR}/include /usr/local/include /usr/include
|
||||
ENV INCLUDE DOC "Directory containing zlib.h include file")
|
||||
|
||||
FIND_LIBRARY(ZLIB_LIBRARY NAMES z
|
||||
PATHS ${ZLIB_DIR}/bin ${ZLIB_DIR}/win32/bin ${ZLIB_DIR}/lib ${ZLIB_DIR}/win32/lib /usr/local/lib /usr/lib
|
||||
ENV LIB
|
||||
DOC "zlib library to link with"
|
||||
NO_SYSTEM_ENVIRONMENT_PATH)
|
||||
|
||||
IF (ZLIB_INCLUDE_DIR AND ZLIB_LIBRARY)
|
||||
SET(ZLIB_FOUND TRUE)
|
||||
ENDIF (ZLIB_INCLUDE_DIR AND ZLIB_LIBRARY)
|
||||
13
config.h
Normal file
13
config.h
Normal file
@@ -0,0 +1,13 @@
|
||||
/* GStreamer license */
|
||||
#define GST_LICENSE "LGPL"
|
||||
|
||||
/* package name in plugins */
|
||||
#define GST_PACKAGE_NAME "VISION Plug-ins GIT/prerelease"
|
||||
|
||||
/* package origin */
|
||||
#define GST_PACKAGE_ORIGIN "Unknown package origin"
|
||||
|
||||
/* Version number of package */
|
||||
#define VERSION "0.10.0.1"
|
||||
|
||||
#define PACKAGE "gst-plugins-vision"
|
||||
19
gst/CMakeLists.txt
Normal file
19
gst/CMakeLists.txt
Normal file
@@ -0,0 +1,19 @@
|
||||
add_definitions(-DHAVE_CONFIG_H)
|
||||
|
||||
set ( SOURCES
|
||||
gstvideolevels.c )
|
||||
|
||||
set ( HEADERS
|
||||
gstvideolevels.h )
|
||||
|
||||
include_directories(AFTER
|
||||
. )
|
||||
|
||||
|
||||
add_library ( libgstvision MODULE
|
||||
${SOURCES}
|
||||
${HEADERS} )
|
||||
|
||||
target_link_libraries ( libgstvision
|
||||
general ${GLIB2_LIBRARIES}
|
||||
general ${GSTREAMER_LIBRARIES} )
|
||||
489
gst/gstvideolevels.c
Normal file
489
gst/gstvideolevels.c
Normal file
@@ -0,0 +1,489 @@
|
||||
/* GStreamer
|
||||
* Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
|
||||
* Copyright (C) <2003> David Schleef <ds@schleef.org>
|
||||
* Copyright (C) 2003 Arwed v. Merkatz <v.merkatz@gmx.net>
|
||||
* Copyright (C) 2006 Mark Nauwelaerts <manauw@skynet.be>
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Library General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Library General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
* Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
/*
|
||||
* This file was (probably) generated from
|
||||
* gstvideotemplate.c,v 1.12 2004/01/07 21:07:12 ds Exp
|
||||
* and
|
||||
* make_filter,v 1.6 2004/01/07 21:33:01 ds Exp
|
||||
*/
|
||||
|
||||
/**
|
||||
* SECTION:element-gamma
|
||||
*
|
||||
* Performs gamma correction on a video stream.
|
||||
*
|
||||
* <refsect2>
|
||||
* <title>Example launch line</title>
|
||||
* |[
|
||||
* gst-launch videotestsrc ! gamma gamma=2.0 ! ffmpegcolorspace ! ximagesink
|
||||
* ]| This pipeline will make the image "brighter".
|
||||
* </refsect2>
|
||||
*/
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#include "gstvideolevels.h"
|
||||
#ifdef HAVE_LIBOIL
|
||||
#include <liboil/liboil.h>
|
||||
#endif
|
||||
#include <string.h>
|
||||
#include <math.h>
|
||||
|
||||
#include <gst/video/video.h>
|
||||
|
||||
|
||||
GST_DEBUG_CATEGORY_STATIC (videolevels_debug);
|
||||
#define GST_CAT_DEFAULT videolevels_debug
|
||||
|
||||
/* GstVideoLevels signals and args */
|
||||
enum
|
||||
{
|
||||
/* FILL ME */
|
||||
LAST_SIGNAL
|
||||
};
|
||||
|
||||
enum
|
||||
{
|
||||
PROP_0,
|
||||
PROP_LOWIN,
|
||||
PROP_HIGHIN,
|
||||
PROP_LOWOUT,
|
||||
PROP_HIGHOUT
|
||||
/* FILL ME */
|
||||
};
|
||||
|
||||
#define DEFAULT_PROP_LOWIN 0
|
||||
#define DEFAULT_PROP_HIGHIN 65535
|
||||
#define DEFAULT_PROP_LOWOUT 0
|
||||
#define DEFAULT_PROP_HIGHOUT 255
|
||||
|
||||
static const GstElementDetails videolevels_details =
|
||||
GST_ELEMENT_DETAILS ("Video videolevels adjustment",
|
||||
"Filter/Effect/Video",
|
||||
"Adjusts videolevels on a video stream",
|
||||
"Josh Doe <oss@nvl.army.mil");
|
||||
|
||||
static GstStaticPadTemplate gst_videolevels_src_template =
|
||||
GST_STATIC_PAD_TEMPLATE ("sink",
|
||||
GST_PAD_SINK,
|
||||
GST_PAD_ALWAYS,
|
||||
GST_STATIC_CAPS (
|
||||
"video/x-raw-gray, " \
|
||||
"bpp = (int) [10,16], " \
|
||||
"depth = (int) 16, " \
|
||||
"endianness = (int) BYTE_ORDER, " \
|
||||
"width = " GST_VIDEO_SIZE_RANGE ", " \
|
||||
"height = " GST_VIDEO_SIZE_RANGE ", " \
|
||||
"framerate = " GST_VIDEO_FPS_RANGE
|
||||
)
|
||||
);
|
||||
|
||||
static GstStaticPadTemplate gst_videolevels_sink_template =
|
||||
GST_STATIC_PAD_TEMPLATE ("src",
|
||||
GST_PAD_SRC,
|
||||
GST_PAD_ALWAYS,
|
||||
GST_STATIC_CAPS (
|
||||
"video/x-raw-gray, " \
|
||||
"bpp = (int) 8, " \
|
||||
"depth = (int) 8, " \
|
||||
"endianness = (int) BYTE_ORDER, " \
|
||||
"width = " GST_VIDEO_SIZE_RANGE ", " \
|
||||
"height = " GST_VIDEO_SIZE_RANGE ", " \
|
||||
"framerate = " GST_VIDEO_FPS_RANGE
|
||||
)
|
||||
);
|
||||
|
||||
//static GstStaticPadTemplate gst_videolevels_sink_template =
|
||||
//GST_STATIC_PAD_TEMPLATE ("src",
|
||||
// GST_PAD_SRC,
|
||||
// GST_PAD_ALWAYS,
|
||||
// GST_STATIC_CAPS (
|
||||
// "video/x-raw-gray, " \
|
||||
// "bpp = (int) 8, " \
|
||||
// "depth = (int) 8, " \
|
||||
// "endianness = (int) BYTE_ORDER, " \
|
||||
// "width = " GST_VIDEO_SIZE_RANGE ", " \
|
||||
// "height = " GST_VIDEO_SIZE_RANGE ", " \
|
||||
// "framerate = " GST_VIDEO_FPS_RANGE
|
||||
// )
|
||||
//);
|
||||
|
||||
static void gst_videolevels_set_property (GObject * object, guint prop_id,
|
||||
const GValue * value, GParamSpec * pspec);
|
||||
static void gst_videolevels_get_property (GObject * object, guint prop_id,
|
||||
GValue * value, GParamSpec * pspec);
|
||||
|
||||
static gboolean gst_videolevels_set_caps (GstBaseTransform * base, GstCaps * incaps,
|
||||
GstCaps * outcaps);
|
||||
static GstFlowReturn gst_videolevels_transform (GstBaseTransform * base, GstBuffer * inbuf,
|
||||
GstBuffer * outbuf);
|
||||
static GstCaps * gst_videolevels_transform_caps (GstBaseTransform * trans,
|
||||
GstPadDirection direction, GstCaps * caps);
|
||||
static gboolean gst_videolevels_get_unit_size (GstBaseTransform * base,
|
||||
GstCaps * caps, guint * size);
|
||||
|
||||
static void reset(GstVideoLevels* filter);
|
||||
static void calculate_tables (GstVideoLevels * videolevels);
|
||||
static void do_levels (GstVideoLevels * videolevels, guint16 * indata, guint8* outdata, gint size);
|
||||
|
||||
GST_BOILERPLATE (GstVideoLevels, gst_videolevels, GstVideoFilter, GST_TYPE_VIDEO_FILTER);
|
||||
|
||||
static void
|
||||
gst_videolevels_base_init (gpointer g_class)
|
||||
{
|
||||
GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
|
||||
|
||||
GST_CAT_INFO(videolevels_debug, "gst_videolevels_base_init");
|
||||
|
||||
gst_element_class_set_details (element_class, &videolevels_details);
|
||||
|
||||
gst_element_class_add_pad_template (element_class,
|
||||
gst_static_pad_template_get (&gst_videolevels_sink_template));
|
||||
gst_element_class_add_pad_template (element_class,
|
||||
gst_static_pad_template_get (&gst_videolevels_src_template));
|
||||
}
|
||||
|
||||
static void
|
||||
gst_videolevels_finalize (GObject *object)
|
||||
{
|
||||
GstVideoLevels *videolevels;
|
||||
|
||||
GST_CAT_INFO (videolevels_debug, "gst_videolevels_finalize");
|
||||
|
||||
g_return_if_fail (GST_IS_VIDEOLEVELS (object));
|
||||
videolevels = GST_VIDEOLEVELS (object);
|
||||
g_free(videolevels->levels_table);
|
||||
|
||||
if(G_OBJECT_CLASS(parent_class)->finalize) {
|
||||
G_OBJECT_CLASS(parent_class)->finalize(object);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
gst_videolevels_class_init (GstVideoLevelsClass * g_class)
|
||||
{
|
||||
GObjectClass *gobject_class;
|
||||
GstBaseTransformClass *trans_class;
|
||||
|
||||
GST_CAT_INFO (videolevels_debug, "gst_videolevels_class_init");
|
||||
|
||||
gobject_class = G_OBJECT_CLASS (g_class);
|
||||
trans_class = GST_BASE_TRANSFORM_CLASS (g_class);
|
||||
|
||||
// Register GObject virtual functions
|
||||
gobject_class->finalize = GST_DEBUG_FUNCPTR(gst_videolevels_finalize);
|
||||
gobject_class->set_property = GST_DEBUG_FUNCPTR(gst_videolevels_set_property);
|
||||
gobject_class->get_property = GST_DEBUG_FUNCPTR(gst_videolevels_get_property);
|
||||
|
||||
// Install GObject properties
|
||||
g_object_class_install_property (gobject_class, PROP_LOWIN,
|
||||
g_param_spec_int ("low_in", "Lower Input Level", "Lower Input Level",
|
||||
0, 65535, DEFAULT_PROP_LOWIN, G_PARAM_READWRITE));
|
||||
g_object_class_install_property (gobject_class, PROP_HIGHIN,
|
||||
g_param_spec_int ("upper_in", "Upper Input Level", "Upper Input Level",
|
||||
0, 65535, DEFAULT_PROP_HIGHIN, G_PARAM_READWRITE));
|
||||
g_object_class_install_property (gobject_class, PROP_LOWOUT,
|
||||
g_param_spec_int ("low_out", "Lower Output Level", "Lower Output Level",
|
||||
0, 255, DEFAULT_PROP_LOWOUT, G_PARAM_READWRITE));
|
||||
g_object_class_install_property (gobject_class, PROP_HIGHOUT,
|
||||
g_param_spec_int ("upper_out", "Upper Output Level", "Upper Output Level",
|
||||
0, 255, DEFAULT_PROP_HIGHOUT, G_PARAM_READWRITE));
|
||||
|
||||
// Register GstBaseTransform virtual functions
|
||||
trans_class->set_caps = GST_DEBUG_FUNCPTR (gst_videolevels_set_caps);
|
||||
trans_class->transform = GST_DEBUG_FUNCPTR (gst_videolevels_transform);
|
||||
trans_class->transform_caps = GST_DEBUG_FUNCPTR (gst_videolevels_transform_caps);
|
||||
trans_class->get_unit_size = GST_DEBUG_FUNCPTR (gst_videolevels_get_unit_size);
|
||||
}
|
||||
|
||||
static void
|
||||
gst_videolevels_init (GstVideoLevels * videolevels, GstVideoLevelsClass * g_class)
|
||||
{
|
||||
GST_DEBUG_OBJECT (videolevels, "gst_videolevels_init");
|
||||
|
||||
videolevels->width=0;
|
||||
videolevels->height=0;
|
||||
videolevels->bpp=16;
|
||||
videolevels->depth=16;
|
||||
videolevels->levels_table = g_malloc(65536);
|
||||
reset(videolevels);
|
||||
calculate_tables (videolevels);
|
||||
}
|
||||
|
||||
static void
|
||||
gst_videolevels_set_property (GObject * object, guint prop_id, const GValue * value,
|
||||
GParamSpec * pspec)
|
||||
{
|
||||
GstVideoLevels *videolevels;
|
||||
|
||||
g_return_if_fail (GST_IS_VIDEOLEVELS (object));
|
||||
videolevels = GST_VIDEOLEVELS (object);
|
||||
|
||||
GST_DEBUG ("gst_videolevels_set_property");
|
||||
switch (prop_id) {
|
||||
case PROP_LOWIN:
|
||||
videolevels->lower_input = g_value_get_int (value);
|
||||
calculate_tables (videolevels);
|
||||
break;
|
||||
case PROP_HIGHIN:
|
||||
videolevels->upper_input = g_value_get_int (value);
|
||||
calculate_tables (videolevels);
|
||||
break;
|
||||
case PROP_LOWOUT:
|
||||
videolevels->lower_output = g_value_get_int (value);
|
||||
calculate_tables (videolevels);
|
||||
break;
|
||||
case PROP_HIGHOUT:
|
||||
videolevels->upper_output = g_value_get_int (value);
|
||||
calculate_tables (videolevels);
|
||||
break;
|
||||
default:
|
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
gst_videolevels_get_property (GObject * object, guint prop_id, GValue * value,
|
||||
GParamSpec * pspec)
|
||||
{
|
||||
GstVideoLevels *videolevels;
|
||||
|
||||
g_return_if_fail (GST_IS_VIDEOLEVELS (object));
|
||||
videolevels = GST_VIDEOLEVELS (object);
|
||||
|
||||
GST_INFO_OBJECT (videolevels, "gst_videolevels_get_property");
|
||||
switch (prop_id) {
|
||||
case PROP_LOWIN:
|
||||
g_value_set_int (value, videolevels->lower_input);
|
||||
break;
|
||||
case PROP_HIGHIN:
|
||||
g_value_set_int (value, videolevels->upper_input);
|
||||
break;
|
||||
case PROP_LOWOUT:
|
||||
g_value_set_int (value, videolevels->lower_output);
|
||||
break;
|
||||
case PROP_HIGHOUT:
|
||||
g_value_set_int (value, videolevels->upper_output);
|
||||
break;
|
||||
default:
|
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gst_videolevels_set_caps (GstBaseTransform * base, GstCaps * incaps,
|
||||
GstCaps * outcaps)
|
||||
{
|
||||
GstVideoLevels *levels;
|
||||
GstStructure *structure;
|
||||
gboolean res;
|
||||
|
||||
levels = GST_VIDEOLEVELS (base);
|
||||
|
||||
GST_DEBUG_OBJECT (levels,
|
||||
"set_caps: in %" GST_PTR_FORMAT " out %" GST_PTR_FORMAT, incaps, outcaps);
|
||||
|
||||
structure = gst_caps_get_structure (incaps, 0);
|
||||
|
||||
res = gst_structure_get_int (structure, "width", &levels->width);
|
||||
res &= gst_structure_get_int (structure, "height", &levels->height);
|
||||
res &= gst_structure_get_int (structure, "bpp", &levels->bpp);
|
||||
res &= gst_structure_get_int (structure, "depth", &levels->depth);
|
||||
if (!res)
|
||||
goto done;
|
||||
|
||||
levels->size = levels->width * levels->height;
|
||||
calculate_tables(levels);
|
||||
|
||||
done:
|
||||
return res;
|
||||
}
|
||||
|
||||
static GstCaps *
|
||||
gst_videolevels_transform_caps (GstBaseTransform * trans,
|
||||
GstPadDirection direction, GstCaps * caps)
|
||||
{
|
||||
GstVideoLevels *videolevels;
|
||||
GstCaps *newcaps;
|
||||
GstStructure *structure;
|
||||
GstStructure *newstruct;
|
||||
int bpp;
|
||||
|
||||
videolevels = GST_VIDEOLEVELS (trans);
|
||||
|
||||
GST_DEBUG_OBJECT (caps, "transforming caps (from)");
|
||||
|
||||
structure = gst_caps_get_structure (caps, 0);
|
||||
|
||||
newcaps = gst_caps_new_simple ("video/x-raw-gray", NULL);
|
||||
|
||||
newstruct = gst_caps_get_structure (newcaps, 0);
|
||||
|
||||
gst_structure_set_value (newstruct, "width",
|
||||
gst_structure_get_value (structure, "width"));
|
||||
gst_structure_set_value (newstruct, "height",
|
||||
gst_structure_get_value (structure, "height"));
|
||||
gst_structure_set_value (newstruct, "framerate",
|
||||
gst_structure_get_value (structure, "framerate"));
|
||||
|
||||
if (direction == GST_PAD_SRC) {
|
||||
GST_CAT_INFO(videolevels_debug, "direction=SRC");
|
||||
bpp = 16;
|
||||
} else {
|
||||
GST_CAT_INFO(videolevels_debug, "direction=SINK");
|
||||
bpp = 8;
|
||||
}
|
||||
|
||||
gst_structure_set (newstruct,
|
||||
"bpp", G_TYPE_INT, bpp,
|
||||
"depth", G_TYPE_INT, bpp,
|
||||
NULL
|
||||
);
|
||||
|
||||
GST_DEBUG_OBJECT (newcaps, "transforming caps (into)");
|
||||
|
||||
return newcaps;
|
||||
}
|
||||
|
||||
static gboolean gst_videolevels_get_unit_size (GstBaseTransform * base,
|
||||
GstCaps * caps, guint * size)
|
||||
{
|
||||
GstStructure *structure;
|
||||
int width;
|
||||
int height;
|
||||
int pixsize;
|
||||
|
||||
structure = gst_caps_get_structure (caps, 0);
|
||||
|
||||
if (gst_structure_get_int (structure, "width", &width) &&
|
||||
gst_structure_get_int (structure, "height", &height) &&
|
||||
gst_structure_get_int (structure, "bpp", &pixsize)) {
|
||||
*size = width * height * (pixsize/8);
|
||||
GST_CAT_DEBUG(videolevels_debug, "Get unit size width=%d,height=%d,size=%d",width,height,*size);
|
||||
return TRUE;
|
||||
}
|
||||
GST_ELEMENT_ERROR (base, CORE, NEGOTIATION, (NULL),
|
||||
("Incomplete caps, some required field missing"));
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static void reset(GstVideoLevels* filter)
|
||||
{
|
||||
filter->width = 0;
|
||||
filter->height = 0;
|
||||
filter->lower_input = DEFAULT_PROP_LOWIN;
|
||||
filter->upper_input = DEFAULT_PROP_HIGHIN;
|
||||
filter->lower_output = DEFAULT_PROP_LOWOUT;
|
||||
filter->upper_output = DEFAULT_PROP_HIGHOUT;
|
||||
}
|
||||
|
||||
static GstFlowReturn
|
||||
gst_videolevels_transform (GstBaseTransform * base, GstBuffer * inbuf,
|
||||
GstBuffer * outbuf)
|
||||
{
|
||||
GstVideoLevels *filter = GST_VIDEOLEVELS (base);
|
||||
guint16 *input;
|
||||
guint8 *output;
|
||||
|
||||
/*
|
||||
* We need to lock our filter params to prevent changing
|
||||
* caps in the middle of a transformation (nice way to get
|
||||
* segfaults)
|
||||
*/
|
||||
GST_OBJECT_LOCK (filter);
|
||||
|
||||
input = (guint16 *) GST_BUFFER_DATA (inbuf);
|
||||
output = (guint8 *) GST_BUFFER_DATA (outbuf);
|
||||
|
||||
do_levels (filter, input, output,
|
||||
filter->height * filter->width);
|
||||
|
||||
GST_OBJECT_UNLOCK (filter);
|
||||
return GST_FLOW_OK;
|
||||
}
|
||||
|
||||
static void
|
||||
calculate_tables (GstVideoLevels * videolevels)
|
||||
{
|
||||
int i;
|
||||
guint16 loIn, hiIn;
|
||||
guint8 loOut, hiOut;
|
||||
double slope;
|
||||
|
||||
GST_INFO_OBJECT (videolevels, "gst_videolevels_get_property");
|
||||
|
||||
GST_BASE_TRANSFORM (videolevels)->passthrough = FALSE;
|
||||
|
||||
loIn = videolevels->lower_input;
|
||||
hiIn = videolevels->upper_input;
|
||||
loOut = videolevels->lower_output;
|
||||
hiOut = videolevels->upper_output;
|
||||
|
||||
|
||||
if(hiIn==loIn)
|
||||
slope=0;
|
||||
else
|
||||
slope = (double)(hiOut-loOut)/(hiIn-loIn);
|
||||
|
||||
for(i=0;i<loIn;i++)
|
||||
videolevels->levels_table[i] = loOut;
|
||||
for(i=loIn;i<hiIn;i++) {
|
||||
videolevels->levels_table[i] = loOut+(guint8)((i-loIn)*slope);
|
||||
}
|
||||
for(i=hiIn;i<65536;i++)
|
||||
videolevels->levels_table[i] = hiOut;
|
||||
}
|
||||
|
||||
static void
|
||||
do_levels (GstVideoLevels * videolevels, guint16 * indata, guint8* outdata, gint size)
|
||||
{
|
||||
int i;
|
||||
guint8* dst = outdata;
|
||||
guint16* src = indata;
|
||||
for (i = 0; i < size; i++) {
|
||||
*dst++ = videolevels->levels_table[*src++];
|
||||
}
|
||||
}
|
||||
|
||||
static gboolean
|
||||
plugin_init (GstPlugin * plugin)
|
||||
{
|
||||
GST_DEBUG_CATEGORY_INIT (videolevels_debug, "videolevels", 0, "videolevels");
|
||||
GST_CAT_INFO(videolevels_debug, "plugin_init");
|
||||
return gst_element_register (plugin, "videolevels", GST_RANK_NONE, GST_TYPE_VIDEOLEVELS);
|
||||
}
|
||||
|
||||
GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
|
||||
GST_VERSION_MINOR,
|
||||
"videolevels",
|
||||
"Changes videolevels on video images",
|
||||
plugin_init,
|
||||
VERSION,
|
||||
GST_LICENSE,
|
||||
GST_PACKAGE_NAME,
|
||||
GST_PACKAGE_ORIGIN
|
||||
);
|
||||
80
gst/gstvideolevels.h
Normal file
80
gst/gstvideolevels.h
Normal file
@@ -0,0 +1,80 @@
|
||||
/* GStreamer
|
||||
* Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
|
||||
* Copyright (C) <2003> David Schleef <ds@schleef.org>
|
||||
* Copyright (C) 2003 Arwed v. Merkatz <v.merkatz@gmx.net>
|
||||
* Copyright (C) 2006 Mark Nauwelaerts <manauw@skynet.be>
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Library General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Library General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
* Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
|
||||
#ifndef __GST_VIDEO_LEVELS_H__
|
||||
#define __GST_VIDEO_LEVELS_H__
|
||||
|
||||
#include <gst/video/gstvideofilter.h>
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
#define GST_TYPE_VIDEOLEVELS \
|
||||
(gst_videolevels_get_type())
|
||||
#define GST_VIDEOLEVELS(obj) \
|
||||
(G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_VIDEOLEVELS,GstVideoLevels))
|
||||
#define GST_VIDEOLEVELS_CLASS(klass) \
|
||||
(G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_VIDEOLEVELS,GstVideoLevelsClass))
|
||||
#define GST_IS_VIDEOLEVELS(obj) \
|
||||
(G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_VIDEOLEVELS))
|
||||
#define GST_IS_VIDEOLEVELS_CLASS(klass) \
|
||||
(G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_VIDEOLEVELS))
|
||||
|
||||
typedef struct _GstVideoLevels GstVideoLevels;
|
||||
typedef struct _GstVideoLevelsClass GstVideoLevelsClass;
|
||||
|
||||
/**
|
||||
* GstVideoLevels:
|
||||
*
|
||||
* Opaque data structure.
|
||||
*/
|
||||
struct _GstVideoLevels
|
||||
{
|
||||
GstVideoFilter videofilter;
|
||||
|
||||
/* format */
|
||||
gint width;
|
||||
gint height;
|
||||
gint bpp;
|
||||
gint depth;
|
||||
gint size;
|
||||
|
||||
/* properties */
|
||||
guint16 lower_input;
|
||||
guint16 upper_input;
|
||||
guint8 lower_output;
|
||||
guint8 upper_output;
|
||||
|
||||
/* tables */
|
||||
guint8* levels_table;
|
||||
};
|
||||
|
||||
struct _GstVideoLevelsClass
|
||||
{
|
||||
GstVideoFilterClass parent_class;
|
||||
};
|
||||
|
||||
GType gst_videolevels_get_type(void);
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
#endif /* __GST_VIDEO_LEVELS_H__ */
|
||||
21
set_paths_and_run_cmake.bat
Normal file
21
set_paths_and_run_cmake.bat
Normal file
@@ -0,0 +1,21 @@
|
||||
rem ########################################################################
|
||||
set GSTREAMER_DIR=C:\Users\joshua.doe\Apps\gstreamer
|
||||
set LIBXML2_DIR=C:\Users\joshua.doe\Apps\gstreamer
|
||||
set LIBICONV_DIR=C:\Users\joshua.doe\Apps\gstreamer
|
||||
set GLIB2_DIR=C:\Users\joshua.doe\Apps\gstreamer
|
||||
set NIIMAQ_DIR=C:\Program Files\National Instruments
|
||||
|
||||
rem cd mingw32
|
||||
rem del *ache* && cmake -G "MinGW Makefiles" ..
|
||||
|
||||
rem cd vs8
|
||||
rem del *ache* && cmake -G "Visual Studio 8 2005" ..
|
||||
|
||||
cd vs9
|
||||
del *ache* && cmake -G "Visual Studio 9 2008" ..
|
||||
|
||||
rem cd codeblocks
|
||||
rem del *ache* && cmake -G "CodeBlocks - MinGW Makefiles" ..
|
||||
|
||||
cmd
|
||||
rem ########################################################################
|
||||
20
sys/CMakeLists.txt
Normal file
20
sys/CMakeLists.txt
Normal file
@@ -0,0 +1,20 @@
|
||||
add_definitions(-DHAVE_CONFIG_H)
|
||||
|
||||
set ( SOURCES
|
||||
gstniimaq.c )
|
||||
|
||||
set ( HEADERS
|
||||
gstniimaq.h )
|
||||
|
||||
include_directories ( AFTER
|
||||
.
|
||||
${NIIMAQ_INCLUDE_DIR} )
|
||||
|
||||
add_library ( libgstimaq MODULE
|
||||
${SOURCES}
|
||||
${HEADERS} )
|
||||
|
||||
target_link_libraries ( libgstimaq
|
||||
general ${GLIB2_LIBRARIES}
|
||||
general ${GSTREAMER_LIBRARIES}
|
||||
general ${NIIMAQ_LIBRARY} )
|
||||
660
sys/gstniimaq.c
Normal file
660
sys/gstniimaq.c
Normal file
@@ -0,0 +1,660 @@
|
||||
/* GStreamer
|
||||
* Copyright (C) <2006> Eric Jonas <jonas@mit.edu>
|
||||
* Copyright (C) <2006> Antoine Tremblay <hexa00@gmail.com>
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Library General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Library General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
* Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
/**
|
||||
* SECTION:element-niimaqsrc
|
||||
*
|
||||
* Source for IIDC (Instrumentation & Industrial Digital Camera) firewire
|
||||
* cameras.
|
||||
*
|
||||
* <refsect2>
|
||||
* <title>Example launch line</title>
|
||||
* |[
|
||||
* gst-launch -v niimaqsrc camera-number=0 ! xvimagesink
|
||||
* ]|
|
||||
* </refsect2>
|
||||
*/
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#include "gstniimaq.h"
|
||||
//#include <sys/time.h>
|
||||
#include <time.h>
|
||||
#include <string.h>
|
||||
|
||||
GST_DEBUG_CATEGORY (niimaq_debug);
|
||||
#define GST_CAT_DEFAULT niimaq_debug
|
||||
|
||||
static GstElementDetails niimaq_details =
|
||||
GST_ELEMENT_DETAILS ("NI-IMAQ Video Source",
|
||||
"Source/Video",
|
||||
"National Instruments based source, supports CameraLink cameras",
|
||||
"Josh Doe <oss@nvl.army.mil>");
|
||||
|
||||
enum
|
||||
{
|
||||
PROP_0,
|
||||
PROP_TIMESTAMP_OFFSET,
|
||||
PROP_BUFSIZE
|
||||
/* FILL ME */
|
||||
};
|
||||
|
||||
#define DEFAULT_PROP_TIMESTAMP_OFFSET 0
|
||||
#define DEFAULT_PROP_BUFSIZE 10
|
||||
|
||||
GST_BOILERPLATE (GstNiImaq, gst_niimaq, GstPushSrc, GST_TYPE_PUSH_SRC);
|
||||
|
||||
/* GObject virtual methods */
|
||||
static void gst_niimaq_dispose (GObject * object);
|
||||
static void gst_niimaq_set_property (GObject * object, guint prop_id,
|
||||
const GValue * value, GParamSpec * pspec);
|
||||
static void gst_niimaq_get_property (GObject * object, guint prop_id,
|
||||
GValue * value, GParamSpec * pspec);
|
||||
|
||||
/* GstBaseSrc virtual methods */
|
||||
static GstCaps *gst_niimaq_get_caps (GstBaseSrc * bsrc);
|
||||
static gboolean gst_niimaq_set_caps (GstBaseSrc * bsrc, GstCaps * caps);
|
||||
static void gst_niimaq_src_fixate (GstPad * pad, GstCaps * caps);
|
||||
static void gst_niimaq_get_times (GstBaseSrc * basesrc,
|
||||
GstBuffer * buffer, GstClockTime * start, GstClockTime * end);
|
||||
static gboolean gst_niimaq_start (GstBaseSrc * src);
|
||||
static gboolean gst_niimaq_stop (GstBaseSrc * src);
|
||||
|
||||
/* GstPushSrc virtual methods */
|
||||
static GstFlowReturn gst_niimaq_create (GstPushSrc * psrc, GstBuffer ** buffer);
|
||||
|
||||
/* GstNiImaq methods */
|
||||
static gboolean gst_niimaq_parse_caps (const GstCaps * caps,
|
||||
gint * width,
|
||||
gint * height,
|
||||
gint * rate_numerator, gint * rate_denominator, gint * depth, gint * bpp);
|
||||
|
||||
static gboolean gst_niimaq_set_caps_color (GstStructure * gs, int bpp, int depth);
|
||||
static gboolean gst_niimaq_set_caps_framesize (GstStructure * gs, gint width,
|
||||
gint height);
|
||||
|
||||
static GstCaps *gst_niimaq_get_all_niimaq_caps ();
|
||||
static GstCaps *gst_niimaq_get_cam_caps (GstNiImaq * src);
|
||||
|
||||
static void _____BEGIN_FUNCTIONS_____();
|
||||
|
||||
static void
|
||||
gst_niimaq_base_init (gpointer g_class)
|
||||
{
|
||||
GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
|
||||
|
||||
gst_element_class_set_details (element_class, &niimaq_details);
|
||||
|
||||
gst_element_class_add_pad_template (element_class,
|
||||
gst_pad_template_new ("src", GST_PAD_SRC, GST_PAD_ALWAYS,
|
||||
gst_niimaq_get_all_niimaq_caps ()));
|
||||
|
||||
}
|
||||
|
||||
static void
|
||||
gst_niimaq_class_init (GstNiImaqClass * klass)
|
||||
{
|
||||
GObjectClass *gobject_class;
|
||||
GstBaseSrcClass *gstbasesrc_class;
|
||||
GstPushSrcClass *gstpushsrc_class;
|
||||
GstElementClass *gstelement_class;
|
||||
|
||||
gobject_class = (GObjectClass *) klass;
|
||||
gstbasesrc_class = (GstBaseSrcClass *) klass;
|
||||
gstpushsrc_class = (GstPushSrcClass *) klass;
|
||||
gstelement_class = (GstElementClass *) klass;
|
||||
|
||||
gobject_class->dispose = gst_niimaq_dispose;
|
||||
gobject_class->set_property = gst_niimaq_set_property;
|
||||
gobject_class->get_property = gst_niimaq_get_property;
|
||||
|
||||
g_object_class_install_property (G_OBJECT_CLASS (klass),
|
||||
PROP_TIMESTAMP_OFFSET, g_param_spec_int64 ("timestamp-offset",
|
||||
"Timestamp offset",
|
||||
"An offset added to timestamps set on buffers (in ns)", G_MININT64,
|
||||
G_MAXINT64, DEFAULT_PROP_TIMESTAMP_OFFSET, G_PARAM_READWRITE));
|
||||
|
||||
g_object_class_install_property (G_OBJECT_CLASS (klass),
|
||||
PROP_BUFSIZE, g_param_spec_int ("buffer-size",
|
||||
"The number of frames in the dma ringbuffer",
|
||||
"The number of frames in the dma ringbuffer", 1,
|
||||
G_MAXINT, DEFAULT_PROP_BUFSIZE, G_PARAM_READWRITE));
|
||||
|
||||
gstbasesrc_class->get_caps = gst_niimaq_get_caps;
|
||||
gstbasesrc_class->set_caps = gst_niimaq_set_caps;
|
||||
|
||||
gstbasesrc_class->get_times = gst_niimaq_get_times;
|
||||
gstpushsrc_class->create = gst_niimaq_create;
|
||||
gstbasesrc_class->start = gst_niimaq_start;
|
||||
gstbasesrc_class->stop = gst_niimaq_stop;
|
||||
}
|
||||
|
||||
static void
|
||||
gst_niimaq_init (GstNiImaq * src, GstNiImaqClass * g_class)
|
||||
{
|
||||
GstPad *srcpad = GST_BASE_SRC_PAD (src);
|
||||
|
||||
gst_base_src_set_live (GST_BASE_SRC (src), TRUE);
|
||||
gst_pad_use_fixed_caps (srcpad);
|
||||
|
||||
src->timestamp_offset = 0;
|
||||
src->caps = gst_niimaq_get_all_niimaq_caps ();
|
||||
src->bufsize = 10;
|
||||
src->n_frames = 0;
|
||||
src->cumbufnum = 0;
|
||||
src->n_dropped_frames = 0;
|
||||
src->buflist = 0;
|
||||
src->sid = 0;
|
||||
src->iid = 0;
|
||||
src->device_name = g_strdup_printf ("img2");
|
||||
|
||||
}
|
||||
|
||||
static void
|
||||
gst_niimaq_dispose (GObject * object)
|
||||
{
|
||||
GstNiImaq *src = GST_NIIMAQ (object);
|
||||
|
||||
g_free (src->device_name);
|
||||
src->device_name = NULL;
|
||||
|
||||
G_OBJECT_CLASS (parent_class)->dispose (object);
|
||||
}
|
||||
|
||||
static void
|
||||
gst_niimaq_set_property (GObject * object, guint prop_id,
|
||||
const GValue * value, GParamSpec * pspec)
|
||||
{
|
||||
GstNiImaq *src = GST_NIIMAQ (object);
|
||||
|
||||
switch (prop_id) {
|
||||
case PROP_TIMESTAMP_OFFSET:
|
||||
src->timestamp_offset = g_value_get_int64 (value);
|
||||
break;
|
||||
case PROP_BUFSIZE:
|
||||
src->bufsize = g_value_get_int (value);
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
gst_niimaq_get_property (GObject * object, guint prop_id, GValue * value,
|
||||
GParamSpec * pspec)
|
||||
{
|
||||
GstNiImaq *src = GST_NIIMAQ (object);
|
||||
|
||||
switch (prop_id) {
|
||||
case PROP_TIMESTAMP_OFFSET:
|
||||
g_value_set_int64 (value, src->timestamp_offset);
|
||||
break;
|
||||
case PROP_BUFSIZE:
|
||||
g_value_set_int (value, src->bufsize);
|
||||
break;
|
||||
default:
|
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static GstCaps *
|
||||
gst_niimaq_get_caps (GstBaseSrc * bsrc)
|
||||
{
|
||||
GstNiImaq *gsrc;
|
||||
|
||||
gsrc = GST_NIIMAQ (bsrc);
|
||||
|
||||
g_return_val_if_fail (gsrc->caps, NULL);
|
||||
|
||||
return gst_caps_copy (gsrc->caps);
|
||||
}
|
||||
|
||||
|
||||
static gboolean
|
||||
gst_niimaq_set_caps (GstBaseSrc * bsrc, GstCaps * caps)
|
||||
{
|
||||
|
||||
gboolean res = TRUE;
|
||||
GstNiImaq *niimaq;
|
||||
gint width, height, rate_denominator, rate_numerator;
|
||||
gint bpp, depth;
|
||||
|
||||
niimaq = GST_NIIMAQ (bsrc);
|
||||
|
||||
if (niimaq->caps) {
|
||||
gst_caps_unref (niimaq->caps);
|
||||
}
|
||||
|
||||
niimaq->caps = gst_niimaq_get_cam_caps(niimaq);
|
||||
|
||||
res = gst_niimaq_parse_caps (niimaq->caps, &width, &height,
|
||||
&rate_numerator, &rate_denominator, &depth, &bpp);
|
||||
|
||||
if (res) {
|
||||
/* looks ok here */
|
||||
niimaq->width = width;
|
||||
niimaq->height = height;
|
||||
niimaq->rate_numerator = rate_numerator;
|
||||
niimaq->rate_denominator = rate_denominator;
|
||||
niimaq->depth = depth;
|
||||
niimaq->bpp = bpp;
|
||||
niimaq->framesize = width * height * (depth/8);
|
||||
}
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
static void
|
||||
gst_niimaq_get_times (GstBaseSrc * basesrc, GstBuffer * buffer,
|
||||
GstClockTime * start, GstClockTime * end)
|
||||
{
|
||||
/* for live sources, sync on the timestamp of the buffer */
|
||||
if (gst_base_src_is_live (basesrc)) {
|
||||
GstClockTime timestamp = GST_BUFFER_TIMESTAMP (buffer);
|
||||
|
||||
if (GST_CLOCK_TIME_IS_VALID (timestamp)) {
|
||||
/* get duration to calculate end time */
|
||||
GstClockTime duration = GST_BUFFER_DURATION (buffer);
|
||||
|
||||
if (GST_CLOCK_TIME_IS_VALID (duration)) {
|
||||
*end = timestamp + duration;
|
||||
}
|
||||
*start = timestamp;
|
||||
}
|
||||
} else {
|
||||
*start = -1;
|
||||
*end = -1;
|
||||
}
|
||||
}
|
||||
|
||||
static GstFlowReturn
|
||||
gst_niimaq_create (GstPushSrc * psrc, GstBuffer ** buffer)
|
||||
{
|
||||
GstNiImaq *src;
|
||||
gpointer data;
|
||||
GstCaps *caps;
|
||||
GstFlowReturn res = GST_FLOW_OK;
|
||||
uInt32 newval, *bufaddr;
|
||||
Int32 rval;
|
||||
uInt32 dropped;
|
||||
|
||||
src = GST_NIIMAQ (psrc);
|
||||
|
||||
data = g_malloc(src->framesize);
|
||||
|
||||
GST_INFO_OBJECT(src, "Examining buffer %d", src->cumbufnum);
|
||||
rval=imgSessionExamineBuffer2(src->sid, src->cumbufnum, &newval, &bufaddr);
|
||||
if (rval) {
|
||||
GST_ELEMENT_ERROR (src, RESOURCE, FAILED,
|
||||
("failed to examine buffer %d", src->cumbufnum), ("failed to examine buffer %d", src->cumbufnum));
|
||||
goto error;
|
||||
}
|
||||
|
||||
memcpy (data, (guchar *) bufaddr,
|
||||
src->framesize);
|
||||
|
||||
imgSessionReleaseBuffer(src->sid);
|
||||
GST_INFO_OBJECT(src, "Releasing buffer %d", newval);
|
||||
|
||||
*buffer = gst_buffer_new ();
|
||||
GST_BUFFER_DATA (*buffer) = data;
|
||||
GST_BUFFER_MALLOCDATA (*buffer) = data;
|
||||
GST_BUFFER_SIZE (*buffer) = src->framesize;
|
||||
|
||||
caps = gst_pad_get_caps (GST_BASE_SRC_PAD (psrc));
|
||||
gst_buffer_set_caps (*buffer, caps);
|
||||
gst_caps_unref (caps);
|
||||
|
||||
//GST_BUFFER_TIMESTAMP (outbuf) = src->timestamp_offset + src->running_time;
|
||||
//if (src->rate_numerator != 0) {
|
||||
// GST_BUFFER_DURATION (outbuf) = gst_util_uint64_scale_int (GST_SECOND,
|
||||
// src->rate_denominator, src->rate_numerator);
|
||||
//}
|
||||
|
||||
dropped = newval - src->cumbufnum;
|
||||
if(dropped) {
|
||||
src->n_dropped_frames += dropped;
|
||||
GST_WARNING_OBJECT(src, "Dropped %d frames (%d total)",dropped,src->n_dropped_frames);
|
||||
}
|
||||
|
||||
src->cumbufnum = newval + 1;
|
||||
src->n_frames++;
|
||||
//if (src->rate_numerator != 0) {
|
||||
// src->running_time = gst_util_uint64_scale_int (src->n_frames * GST_SECOND,
|
||||
// src->rate_denominator, src->rate_numerator);
|
||||
//}
|
||||
|
||||
return res;
|
||||
|
||||
error:
|
||||
{
|
||||
return GST_FLOW_ERROR;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static gboolean
|
||||
gst_niimaq_parse_caps (const GstCaps * caps,
|
||||
gint * width,
|
||||
gint * height,
|
||||
gint * rate_numerator, gint * rate_denominator, gint * depth, gint * bpp)
|
||||
{
|
||||
const GstStructure *structure;
|
||||
GstPadLinkReturn ret;
|
||||
const GValue *framerate;
|
||||
|
||||
if (gst_caps_get_size (caps) < 1)
|
||||
return FALSE;
|
||||
|
||||
structure = gst_caps_get_structure (caps, 0);
|
||||
|
||||
ret = gst_structure_get_int (structure, "width", width);
|
||||
ret &= gst_structure_get_int (structure, "height", height);
|
||||
|
||||
framerate = gst_structure_get_value (structure, "framerate");
|
||||
|
||||
ret &= gst_structure_get_int (structure, "depth", depth);
|
||||
|
||||
ret &= gst_structure_get_int (structure, "bpp", bpp);
|
||||
|
||||
|
||||
if (framerate) {
|
||||
*rate_numerator = gst_value_get_fraction_numerator (framerate);
|
||||
*rate_denominator = gst_value_get_fraction_denominator (framerate);
|
||||
} else {
|
||||
ret = FALSE;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* Set color on caps */
|
||||
static gboolean
|
||||
gst_niimaq_set_caps_color (GstStructure * gs, int bpp, int depth)
|
||||
{
|
||||
gboolean ret = TRUE;
|
||||
|
||||
gst_structure_set_name (gs, "video/x-raw-gray");
|
||||
gst_structure_set (gs,
|
||||
"bpp", G_TYPE_INT, bpp,
|
||||
"depth", G_TYPE_INT, depth, NULL);
|
||||
if(depth>8)
|
||||
gst_structure_set(gs, "endianness", G_TYPE_INT, G_LITTLE_ENDIAN,NULL);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
static gboolean
|
||||
gst_niimaq_set_caps_framesize (GstStructure * gs, gint width, gint height)
|
||||
{
|
||||
gst_structure_set (gs,
|
||||
"width", G_TYPE_INT, width, "height", G_TYPE_INT, height, NULL);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
GstCaps *
|
||||
gst_niimaq_get_all_niimaq_caps ()
|
||||
{
|
||||
/*
|
||||
generate all possible caps
|
||||
|
||||
*/
|
||||
|
||||
GstCaps *gcaps;
|
||||
GstStructure *gs;
|
||||
gint i = 0;
|
||||
|
||||
gcaps = gst_caps_new_empty ();
|
||||
|
||||
gs = gst_structure_empty_new ("video");
|
||||
gst_structure_set_name (gs, "video/x-raw-gray");
|
||||
gst_structure_set (gs,
|
||||
"width", GST_TYPE_INT_RANGE, 1, G_MAXINT,
|
||||
"height", GST_TYPE_INT_RANGE, 1, G_MAXINT,
|
||||
"bpp", GST_TYPE_INT_RANGE, 10, 16,
|
||||
"depth", G_TYPE_INT, 16,
|
||||
"endianness", G_TYPE_INT, G_LITTLE_ENDIAN,
|
||||
"framerate", GST_TYPE_FRACTION_RANGE, 0, 1, G_MAXINT, 1, NULL);
|
||||
gst_caps_append_structure (gcaps, gs);
|
||||
|
||||
gs = gst_structure_empty_new ("video");
|
||||
gst_structure_set_name (gs, "video/x-raw-gray");
|
||||
gst_structure_set (gs,
|
||||
"width", GST_TYPE_INT_RANGE, 1, G_MAXINT,
|
||||
"height", GST_TYPE_INT_RANGE, 1, G_MAXINT,
|
||||
"bpp", G_TYPE_INT, 8,
|
||||
"depth", G_TYPE_INT, 8,
|
||||
"framerate", GST_TYPE_FRACTION_RANGE, 0, 1, G_MAXINT, 1, NULL);
|
||||
gst_caps_append_structure (gcaps, gs);
|
||||
|
||||
return gcaps;
|
||||
}
|
||||
|
||||
GstCaps *
|
||||
gst_niimaq_get_cam_caps (GstNiImaq * src)
|
||||
{
|
||||
GstCaps *gcaps = NULL;
|
||||
Int32 rval;
|
||||
uInt32 val;
|
||||
int width, height, depth, bpp;
|
||||
GstStructure *gs;
|
||||
|
||||
gcaps = gst_caps_new_empty ();
|
||||
|
||||
if (!src->iid) {
|
||||
GST_ELEMENT_ERROR (src, RESOURCE, FAILED, ("Camera interface not open"),
|
||||
("Camera interface not open"));
|
||||
goto error;
|
||||
}
|
||||
|
||||
rval &= imgGetAttribute(src->iid, IMG_ATTR_BITSPERPIXEL, &val);
|
||||
bpp = val;
|
||||
rval &= imgGetAttribute(src->iid, IMG_ATTR_BYTESPERPIXEL, &val);
|
||||
depth = val*8;
|
||||
rval &= imgGetAttribute(src->iid, IMG_ATTR_ROI_WIDTH, &val);
|
||||
width = val;
|
||||
rval &= imgGetAttribute(src->iid, IMG_ATTR_ROI_HEIGHT, &val);
|
||||
height = val;
|
||||
|
||||
if (rval) {
|
||||
GST_ELEMENT_ERROR (src, STREAM, FAILED,
|
||||
("attempt to read attributes failed"),
|
||||
("attempt to read attributes failed"));
|
||||
goto error;
|
||||
}
|
||||
|
||||
gs = gst_structure_empty_new ("video");
|
||||
if (!gst_niimaq_set_caps_color(gs, bpp, depth) ||
|
||||
!gst_niimaq_set_caps_framesize(gs, width, height)) {
|
||||
GST_ELEMENT_ERROR (src, STREAM, FAILED,
|
||||
("attempt to set caps %dx%dx%d (%d) failed", width,height,depth, bpp),
|
||||
("attempt to set caps %dx%dx%d (%d) failed", width,height,depth, bpp));
|
||||
goto error;
|
||||
}
|
||||
|
||||
gst_structure_set(gs, "framerate", GST_TYPE_FRACTION_RANGE, 0, 1, G_MAXINT, 1, NULL);
|
||||
|
||||
gst_caps_append_structure (gcaps, gs);
|
||||
|
||||
return gcaps;
|
||||
|
||||
error:
|
||||
|
||||
if (gcaps) {
|
||||
gst_caps_unref (gcaps);
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gst_niimaq_start (GstBaseSrc * src)
|
||||
{
|
||||
GstNiImaq* filter = GST_NIIMAQ(src);
|
||||
Int32 rval;
|
||||
int i;
|
||||
|
||||
GST_LOG_OBJECT (filter, "Opening camera interface: %s", filter->device_name);
|
||||
|
||||
filter->iid = 0;
|
||||
filter->sid = 0;
|
||||
|
||||
rval=imgInterfaceOpen(filter->device_name,&(filter->iid));
|
||||
|
||||
if (rval) {
|
||||
GST_ELEMENT_ERROR (filter, RESOURCE, FAILED, ("Failed to open camera interface"),
|
||||
("Failed to open camera interface %d", filter->iid));
|
||||
goto error;
|
||||
}
|
||||
|
||||
GST_LOG_OBJECT (filter, "Opening camera session: %s", filter->device_name);
|
||||
|
||||
rval=imgSessionOpen(filter->iid, &(filter->sid));
|
||||
if (rval) {
|
||||
GST_ELEMENT_ERROR (filter, RESOURCE, FAILED, ("Failed to open camera session"),
|
||||
("Failed to open camera session %d", filter->sid));
|
||||
goto error;
|
||||
}
|
||||
|
||||
GST_LOG_OBJECT (filter, "Creating ring with %d buffers", filter->bufsize);
|
||||
|
||||
filter->buflist = g_new(guint32*, filter->bufsize);
|
||||
for(i=0;i<filter->bufsize;i++) {
|
||||
filter->buflist[i] = 0;
|
||||
}
|
||||
rval=imgRingSetup(filter->sid, filter->bufsize, (void**)(filter->buflist), 0, FALSE);
|
||||
if(rval) {
|
||||
GST_ELEMENT_ERROR (filter, RESOURCE, FAILED, ("Failed to create ring buffer"),
|
||||
("Failed to create ring buffer with %d buffers", filter->bufsize));
|
||||
goto error;
|
||||
}
|
||||
|
||||
//GST_LOG_OBJECT (filter, "Registering callback functions");
|
||||
//rval=imgSessionWaitSignalAsync2(filter->sid, IMG_SIGNAL_STATUS, IMG_BUF_COMPLETE, IMG_SIGNAL_STATE_RISING, Imaq_BUF_COMPLETE, filter);
|
||||
//if(rval) {
|
||||
// GST_ELEMENT_ERROR (filter, RESOURCE, FAILED, ("Failed to register BUF_COMPLETE callback"),
|
||||
// ("Failed to register BUF_COMPLETE callback"));
|
||||
// goto error;
|
||||
//}
|
||||
|
||||
GST_LOG_OBJECT (filter, "Starting acquisition");
|
||||
|
||||
rval=imgSessionStartAcquisition(filter->sid);
|
||||
|
||||
i = 0;
|
||||
while (rval != 0 && i++ < 5) {
|
||||
g_usleep (50000);
|
||||
if (rval=imgSessionStartAcquisition(filter->sid)) {
|
||||
if (rval != 0) {
|
||||
GST_LOG_OBJECT (src, "camera is still off , retrying");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (i >= 5) {
|
||||
GST_ELEMENT_ERROR (filter, RESOURCE, FAILED,
|
||||
("Camera doesn't seem to want to turn on!"),
|
||||
("Camera doesn't seem to want to turn on!"));
|
||||
goto error;
|
||||
}
|
||||
|
||||
GST_LOG_OBJECT (src, "got transmision status ON");
|
||||
|
||||
return TRUE;
|
||||
|
||||
error:
|
||||
|
||||
if(filter->sid)
|
||||
imgClose(filter->sid,TRUE);
|
||||
filter->sid = 0;
|
||||
if(filter->iid)
|
||||
imgClose(filter->iid,TRUE);
|
||||
filter->iid = 0;
|
||||
|
||||
return FALSE;;
|
||||
|
||||
}
|
||||
|
||||
|
||||
gboolean gst_niimaq_stop( GstBaseSrc * src )
|
||||
{
|
||||
GstNiImaq* filter = GST_NIIMAQ(src);
|
||||
Int32 rval;
|
||||
|
||||
rval=imgSessionStopAcquisition(filter->sid);
|
||||
if (rval) {
|
||||
GST_ELEMENT_ERROR (filter, RESOURCE, FAILED, ("Unable to stop transmision"),
|
||||
("Unable to stop transmision"));
|
||||
}
|
||||
|
||||
if(filter->sid)
|
||||
imgClose(filter->sid,TRUE);
|
||||
filter->sid = 0;
|
||||
if(filter->iid)
|
||||
imgClose(filter->iid,TRUE);
|
||||
filter->iid = 0;
|
||||
|
||||
GST_DEBUG_OBJECT (filter, "Capture stoped");
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
plugin_init (GstPlugin * plugin)
|
||||
{
|
||||
GST_DEBUG_CATEGORY_INIT (niimaq_debug, "niimaq", 0, "NI-IMAQ interface");
|
||||
|
||||
return gst_element_register (plugin, "niimaqsrc", GST_RANK_NONE,
|
||||
GST_TYPE_NIIMAQ);
|
||||
|
||||
}
|
||||
|
||||
GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
|
||||
GST_VERSION_MINOR,
|
||||
"niimaq",
|
||||
"NI-IMAQ Video Source",
|
||||
plugin_init, VERSION, GST_LICENSE, GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN)
|
||||
|
||||
|
||||
|
||||
// Enumerate cams
|
||||
// rval=imgInterfaceQueryNames(idx, name);
|
||||
//if(rval)
|
||||
//break;
|
||||
//
|
||||
//rval=imgInterfaceOpen(name, &iid);
|
||||
//if(rval)
|
||||
//continue;
|
||||
//
|
||||
//imgGetAttribute(iid, IMG_ATTR_NUM_PORTS, &nPorts);
|
||||
//imgClose(iid, TRUE);
|
||||
//for(j=0;j<nPorts;j++) {
|
||||
// if(nPorts>1) {
|
||||
// char num[33];
|
||||
// itoa(j,num,10);
|
||||
// strcat(name,"::"); //FIXME: this is probably not safe
|
||||
// strcat(name,num); //FIXME: this is probably not safe
|
||||
// }
|
||||
// rval=imgInterfaceOpen(name, &iid);
|
||||
// if(rval)
|
||||
// continue;
|
||||
82
sys/gstniimaq.h
Normal file
82
sys/gstniimaq.h
Normal file
@@ -0,0 +1,82 @@
|
||||
/* GStreamer
|
||||
* Copyright (C) <2006> Eric Jonas <jonas@mit.edu>
|
||||
* Copyright (C) <2006> Antoine Tremblay <hexa00@gmail.com>
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Library General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Library General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
* Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#ifndef __GST_NIIMAQ_H__
|
||||
#define __GST_NIIMAQ_H__
|
||||
|
||||
#include <gst/gst.h>
|
||||
#include <gst/base/gstpushsrc.h>
|
||||
#include <niimaq.h>
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
#define GST_TYPE_NIIMAQ \
|
||||
(gst_niimaq_get_type())
|
||||
#define GST_NIIMAQ(obj) \
|
||||
(G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_NIIMAQ,GstNiImaq))
|
||||
#define GST_NIIMAQ_CLASS(klass) \
|
||||
(G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_NIIMAQ,GstNiImaq))
|
||||
#define GST_IS_NIIMAQ(obj) \
|
||||
(G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_NIIMAQ))
|
||||
#define GST_IS_NIIMAQ_CLASS(obj) \
|
||||
(G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_NIIMAQ))
|
||||
|
||||
typedef struct _GstNiImaq GstNiImaq;
|
||||
typedef struct _GstNiImaqClass GstNiImaqClass;
|
||||
|
||||
struct _GstNiImaq {
|
||||
GstPushSrc element;
|
||||
|
||||
/* video state */
|
||||
gint width;
|
||||
gint height;
|
||||
gint depth;
|
||||
gint bpp;
|
||||
gint framesize;
|
||||
|
||||
gint rate_numerator;
|
||||
gint rate_denominator;
|
||||
|
||||
/* private */
|
||||
gint64 timestamp_offset; /* base offset */
|
||||
GstClockTime running_time; /* total running time */
|
||||
gint64 n_frames; /* total frames sent */
|
||||
uInt32 cumbufnum;
|
||||
gint64 n_dropped_frames;
|
||||
gboolean segment;
|
||||
gint bufsize;
|
||||
guint32** buflist;
|
||||
|
||||
gchar *device_name;
|
||||
INTERFACE_ID iid;
|
||||
SESSION_ID sid;
|
||||
|
||||
GstCaps *caps;
|
||||
};
|
||||
|
||||
struct _GstNiImaqClass {
|
||||
GstPushSrcClass parent_class;
|
||||
};
|
||||
|
||||
GType gst_niimaq_get_type (void);
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
#endif /* __GST_NIIMAQ_H__ */
|
||||
Reference in New Issue
Block a user