int main(int argc, char *argv[]) { dc1394_t * d; dc1394camera_list_t * list; dc1394camera_t *camera; dc1394error_t err; d = dc1394_new (); if (!d) return 1; int cam=0; int num=-1; int chan; unsigned int val; do { err=dc1394_camera_enumerate (d, &list); DC1394_ERR_RTN(err,"Failed to enumerate cameras"); if (list->num == 0) { dc1394_log_error("No cameras found"); return 1; } else { num=list->num; } printf("Camera %d\n",cam); camera = dc1394_camera_new (d, list->ids[cam].guid); if (!camera) { dc1394_log_error("Failed to initialize camera with guid %llx", list->ids[cam].guid); return 1; } dc1394_camera_free_list (list); printf("Using camera with GUID %"PRIx64"\n", camera->guid); printf ("Reseting bus...\n"); if (dc1394_reset_bus (camera) != DC1394_SUCCESS) printf ("Warning: reset reported error\n"); dc1394_capture_stop(camera); dc1394_iso_release_all(camera); if ( dc1394_video_get_bandwidth_usage(camera,&val) == DC1394_SUCCESS && dc1394_iso_release_bandwidth(camera,val) == DC1394_SUCCESS) { printf("Freed %d Bandwidth\n",val); } if ( dc1394_video_get_iso_channel(camera,&val) == DC1394_SUCCESS && dc1394_iso_release_channel(camera,val) == DC1394_SUCCESS) { printf("Freed ISO %d\n",val); } dc1394_video_set_transmission(camera, DC1394_OFF); //dc1394_iso_release_bandwidth(camera, 10000000); /*dc1394_iso_release_bandwidth(camera, INT_MAX); for(chan=0;chan<64;chan++) { dc1394_iso_release_channel(camera,chan); }*/ dc1394_camera_free (camera); cam++; } while(cam<num); dc1394_free (d); return 0; }
static gboolean gst_dc1394_open_cam_with_best_caps (GstDc1394 * src) { dc1394camera_list_t *cameras = NULL; gint err = 0; int framerateconst; GST_LOG_OBJECT (src, "Opening the camera!!!"); if (dc1394_camera_enumerate (src->dc1394, &cameras) != DC1394_SUCCESS) { GST_ELEMENT_ERROR (src, RESOURCE, FAILED, ("Can't find cameras"), ("Can't find cameras")); goto error; } GST_LOG_OBJECT (src, "Found %d cameras", cameras->num); if (src->camnum > (cameras->num - 1)) { GST_ELEMENT_ERROR (src, RESOURCE, FAILED, ("Invalid camera number"), ("Invalid camera number")); goto error; } GST_LOG_OBJECT (src, "Opening camera : %d", src->camnum); src->camera = dc1394_camera_new_unit (src->dc1394, cameras->ids[src->camnum].guid, cameras->ids[src->camnum].unit); dc1394_camera_free_list (cameras); cameras = NULL; // figure out mode framerateconst = gst_dc1394_framerate_frac_to_const (src->rate_numerator, src->rate_denominator); GST_LOG_OBJECT (src, "The dma buffer queue size is %d buffers", src->bufsize); switch (src->iso_speed) { case 100: err = dc1394_video_set_iso_speed (src->camera, DC1394_ISO_SPEED_100); break; case 200: err = dc1394_video_set_iso_speed (src->camera, DC1394_ISO_SPEED_200); break; case 400: err = dc1394_video_set_iso_speed (src->camera, DC1394_ISO_SPEED_400); break; case 800: if (src->camera->bmode_capable > 0) { dc1394_video_set_operation_mode (src->camera, DC1394_OPERATION_MODE_1394B); err = dc1394_video_set_iso_speed (src->camera, DC1394_ISO_SPEED_800); } break; case 1600: if (src->camera->bmode_capable > 0) { dc1394_video_set_operation_mode (src->camera, DC1394_OPERATION_MODE_1394B); err = dc1394_video_set_iso_speed (src->camera, DC1394_ISO_SPEED_1600); } break; case 3200: if (src->camera->bmode_capable > 0) { dc1394_video_set_operation_mode (src->camera, DC1394_OPERATION_MODE_1394B); err = dc1394_video_set_iso_speed (src->camera, DC1394_ISO_SPEED_3200); } break; default: GST_ELEMENT_ERROR (src, RESOURCE, FAILED, ("Invalid ISO speed"), ("Invalid ISO speed")); goto error; break; } if (err != DC1394_SUCCESS) { GST_ELEMENT_ERROR (src, RESOURCE, FAILED, ("Could not set ISO speed"), ("Could not set ISO speed")); goto error; } GST_LOG_OBJECT (src, "Setting mode : %d", src->vmode); err = dc1394_video_set_mode (src->camera, src->vmode); if (err != DC1394_SUCCESS) { GST_ELEMENT_ERROR (src, RESOURCE, FAILED, ("Could not set video mode %d", src->vmode), ("Could not set video mode %d", src->vmode)); goto error; } GST_LOG_OBJECT (src, "Setting framerate : %d", framerateconst); dc1394_video_set_framerate (src->camera, framerateconst); if (err != DC1394_SUCCESS) { GST_ELEMENT_ERROR (src, RESOURCE, FAILED, ("Could not set framerate to %d", framerateconst), ("Could not set framerate to %d", framerateconst)); goto error; } // set any format-7 parameters if this is a format-7 mode if (src->vmode >= DC1394_VIDEO_MODE_FORMAT7_MIN && src->vmode <= DC1394_VIDEO_MODE_FORMAT7_MAX) { // the big thing we care about right now is frame size err = dc1394_format7_set_image_size (src->camera, src->vmode, src->width, src->height); if (err != DC1394_SUCCESS) { GST_ELEMENT_ERROR (src, RESOURCE, FAILED, ("Could not set format 7 image size to %d x %d", src->width, src->height), ("Could not set format 7 image size to %d x %d", src->width, src->height)); goto error; } } err = dc1394_capture_setup (src->camera, src->bufsize, DC1394_CAPTURE_FLAGS_DEFAULT); if (err != DC1394_SUCCESS) { GST_ELEMENT_ERROR (src, RESOURCE, FAILED, ("Error setting capture mode"), ("Error setting capture mode")); } if (err != DC1394_SUCCESS) { if (err == DC1394_NO_BANDWIDTH) { GST_LOG_OBJECT (src, "Capture setup_dma failed." "Trying to cleanup the iso_channels_and_bandwidth and retrying"); // try to cleanup the bandwidth and retry err = dc1394_iso_release_all (src->camera); if (err != DC1394_SUCCESS) { GST_ELEMENT_ERROR (src, RESOURCE, FAILED, ("Could not cleanup bandwidth"), ("Could not cleanup bandwidth")); goto error; } else { err = dc1394_capture_setup (src->camera, src->bufsize, DC1394_CAPTURE_FLAGS_DEFAULT); if (err != DC1394_SUCCESS) { GST_ELEMENT_ERROR (src, RESOURCE, FAILED, ("unable to setup camera error %d", err), ("unable to setup camera error %d", err)); goto error; } } } else { GST_ELEMENT_ERROR (src, RESOURCE, FAILED, ("unable to setup camera error %d", err), ("unable to setup camera error %d", err)); goto error; } } return TRUE; error: if (src->camera) { dc1394_camera_free (src->camera); src->camera = NULL; } return FALSE; }