Files
libgphoto2/examples/sample-capture.c
axxel f41df32817 fix white-space and indentation inconsistencies (second round)
This is basically a continuation of the work from #1002 but her for the
camlibs directory. The purpose was to replace spaces as a means for
indentation with tab characters.

Note: there are some files which are still offending the general
rule but are (mostly) consistent within themselves. I let them be for
the moment. Fixing them would basically replace the whole file.

Also: there are still a ton of whitespace related inconsistencies like
"x=10" vs "x = 10" or "func(10)" vs "func (10)".

This is a whitespace only change (if you include newlines as whitespace).
2024-09-15 10:53:41 +02:00

142 lines
4.3 KiB
C

/*
* This code released into the public domain 21 July 2008
*
* This program does the equivalent of:
* gphoto2 --shell
* > set-config capture=1
* > capture-image-and-download
* compile with gcc -Wall -o canon-capture -lgphoto2 canon-capture.c
*
* Taken from: http://credentiality2.blogspot.com/2008/07/linux-libgphoto2-image-capture-from.html
*
* and condensed into simple capture sample
*/
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdarg.h>
#include <string.h>
#include <gphoto2/gphoto2.h>
#include "samples.h"
static void
errordumper(GPLogLevel level, const char *domain, const char *str, void *data) {
fprintf(stdout, "%s\n", str);
}
static void
capture_to_memory(Camera *camera, GPContext *context, const char **ptr, unsigned long int *size) {
int retval;
CameraFile *file;
CameraFilePath camera_file_path;
printf("Capturing.\n");
/* NOP: This gets overridden in the library to /capt0000.jpg */
strcpy(camera_file_path.folder, "/");
strcpy(camera_file_path.name, "foo.jpg");
retval = gp_camera_capture(camera, GP_CAPTURE_IMAGE, &camera_file_path, context);
printf(" Retval: %d\n", retval);
printf("Pathname on the camera: %s/%s\n", camera_file_path.folder, camera_file_path.name);
retval = gp_file_new(&file);
printf(" Retval: %d\n", retval);
retval = gp_camera_file_get(camera, camera_file_path.folder, camera_file_path.name,
GP_FILE_TYPE_NORMAL, file, context);
printf(" Retval: %d\n", retval);
gp_file_get_data_and_size (file, ptr, size);
printf("Deleting.\n");
retval = gp_camera_file_delete(camera, camera_file_path.folder, camera_file_path.name,
context);
printf(" Retval: %d\n", retval);
/*gp_file_free(file); */
}
static void
capture_to_file(Camera *camera, GPContext *context, char *fn) {
int fd, retval;
CameraFile *file;
CameraFilePath camera_file_path;
CameraFileInfo info;
printf("Capturing.\n");
/* NOP: This gets overridden in the library to /capt0000.jpg */
strcpy(camera_file_path.folder, "/");
strcpy(camera_file_path.name, "foo.jpg");
retval = gp_camera_capture(camera, GP_CAPTURE_IMAGE, &camera_file_path, context);
printf(" Retval: %d\n", retval);
printf("Pathname on the camera: %s/%s\n", camera_file_path.folder, camera_file_path.name);
retval = gp_camera_file_get_info (camera, camera_file_path.folder, camera_file_path.name, &info, context);
printf (" file info reported flags: %d\n", info.file.fields);
if (info.file.fields & GP_FILE_INFO_MTIME) printf (" info reported mtime: %ld\n", info.file.mtime);
if (info.file.fields & GP_FILE_INFO_SIZE) printf (" info reported size: %ld\n", info.file.size);
if (info.file.fields & GP_FILE_INFO_TYPE) printf (" info reported type: %s\n", info.file.type);
fd = open(fn, O_CREAT | O_WRONLY | O_BINARY, 0644);
retval = gp_file_new_from_fd(&file, fd);
printf(" Retval: %d\n", retval);
retval = gp_camera_file_get(camera, camera_file_path.folder, camera_file_path.name,
GP_FILE_TYPE_NORMAL, file, context);
printf(" Retval: %d\n", retval);
gp_file_free(file);
printf("Deleting.\n");
retval = gp_camera_file_delete(camera, camera_file_path.folder, camera_file_path.name,
context);
printf(" Retval: %d\n", retval);
}
int
main(int argc, char **argv) {
Camera *camera;
int retval;
GPContext *context = sample_create_context();
FILE *f;
char *data;
unsigned long size;
gp_log_add_func(GP_LOG_ERROR, errordumper, NULL);
gp_camera_new(&camera);
/* When I set GP_LOG_DEBUG instead of GP_LOG_ERROR above, I noticed that the
* init function seems to traverse the entire filesystem on the camera. This
* is partly why it takes so long.
* (Marcus: the ptp2 driver does this by default currently.)
*/
printf("Camera init. Takes about 10 seconds.\n");
retval = gp_camera_init(camera, context);
if (retval != GP_OK) {
printf(" Retval of capture_to_file: %d\n", retval);
exit (1);
}
capture_to_file(camera, context, "foo.jpg");
capture_to_memory(camera, context, (const char**)&data, &size);
f = fopen("foo2.jpg", "wb");
if (f) {
retval = fwrite (data, size, 1, f);
if (retval != (int)size) {
printf(" fwrite size %ld, written %d\n", size, retval);
}
fclose(f);
} else
printf(" fopen foo2.jpg failed.\n");
gp_camera_exit(camera, context);
return 0;
}