phoenix: expose board and channel via properties

Conflicts:

	sys/phoenix/gstphoenixsrc.c
This commit is contained in:
Joshua M. Doe 2013-05-15 16:44:14 -04:00
parent 0a1f4baf4f
commit d462014dfd
2 changed files with 74 additions and 4 deletions

View File

@ -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;

View File

@ -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;