All pastes #957885 Raw Edit

alesan

public c v1 · immutable
#957885 ·published 2008-03-26 08:28 UTC
rendered paste body
# Copyright 2008 Alessio Sangalli# This code is GNU GPL#include <stdio.h>#include <stdlib.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <gphoto2/gphoto2-camera.h>int d = 0;int main(){	GPContext* context;	CameraAbilitiesList* al;	GPPortInfoList* il;	CameraList* list;	const char* model;	const char* port;	int i, c;	int res;	Camera** cameras;	char** camera_names;		// Auto-detection of cameras	context = gp_context_new();	gp_abilities_list_new(&al);	gp_abilities_list_load(al, context);	gp_port_info_list_new(&il);	gp_port_info_list_load(il);	gp_list_new(&list);	gp_abilities_list_detect(al, il, list, context);		// Now we have the list of connected cameras; let's prepare the structures	c=gp_list_count(list)-1;	cameras = malloc(sizeof(Camera*)*c);	camera_names = malloc(sizeof(char*)*c);	printf("Number of cameras: %d\n", c);	// We skip the first "generic" one	for(i=1; i<=c; i++)	{		int m, p;		GPPortInfo info;		CameraAbilities a;				// We get info on the abilities of this camera...		gp_list_get_name(list, i, &model);		m = gp_abilities_list_lookup_model(al, model);		gp_abilities_list_get_abilities(al, m, &a);				// We get info about the port...		gp_list_get_value(list, i, &port);		p = gp_port_info_list_lookup_path(il, port);		gp_port_info_list_get_info(il, p, &info);				// We allocate and set the camera.		printf("Detected camera #%d: name='%s' port='%s'\n", i-1, model, port);		gp_camera_new(&cameras[i-1]);		gp_camera_set_abilities(cameras[i-1], a);		gp_camera_set_port_info(cameras[i-1], info);	}		// Cleanup	gp_list_unref(list);	gp_port_info_list_free(il);	gp_abilities_list_free(al);		// We now initialize the communication with cameras	for(i=0; i<c; i++)	{		gp_camera_init(cameras[i], context);		printf("Initializing communication with camera #%d\n", i);	}		// We now get and set some configuration data	for(i=0; i<c; i++)	{		CameraWidget* widget_root;		CameraWidget* widget_main;		CameraWidget* widget_settings;		CameraWidget* widget_imgsettings;		CameraWidget* widget_capturesettings;		CameraWidget* widget_value;		int value_int;		float value_float;				// General		res = gp_camera_get_config(cameras[i], &widget_root, context);		if(res!=GP_OK) {printf("01 - Code: %d - %s\n", res, gp_result_as_string(res)); continue;}		res = gp_widget_get_child_by_name(widget_root, "main", &widget_main);		if(res!=GP_OK) {printf("02 - Code: %d - %s\n", res, gp_result_as_string(res)); continue;}		res = gp_widget_get_child_by_name(widget_main, "settings", &widget_settings);		if(res!=GP_OK) {printf("03 - Code: %d - %s\n", res, gp_result_as_string(res)); continue;}				// Owner		res = gp_widget_get_child_by_name(widget_settings, "owner", &widget_value);		if(res!=GP_OK) {printf("04 - Code: %d - %s\n", res, gp_result_as_string(res)); continue;}		//res = gp_widget_get_value(widget_value, camera_names[i]);		if(res!=GP_OK) {printf("05 - Code: %d - %s\n", res, gp_result_as_string(res)); continue;}		//printf("Camera #%d - value='%s'\n", i, camera_names[i]);				// We enable capture		res = gp_widget_get_child_by_name(widget_settings, "capture", &widget_value);		if(res!=GP_OK) {printf("06 - Code: %d - %s\n", res, gp_result_as_string(res)); continue;}		value_int = 1;		res = gp_widget_set_value(widget_value, &value_int);		if(res!=GP_OK) {printf("07 - Code: %d - %s\n", res, gp_result_as_string(res)); continue;}				// We commit the config		res = gp_camera_set_config(cameras[i], widget_root, context);		if(res!=GP_OK) {printf("07.5 - Code: %d - %s\n", res, gp_result_as_string(res)); continue;}				// We look for more settings		res = gp_widget_get_child_by_name(widget_main, "imgsettings", &widget_imgsettings);		if(res!=GP_OK) {printf("08 - Code: %d - %s\n", res, gp_result_as_string(res)); continue;}		res = gp_widget_get_child_by_name(widget_main, "capturesettings", &widget_capturesettings);		if(res!=GP_OK) {printf("09 - Code: %d - %s\n", res, gp_result_as_string(res)); continue;}				// And we set image quality, size, zoom.		res = gp_widget_get_child_by_name(widget_imgsettings, "imgquality", &widget_value);		if(res!=GP_OK) {printf("10 - Code: %d - %s\n", res, gp_result_as_string(res)); continue;}		value_int = 0;		res = gp_widget_set_value(widget_value, &value_int);		if(res!=GP_OK) {printf("11 - Code: %d - %s\n", res, gp_result_as_string(res)); continue;}				res = gp_widget_get_child_by_name(widget_imgsettings, "imgsize", &widget_value);		if(res!=GP_OK) {printf("12 - Code: %d - %s\n", res, gp_result_as_string(res)); continue;}		value_int = 3;		res = gp_widget_set_value(widget_value, &value_int);		if(res!=GP_OK) {printf("13 - Code: %d - %s\n", res, gp_result_as_string(res)); continue;}				res = gp_widget_get_child_by_name(widget_capturesettings, "zoom", &widget_value);		if(res!=GP_OK) {printf("14 - Code: %d - %s\n", res, gp_result_as_string(res)); continue;}		value_float = 14.0;		res = gp_widget_set_value(widget_value, &value_float);		if(res!=GP_OK) {printf("15 - Code: %d - %s\n", res, gp_result_as_string(res)); continue;}				// We commit the config		res = gp_camera_set_config(cameras[i], widget_root, context);		if(res!=GP_OK) {printf("16 - Code: %d - %s\n", res, gp_result_as_string(res)); continue;}				gp_widget_unref(widget_root);	}		// Shall we finally capture some pics?	for(i=0; i<c; i++)	{		CameraFilePath path;		CameraFile* file;		int fd;		char output_file[1024];				res = gp_camera_capture(cameras[i], GP_CAPTURE_IMAGE, &path, context);		if(res!=GP_OK) {printf("17 - Code: %d - %s\n", res, gp_result_as_string(res)); continue;}		//sprintf(output_file, "capt-%s-%d.jpg", camera_names[i], i);		sprintf(output_file, "capt-%d.jpg", i);		fd = open(output_file, O_CREAT|O_WRONLY);		res = gp_file_new_from_fd(&file, fd);		if(res!=GP_OK) {printf("18 - Code: %d - %s\n", res, gp_result_as_string(res)); continue;}		res = gp_camera_file_get(cameras[i], path.folder, path.name, GP_FILE_TYPE_NORMAL, file, context);		if(res!=GP_OK) {printf("19 - Code: %d - %s\n", res, gp_result_as_string(res)); continue;}		res = gp_file_unref(file);		if(res!=GP_OK) {printf("20 - Code: %d - %s\n", res, gp_result_as_string(res)); continue;}		close(fd);	}		// Cleanup	for(i=0; i<c; i++)	{		gp_camera_exit(cameras[i], context);		gp_camera_unref(cameras[i]);	}	gp_context_unref(context);	return 0;}