euresys: Fixes to get element working with filesink
Caps aren't correct, but I can correctly save camera output to file. Many printfs are sprinkled about as I'm having trouble with gst-debug, will remove later.
This commit is contained in:
parent
e2d2fea82c
commit
d788b025f9
@ -19,7 +19,7 @@ ELSE (EURESYS_INCLUDE_DIR AND EURESYS_LIBRARIES)
|
|||||||
ENDIF (EURESYS_INCLUDE_DIR AND EURESYS_LIBRARIES)
|
ENDIF (EURESYS_INCLUDE_DIR AND EURESYS_LIBRARIES)
|
||||||
|
|
||||||
IF (NOT EURESYS_DIR)
|
IF (NOT EURESYS_DIR)
|
||||||
SET (EURESYS_DIR "/usr/local/euresys/multicam" CACHE PATH "Directory containing Euresys Multicam includes and libraries")
|
SET (EURESYS_DIR "C:/Program Files/Euresys/MultiCam" CACHE PATH "Directory containing Euresys Multicam includes and libraries")
|
||||||
ENDIF (NOT EURESYS_DIR)
|
ENDIF (NOT EURESYS_DIR)
|
||||||
|
|
||||||
FIND_PATH (EURESYS_INCLUDE_DIR multicam.h
|
FIND_PATH (EURESYS_INCLUDE_DIR multicam.h
|
||||||
@ -27,9 +27,9 @@ FIND_PATH (EURESYS_INCLUDE_DIR multicam.h
|
|||||||
"${EURESYS_DIR}/include"
|
"${EURESYS_DIR}/include"
|
||||||
DOC "Directory containing multicam.h include file")
|
DOC "Directory containing multicam.h include file")
|
||||||
|
|
||||||
FIND_LIBRARY (EURESYS_LIBRARIES NAMES libMultiCam
|
FIND_LIBRARY (EURESYS_LIBRARIES NAMES MultiCam
|
||||||
PATHS
|
PATHS
|
||||||
"${EURESYS_DIR}/drivers"
|
"${EURESYS_DIR}/lib"
|
||||||
DOC "EURESYS library to link with")
|
DOC "EURESYS library to link with")
|
||||||
|
|
||||||
IF (EURESYS_INCLUDE_DIR)
|
IF (EURESYS_INCLUDE_DIR)
|
||||||
|
|||||||
@ -4,7 +4,7 @@ set LIBXML2_DIR=%GSTREAMER_DIR%
|
|||||||
set LIBICONV_DIR=%GSTREAMER_DIR%
|
set LIBICONV_DIR=%GSTREAMER_DIR%
|
||||||
set GLIB2_DIR=%GSTREAMER_DIR%
|
set GLIB2_DIR=%GSTREAMER_DIR%
|
||||||
set NIIMAQ_DIR=C:\Program Files\National Instruments
|
set NIIMAQ_DIR=C:\Program Files\National Instruments
|
||||||
set EURESYS_DIR=C:\Users\joshua.doe\Apps\multicam-6.5.1.1221
|
set EURESYS_DIR=C:\Program Files\Euresys\MultiCam
|
||||||
set OpenCV_DIR=C:\Users\joshua.doe\Apps\opencv
|
set OpenCV_DIR=C:\Users\joshua.doe\Apps\opencv
|
||||||
|
|
||||||
rem Plugins will be installed under %CMAKE_PREFIX_PATH%\lib\gstreamer-0.10
|
rem Plugins will be installed under %CMAKE_PREFIX_PATH%\lib\gstreamer-0.10
|
||||||
|
|||||||
@ -19,7 +19,8 @@ target_link_libraries ( libgsteuresys
|
|||||||
${GSTREAMER_LIBRARIES}
|
${GSTREAMER_LIBRARIES}
|
||||||
${GSTREAMER_BASE_LIBRARY}
|
${GSTREAMER_BASE_LIBRARY}
|
||||||
${GSTREAMER_INTERFACE_LIBRARY}
|
${GSTREAMER_INTERFACE_LIBRARY}
|
||||||
${GSTREAMER_VIDEO_LIBRARY})
|
${GSTREAMER_VIDEO_LIBRARY}
|
||||||
|
${EURESYS_LIBRARIES})
|
||||||
|
|
||||||
install (TARGETS libgsteuresys
|
install (TARGETS libgsteuresys
|
||||||
LIBRARY DESTINATION lib/gstreamer-0.10)
|
LIBRARY DESTINATION lib/gstreamer-0.10)
|
||||||
@ -66,14 +66,10 @@ static gboolean gst_euresys_get_size (GstBaseSrc * src, guint64 * size);
|
|||||||
static gboolean gst_euresys_is_seekable (GstBaseSrc * src);
|
static gboolean gst_euresys_is_seekable (GstBaseSrc * src);
|
||||||
static gboolean gst_euresys_unlock (GstBaseSrc * src);
|
static gboolean gst_euresys_unlock (GstBaseSrc * src);
|
||||||
static gboolean gst_euresys_event (GstBaseSrc * src, GstEvent * event);
|
static gboolean gst_euresys_event (GstBaseSrc * src, GstEvent * event);
|
||||||
static gboolean gst_euresys_do_seek (GstBaseSrc * src, GstSegment * segment);
|
|
||||||
static gboolean gst_euresys_query (GstBaseSrc * src, GstQuery * query);
|
static gboolean gst_euresys_query (GstBaseSrc * src, GstQuery * query);
|
||||||
static gboolean gst_euresys_check_get_range (GstBaseSrc * src);
|
static gboolean gst_euresys_check_get_range (GstBaseSrc * src);
|
||||||
static void gst_euresys_fixate (GstBaseSrc * src, GstCaps * caps);
|
static void gst_euresys_fixate (GstBaseSrc * src, GstCaps * caps);
|
||||||
static gboolean gst_euresys_unlock_stop (GstBaseSrc * src);
|
static gboolean gst_euresys_unlock_stop (GstBaseSrc * src);
|
||||||
static gboolean
|
|
||||||
gst_euresys_prepare_seek_segment (GstBaseSrc * src, GstEvent * seek,
|
|
||||||
GstSegment * segment);
|
|
||||||
static GstFlowReturn gst_euresys_create (GstPushSrc * src, GstBuffer ** buf);
|
static GstFlowReturn gst_euresys_create (GstPushSrc * src, GstBuffer ** buf);
|
||||||
|
|
||||||
enum
|
enum
|
||||||
@ -86,7 +82,7 @@ enum
|
|||||||
};
|
};
|
||||||
|
|
||||||
#define DEFAULT_PROP_BOARD_INDEX 0
|
#define DEFAULT_PROP_BOARD_INDEX 0
|
||||||
#define DEFAULT_PROP_CAMERA_TYPE MC_Camera_NTSC
|
#define DEFAULT_PROP_CAMERA_TYPE MC_Camera_CAMERA_NTSC
|
||||||
#define DEFAULT_PROP_CONNECTOR MC_Connector_VID1
|
#define DEFAULT_PROP_CONNECTOR MC_Connector_VID1
|
||||||
|
|
||||||
/* pad templates */
|
/* pad templates */
|
||||||
@ -153,10 +149,10 @@ gst_euresys_camera_get_type (void)
|
|||||||
{
|
{
|
||||||
static GType euresys_camera_type = 0;
|
static GType euresys_camera_type = 0;
|
||||||
static const GEnumValue euresys_camera[] = {
|
static const GEnumValue euresys_camera[] = {
|
||||||
{MC_Camera_CCIR, "CCIR", "CCIR broadcasting standard"},
|
{MC_Camera_CAMERA_CCIR, "CCIR", "CCIR broadcasting standard"},
|
||||||
{MC_Camera_EIA, "EIA", "EIA broadcasting standard"},
|
{MC_Camera_CAMERA_EIA, "EIA", "EIA broadcasting standard"},
|
||||||
{MC_Camera_PAL, "PAL", "PAL broadcasting standard"},
|
{MC_Camera_CAMERA_PAL, "PAL", "PAL broadcasting standard"},
|
||||||
{MC_Camera_NTSC, "NTSC", "NTSC broadcasting standard"},
|
{MC_Camera_CAMERA_NTSC, "NTSC", "NTSC broadcasting standard"},
|
||||||
{0, NULL, NULL},
|
{0, NULL, NULL},
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -170,12 +166,8 @@ gst_euresys_camera_get_type (void)
|
|||||||
|
|
||||||
/* class initialization */
|
/* class initialization */
|
||||||
|
|
||||||
#define DEBUG_INIT(bla) \
|
GST_BOILERPLATE (GstEuresys, gst_euresys, GstPushSrc,
|
||||||
GST_DEBUG_CATEGORY_INIT (gst_euresys_debug, "euresys", 0, \
|
GST_TYPE_PUSH_SRC);
|
||||||
"debug category for euresys element");
|
|
||||||
|
|
||||||
GST_BOILERPLATE_FULL (GstEuresys, gst_euresys, GstPushSrc,
|
|
||||||
GST_TYPE_PUSH_SRC, DEBUG_INIT);
|
|
||||||
|
|
||||||
|
|
||||||
static GstVideoFormat
|
static GstVideoFormat
|
||||||
@ -271,12 +263,10 @@ gst_euresys_class_init (GstEuresysClass * klass)
|
|||||||
base_src_class->is_seekable = GST_DEBUG_FUNCPTR (gst_euresys_is_seekable);
|
base_src_class->is_seekable = GST_DEBUG_FUNCPTR (gst_euresys_is_seekable);
|
||||||
base_src_class->unlock = GST_DEBUG_FUNCPTR (gst_euresys_unlock);
|
base_src_class->unlock = GST_DEBUG_FUNCPTR (gst_euresys_unlock);
|
||||||
base_src_class->event = GST_DEBUG_FUNCPTR (gst_euresys_event);
|
base_src_class->event = GST_DEBUG_FUNCPTR (gst_euresys_event);
|
||||||
base_src_class->do_seek = GST_DEBUG_FUNCPTR (gst_euresys_do_seek);
|
|
||||||
base_src_class->query = GST_DEBUG_FUNCPTR (gst_euresys_query);
|
base_src_class->query = GST_DEBUG_FUNCPTR (gst_euresys_query);
|
||||||
base_src_class->check_get_range = GST_DEBUG_FUNCPTR (gst_euresys_check_get_range);
|
base_src_class->check_get_range = GST_DEBUG_FUNCPTR (gst_euresys_check_get_range);
|
||||||
base_src_class->fixate = GST_DEBUG_FUNCPTR (gst_euresys_fixate);
|
base_src_class->fixate = GST_DEBUG_FUNCPTR (gst_euresys_fixate);
|
||||||
base_src_class->unlock_stop = GST_DEBUG_FUNCPTR (gst_euresys_unlock_stop);
|
base_src_class->unlock_stop = GST_DEBUG_FUNCPTR (gst_euresys_unlock_stop);
|
||||||
base_src_class->prepare_seek_segment = GST_DEBUG_FUNCPTR (gst_euresys_prepare_seek_segment);
|
|
||||||
|
|
||||||
push_src_class->create = GST_DEBUG_FUNCPTR (gst_euresys_create);
|
push_src_class->create = GST_DEBUG_FUNCPTR (gst_euresys_create);
|
||||||
|
|
||||||
@ -478,6 +468,8 @@ gst_euresys_start (GstBaseSrc * src)
|
|||||||
GstVideoFormat videoFormat;
|
GstVideoFormat videoFormat;
|
||||||
int width, height;
|
int width, height;
|
||||||
|
|
||||||
|
printf("REMOVE: start()\n");
|
||||||
|
|
||||||
GST_DEBUG_OBJECT (euresys, "start");
|
GST_DEBUG_OBJECT (euresys, "start");
|
||||||
|
|
||||||
/* Open MultiCam driver */
|
/* Open MultiCam driver */
|
||||||
@ -525,7 +517,7 @@ gst_euresys_start (GstBaseSrc * src)
|
|||||||
status = McSetParamInt(euresys->hChannel, MC_Camera, euresys->cameraType);
|
status = McSetParamInt(euresys->hChannel, MC_Camera, euresys->cameraType);
|
||||||
if (status != MC_OK) {
|
if (status != MC_OK) {
|
||||||
GST_ELEMENT_ERROR (euresys, RESOURCE, SETTINGS,
|
GST_ELEMENT_ERROR (euresys, RESOURCE, SETTINGS,
|
||||||
(_("Failed to set camera type.")), (NULL));
|
(_("Failed to set camera type = %d."), euresys->cameraType), (NULL));
|
||||||
McDelete (euresys->hChannel);
|
McDelete (euresys->hChannel);
|
||||||
euresys->hChannel = 0;
|
euresys->hChannel = 0;
|
||||||
return FALSE;
|
return FALSE;
|
||||||
@ -545,10 +537,21 @@ gst_euresys_start (GstBaseSrc * src)
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Enable signals */
|
||||||
|
status = McSetParamInt(euresys->hChannel, MC_SignalEnable + MC_SIG_SURFACE_PROCESSING, MC_SignalEnable_ON);
|
||||||
|
status |= McSetParamInt(euresys->hChannel, MC_SignalEnable + MC_SIG_ACQUISITION_FAILURE, MC_SignalEnable_ON);
|
||||||
|
if (status != MC_OK) {
|
||||||
|
GST_ELEMENT_ERROR (euresys, RESOURCE, SETTINGS,
|
||||||
|
(_("Failed to enable signals.")), (NULL));
|
||||||
|
McDelete (euresys->hChannel);
|
||||||
|
euresys->hChannel = 0;
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
/* TODO create caps */
|
/* TODO create caps */
|
||||||
status = McGetParamInt (euresys->hChannel, MC_ColorFormat, &colorFormat);
|
status = McGetParamInt (euresys->hChannel, MC_ColorFormat, &colorFormat);
|
||||||
status |= McGetParamInt (euresys->hChannel, MC_ImageSizeX, &width);
|
status |= McGetParamInt (euresys->hChannel, MC_ImageSizeX, &width);
|
||||||
status |= McGetParamInt (euresys->hChannel, MC_ImageSizeX, &height);
|
status |= McGetParamInt (euresys->hChannel, MC_ImageSizeY, &height);
|
||||||
if (status != MC_OK) {
|
if (status != MC_OK) {
|
||||||
GST_ELEMENT_ERROR (euresys, RESOURCE, SETTINGS,
|
GST_ELEMENT_ERROR (euresys, RESOURCE, SETTINGS,
|
||||||
(_("Failed to get color format, width, and height.")), (NULL));
|
(_("Failed to get color format, width, and height.")), (NULL));
|
||||||
@ -655,16 +658,6 @@ gst_euresys_event (GstBaseSrc * src, GstEvent * event)
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
|
||||||
gst_euresys_do_seek (GstBaseSrc * src, GstSegment * segment)
|
|
||||||
{
|
|
||||||
GstEuresys *euresys = GST_EURESYS (src);
|
|
||||||
|
|
||||||
GST_DEBUG_OBJECT (euresys, "do_seek");
|
|
||||||
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
gst_euresys_query (GstBaseSrc * src, GstQuery * query)
|
gst_euresys_query (GstBaseSrc * src, GstQuery * query)
|
||||||
{
|
{
|
||||||
@ -703,17 +696,6 @@ gst_euresys_unlock_stop (GstBaseSrc * src)
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
|
||||||
gst_euresys_prepare_seek_segment (GstBaseSrc * src, GstEvent * seek,
|
|
||||||
GstSegment * segment)
|
|
||||||
{
|
|
||||||
GstEuresys *euresys = GST_EURESYS (src);
|
|
||||||
|
|
||||||
GST_DEBUG_OBJECT (euresys, "seek_segment");
|
|
||||||
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
static GstFlowReturn
|
static GstFlowReturn
|
||||||
gst_euresys_create (GstPushSrc * src, GstBuffer ** buf)
|
gst_euresys_create (GstPushSrc * src, GstBuffer ** buf)
|
||||||
{
|
{
|
||||||
@ -727,6 +709,8 @@ gst_euresys_create (GstPushSrc * src, GstBuffer ** buf)
|
|||||||
int newsize;
|
int newsize;
|
||||||
GstFlowReturn ret;
|
GstFlowReturn ret;
|
||||||
|
|
||||||
|
printf("REMOVE: create()\n");
|
||||||
|
|
||||||
/* Start acquisition */
|
/* Start acquisition */
|
||||||
if (!euresys->acq_started) {
|
if (!euresys->acq_started) {
|
||||||
status = McSetParamInt(euresys->hChannel, MC_ChannelState, MC_ChannelState_ACTIVE);
|
status = McSetParamInt(euresys->hChannel, MC_ChannelState, MC_ChannelState_ACTIVE);
|
||||||
@ -742,9 +726,13 @@ gst_euresys_create (GstPushSrc * src, GstBuffer ** buf)
|
|||||||
while (TRUE) {
|
while (TRUE) {
|
||||||
/* Wait up to 5000 msecs for a signal */
|
/* Wait up to 5000 msecs for a signal */
|
||||||
status = McWaitSignal (euresys->hChannel, MC_SIG_ANY, 5000, &siginfo);
|
status = McWaitSignal (euresys->hChannel, MC_SIG_ANY, 5000, &siginfo);
|
||||||
|
printf("REMOVE: wait status=%d, signal = %d\n", status, siginfo.Signal);
|
||||||
|
GST_DEBUG ("Test debug from default category");
|
||||||
|
GST_DEBUG_OBJECT (euresys, "Test debug from default category");
|
||||||
if (status == MC_TIMEOUT) {
|
if (status == MC_TIMEOUT) {
|
||||||
|
printf("REMOVE: timeout\n");
|
||||||
GST_ELEMENT_ERROR (src, RESOURCE, FAILED,
|
GST_ELEMENT_ERROR (src, RESOURCE, FAILED,
|
||||||
(_("Timeout waiting for signal.")), (NULL));
|
(_("Timeout waiting for signal.")), (_("Timeout waiting for signal.")));
|
||||||
return GST_FLOW_ERROR;
|
return GST_FLOW_ERROR;
|
||||||
}
|
}
|
||||||
else if (siginfo.Signal == MC_SIG_ACQUISITION_FAILURE) {
|
else if (siginfo.Signal == MC_SIG_ACQUISITION_FAILURE) {
|
||||||
@ -756,6 +744,7 @@ gst_euresys_create (GstPushSrc * src, GstBuffer ** buf)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
printf("REMOVE: continue\n");
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -789,7 +778,7 @@ gst_euresys_create (GstPushSrc * src, GstBuffer ** buf)
|
|||||||
GST_ELEMENT_CAST (src)->base_time;
|
GST_ELEMENT_CAST (src)->base_time;
|
||||||
|
|
||||||
/* Done processing surface, release control */
|
/* Done processing surface, release control */
|
||||||
McSetParamInt (euresys->hChannel, MC_SurfaceState, MC_SurfaceState_FREE);
|
McSetParamInt (hSurface, MC_SurfaceState, MC_SurfaceState_FREE);
|
||||||
|
|
||||||
return GST_FLOW_OK;
|
return GST_FLOW_OK;
|
||||||
}
|
}
|
||||||
@ -797,7 +786,10 @@ gst_euresys_create (GstPushSrc * src, GstBuffer ** buf)
|
|||||||
static gboolean
|
static gboolean
|
||||||
plugin_init (GstPlugin * plugin)
|
plugin_init (GstPlugin * plugin)
|
||||||
{
|
{
|
||||||
|
printf ("REMOVE: gst_euresus_debug=%d\n", gst_euresys_debug);
|
||||||
|
GST_DEBUG_CATEGORY_INIT (gst_euresys_debug, "euresys", 0, \
|
||||||
|
"debug category for euresys element");
|
||||||
|
printf ("REMOVE: gst_euresus_debug=%d\n", gst_euresys_debug);
|
||||||
gst_element_register (plugin, "euresys", GST_RANK_NONE,
|
gst_element_register (plugin, "euresys", GST_RANK_NONE,
|
||||||
gst_euresys_get_type ());
|
gst_euresys_get_type ());
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user