phoenix: expose board and channel via properties
Conflicts: sys/phoenix/gstphoenixsrc.c
This commit is contained in:
parent
0a1f4baf4f
commit
d462014dfd
@ -66,11 +66,15 @@ enum
|
|||||||
{
|
{
|
||||||
PROP_0,
|
PROP_0,
|
||||||
PROP_CAMERA_CONFIG_FILEPATH,
|
PROP_CAMERA_CONFIG_FILEPATH,
|
||||||
PROP_NUM_CAPTURE_BUFFERS
|
PROP_NUM_CAPTURE_BUFFERS,
|
||||||
|
PROP_BOARD,
|
||||||
|
PROP_CHANNEL
|
||||||
};
|
};
|
||||||
|
|
||||||
#define DEFAULT_PROP_CAMERA_CONFIG_FILEPATH NULL /* defaults to 640x480x8bpp */
|
#define DEFAULT_PROP_CAMERA_CONFIG_FILEPATH NULL /* defaults to 640x480x8bpp */
|
||||||
#define DEFAULT_PROP_NUM_CAPTURE_BUFFERS 2
|
#define DEFAULT_PROP_NUM_CAPTURE_BUFFERS 2
|
||||||
|
#define DEFAULT_PROP_BOARD 0
|
||||||
|
#define DEFAULT_PROP_CHANNEL 0
|
||||||
|
|
||||||
/* pad templates */
|
/* pad templates */
|
||||||
|
|
||||||
@ -155,7 +159,16 @@ gst_phoenixsrc_class_init (GstPhoenixSrcClass * klass)
|
|||||||
"Number of capture buffers", 1, G_MAXUINT,
|
"Number of capture buffers", 1, G_MAXUINT,
|
||||||
DEFAULT_PROP_NUM_CAPTURE_BUFFERS,
|
DEFAULT_PROP_NUM_CAPTURE_BUFFERS,
|
||||||
(GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
|
(GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
|
||||||
|
g_object_class_install_property (gobject_class, PROP_BOARD,
|
||||||
|
g_param_spec_uint ("board", "Board",
|
||||||
|
"Board number (0 for auto)", 0, 7,
|
||||||
|
DEFAULT_PROP_BOARD,
|
||||||
|
(GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
|
||||||
|
g_object_class_install_property (gobject_class, PROP_CHANNEL,
|
||||||
|
g_param_spec_uint ("channel", "Channel",
|
||||||
|
"Channel number (0 for auto)", 0, 2,
|
||||||
|
DEFAULT_PROP_CHANNEL,
|
||||||
|
(GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -221,6 +234,12 @@ gst_phoenixsrc_set_property (GObject * object, guint property_id,
|
|||||||
g_new (guint64, phoenixsrc->num_capture_buffers);
|
g_new (guint64, phoenixsrc->num_capture_buffers);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case PROP_BOARD:
|
||||||
|
phoenixsrc->board = g_value_get_uint (value);
|
||||||
|
break;
|
||||||
|
case PROP_CHANNEL:
|
||||||
|
phoenixsrc->channel = g_value_get_uint (value);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
|
||||||
break;
|
break;
|
||||||
@ -243,6 +262,12 @@ gst_phoenixsrc_get_property (GObject * object, guint property_id,
|
|||||||
case PROP_NUM_CAPTURE_BUFFERS:
|
case PROP_NUM_CAPTURE_BUFFERS:
|
||||||
g_value_set_uint (value, phoenixsrc->num_capture_buffers);
|
g_value_set_uint (value, phoenixsrc->num_capture_buffers);
|
||||||
break;
|
break;
|
||||||
|
case PROP_BOARD:
|
||||||
|
g_value_set_uint (value, phoenixsrc->board);
|
||||||
|
break;
|
||||||
|
case PROP_CHANNEL:
|
||||||
|
g_value_set_uint (value, phoenixsrc->channel);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
|
||||||
break;
|
break;
|
||||||
@ -366,6 +391,7 @@ gst_phoenixsrc_start (GstBaseSrc * src)
|
|||||||
GstVideoInfo vinfo;
|
GstVideoInfo vinfo;
|
||||||
GstCaps *caps;
|
GstCaps *caps;
|
||||||
gboolean res;
|
gboolean res;
|
||||||
|
guint eCamConfig;
|
||||||
|
|
||||||
GST_DEBUG_OBJECT (phoenixsrc, "start");
|
GST_DEBUG_OBJECT (phoenixsrc, "start");
|
||||||
|
|
||||||
@ -379,11 +405,53 @@ gst_phoenixsrc_start (GstBaseSrc * src)
|
|||||||
goto Error;
|
goto Error;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* TODO: hacky, use enums or something */
|
||||||
|
eCamConfig = PHX_DIGITAL;
|
||||||
|
switch (phoenixsrc->board) {
|
||||||
|
case 0:
|
||||||
|
eCamConfig |= PHX_BOARD_AUTO;
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
eCamConfig |= PHX_BOARD1;
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
eCamConfig |= PHX_BOARD2;
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
eCamConfig |= PHX_BOARD3;
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
eCamConfig |= PHX_BOARD4;
|
||||||
|
break;
|
||||||
|
case 5:
|
||||||
|
eCamConfig |= PHX_BOARD5;
|
||||||
|
break;
|
||||||
|
case 6:
|
||||||
|
eCamConfig |= PHX_BOARD6;
|
||||||
|
break;
|
||||||
|
case 7:
|
||||||
|
eCamConfig |= PHX_BOARD7;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
g_assert_not_reached ();
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (phoenixsrc->channel) {
|
||||||
|
case 0:
|
||||||
|
eCamConfig |= PHX_CHANNEL_AUTO;
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
eCamConfig |= PHX_CHANNEL1;
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
eCamConfig |= PHX_CHANNEL2;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
/* Initialize board */
|
/* Initialize board */
|
||||||
/* TODO: this picks first digital board using default settings, parameterize this! */
|
|
||||||
eStat =
|
eStat =
|
||||||
PHX_CameraConfigLoad (&phoenixsrc->hCamera, phoenixsrc->config_filepath,
|
PHX_CameraConfigLoad (&phoenixsrc->hCamera, phoenixsrc->config_filepath,
|
||||||
PHX_BOARD_AUTO | PHX_DIGITAL, PHX_ErrHandlerDefault);
|
(etCamConfigLoad) eCamConfig, PHX_ErrHandlerDefault);
|
||||||
if (eStat != PHX_OK) {
|
if (eStat != PHX_OK) {
|
||||||
GST_ELEMENT_ERROR (phoenixsrc, LIBRARY, INIT, (NULL), (NULL));
|
GST_ELEMENT_ERROR (phoenixsrc, LIBRARY, INIT, (NULL), (NULL));
|
||||||
goto Error;
|
goto Error;
|
||||||
|
|||||||
@ -62,6 +62,8 @@ struct _GstPhoenixSrc
|
|||||||
/* properties */
|
/* properties */
|
||||||
gchar *config_filepath;
|
gchar *config_filepath;
|
||||||
guint num_capture_buffers;
|
guint num_capture_buffers;
|
||||||
|
guint board;
|
||||||
|
guint channel;
|
||||||
|
|
||||||
GstClockTime first_phoenix_ts;
|
GstClockTime first_phoenix_ts;
|
||||||
guint64 *frame_start_times;
|
guint64 *frame_start_times;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user