int _getBinning(uint32_t *sX, uint32_t *sY){ if(camera==NULL) { dc1394_log_error("Camera is not initialised"); return -1; } err=dc1394_format7_get_unit_size(camera, video_mode, sX, sY); DC1394_ERR_RTN(err,"Unable to set Format7 mode 0.\nEdit the example file manually to fit your camera capabilities"); return 0; }
void ofxLibdc::quantizeSize() { unsigned int hunit, vunit; dc1394_format7_get_unit_size(camera, videoMode, &hunit, &vunit); width = (width / hunit) * hunit; height = (height / vunit) * vunit; }
GstCaps * gst_dc1394_get_cam_caps (GstDc1394 * src) { dc1394camera_t *camera = NULL; dc1394camera_list_t *cameras = NULL; dc1394error_t camerr; gint i, j; dc1394video_modes_t modes; dc1394framerates_t framerates; GstCaps *gcaps = NULL; gcaps = gst_caps_new_empty (); camerr = dc1394_camera_enumerate (src->dc1394, &cameras); if (camerr != DC1394_SUCCESS || cameras == NULL) { GST_ELEMENT_ERROR (src, RESOURCE, NOT_FOUND, ("Can't find cameras error : %d", camerr), ("Can't find cameras error : %d", camerr)); goto error; } if (cameras->num == 0) { GST_ELEMENT_ERROR (src, RESOURCE, NOT_FOUND, ("There were no cameras"), ("There were no cameras")); goto error; } if (src->camnum > (cameras->num - 1)) { GST_ELEMENT_ERROR (src, RESOURCE, FAILED, ("Invalid camera number"), ("Invalid camera number %d", src->camnum)); goto error; } camera = dc1394_camera_new_unit (src->dc1394, cameras->ids[src->camnum].guid, cameras->ids[src->camnum].unit); dc1394_camera_free_list (cameras); cameras = NULL; camerr = dc1394_video_get_supported_modes (camera, &modes); if (camerr != DC1394_SUCCESS) { GST_ELEMENT_ERROR (src, RESOURCE, FAILED, ("Error getting supported modes"), ("Error getting supported modes")); goto error; } for (i = modes.num - 1; i >= 0; i--) { int m = modes.modes[i]; if (m < DC1394_VIDEO_MODE_EXIF) { GstStructure *gs = gst_structure_empty_new ("video"); gst_structure_set (gs, "vmode", G_TYPE_INT, m, NULL); if (gst_dc1394_caps_set_format_vmode_caps (gs, m) < 0) { GST_ELEMENT_ERROR (src, STREAM, FAILED, ("attempt to set mode to %d failed", m), ("attempt to set mode to %d failed", m)); goto error; } else { camerr = dc1394_video_get_supported_framerates (camera, m, &framerates); gst_dc1394_caps_set_framerate_list (gs, &framerates); gst_caps_append_structure (gcaps, gs); } } else { // FORMAT 7 guint maxx, maxy; GstStructure *gs = gst_structure_empty_new ("video"); dc1394color_codings_t colormodes; guint xunit, yunit; gst_structure_set (gs, "vmode", G_TYPE_INT, m, NULL); // Get the maximum frame size camerr = dc1394_format7_get_max_image_size (camera, m, &maxx, &maxy); if (camerr != DC1394_SUCCESS) { GST_ELEMENT_ERROR (src, RESOURCE, FAILED, ("Error getting format 7 max image size"), ("Error getting format 7 max image size")); goto error; } GST_LOG_OBJECT (src, "Format 7 maxx=%d maxy=%d", maxx, maxy); camerr = dc1394_format7_get_unit_size (camera, m, &xunit, &yunit); if (camerr != DC1394_SUCCESS) { GST_ELEMENT_ERROR (src, RESOURCE, FAILED, ("Error getting format 7 image unit size"), ("Error getting format 7 image unit size")); goto error; } GST_LOG_OBJECT (src, "Format 7 unitx=%d unity=%d", xunit, yunit); gst_dc1394_set_caps_framesize_range (gs, xunit, maxx, xunit, yunit, maxy, yunit); // note that format 7 has no concept of a framerate, so we pass the // full range gst_structure_set (gs, "framerate", GST_TYPE_FRACTION_RANGE, 0, 1, G_MAXINT, 1, NULL); // get the available color codings camerr = dc1394_format7_get_color_codings (camera, m, &colormodes); if (camerr != DC1394_SUCCESS) { GST_ELEMENT_ERROR (src, RESOURCE, FAILED, ("Error getting format 7 color modes"), ("Error getting format 7 color modes")); goto error; } for (j = 0; j < colormodes.num; j++) { GstStructure *newgs = gst_structure_copy (gs); gst_dc1394_set_caps_color (newgs, colormodes.codings[j]); GST_LOG_OBJECT (src, "Format 7 colormode set : %d", colormodes.codings[j]); // note that since there are multiple color modes, we append // multiple structures. gst_caps_append_structure (gcaps, newgs); } } } if (camera) { dc1394_camera_free (camera); } return gcaps; error: if (gcaps) { gst_caps_unref (gcaps); } if (cameras) { dc1394_camera_free_list (cameras); cameras = NULL; } if (camera) { dc1394_camera_free (camera); camera = NULL; } return NULL; }