[aravis] viewer: take pixel_format into account when setting gstappsrc caps.
- From: Emmanuel Pacaud <emmanuel src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [aravis] viewer: take pixel_format into account when setting gstappsrc caps.
- Date: Wed, 12 Jan 2011 09:19:32 +0000 (UTC)
commit 8961be8d84612b99ec57ebad966fc271c78a8210
Author: Emmanuel Pacaud <emmanuel gnome org>
Date: Wed Jan 12 10:18:36 2011 +0100
viewer: take pixel_format into account when setting gstappsrc caps.
viewer/arvviewer.c | 31 ++++++++++++++++++++++++++++---
1 files changed, 28 insertions(+), 3 deletions(-)
---
diff --git a/viewer/arvviewer.c b/viewer/arvviewer.c
index bdaf5c6..3fdc95b 100644
--- a/viewer/arvviewer.c
+++ b/viewer/arvviewer.c
@@ -30,6 +30,21 @@
#include <math.h>
typedef struct {
+ ArvPixelFormat pixel_format;
+ const char *media_type;
+ gint bpp;
+ gint depth;
+} ArvViewerCapsInfos;
+
+ArvViewerCapsInfos arv_viewer_caps_infos[] = {
+ { ARV_PIXEL_FORMAT_MONO_8, "video/x-raw-gray", 8, 8},
+ { ARV_PIXEL_FORMAT_MONO_10, "video/x-raw-gray", 16, 16},
+ { ARV_PIXEL_FORMAT_MONO_12, "video/x-raw-gray", 16, 16},
+ { ARV_PIXEL_FORMAT_MONO_16, "video/x-raw-gray", 16, 16},
+ { ARV_PIXEL_FORMAT_RGB_8_PACKED, "video/x-raw-rgb", 24, 24}
+};
+
+typedef struct {
ArvCamera *camera;
ArvDevice *device;
ArvStream *stream;
@@ -229,11 +244,13 @@ arv_viewer_select_camera_cb (GtkComboBox *combo_box, ArvViewer *viewer)
GstCaps *caps;
GstElement *ffmpegcolorspace;
GstElement *ximagesink;
+ ArvPixelFormat pixel_format;
char *camera_id;
char *text;
unsigned int payload;
int width;
int height;
+ int caps_infos_id;
unsigned int i;
gulong window_xid;
double exposure;
@@ -258,6 +275,7 @@ arv_viewer_select_camera_cb (GtkComboBox *combo_box, ArvViewer *viewer)
arv_stream_push_buffer (viewer->stream, arv_buffer_new (payload, NULL));
arv_camera_get_region (viewer->camera, NULL, NULL, &width, &height);
+ pixel_format = arv_camera_get_pixel_format (viewer->camera);
exposure = arv_camera_get_exposure_time (viewer->camera);
gain = arv_camera_get_gain (viewer->camera);
arv_camera_get_exposure_time_bounds (viewer->camera, &viewer->exposure_min, &viewer->exposure_max);
@@ -282,6 +300,13 @@ arv_viewer_select_camera_cb (GtkComboBox *combo_box, ArvViewer *viewer)
gtk_entry_set_text (GTK_ENTRY (viewer->frame_rate_entry), text);
g_free (text);
+ for (caps_infos_id = 0; caps_infos_id < G_N_ELEMENTS (arv_viewer_caps_infos); caps_infos_id++)
+ if (arv_viewer_caps_infos[caps_infos_id].pixel_format == pixel_format)
+ break;
+
+ if (caps_infos_id == G_N_ELEMENTS (arv_viewer_caps_infos))
+ return;
+
arv_camera_start_acquisition (viewer->camera);
viewer->pipeline = gst_pipeline_new ("pipeline");
@@ -292,9 +317,9 @@ arv_viewer_select_camera_cb (GtkComboBox *combo_box, ArvViewer *viewer)
g_object_set (ximagesink, "force-aspect-ratio", TRUE, NULL);
gst_bin_add_many (GST_BIN (viewer->pipeline), viewer->appsrc, ffmpegcolorspace, ximagesink, NULL);
gst_element_link_many (viewer->appsrc, ffmpegcolorspace, ximagesink, NULL);
- caps = gst_caps_new_simple ("video/x-raw-gray",
- "bpp", G_TYPE_INT, 8,
- "depth", G_TYPE_INT, 8,
+ caps = gst_caps_new_simple (arv_viewer_caps_infos[caps_infos_id].media_type,
+ "bpp", G_TYPE_INT, arv_viewer_caps_infos[caps_infos_id].bpp,
+ "depth", G_TYPE_INT, arv_viewer_caps_infos[caps_infos_id].depth,
"endianness", G_TYPE_INT, G_BIG_ENDIAN,
"width", G_TYPE_INT, width,
"height", G_TYPE_INT, height,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]