From: Dan F. <dfa...@us...> - 2008-11-18 20:42:18
|
Update of /cvsroot/libexif/libexif/contrib/examples In directory ddv4jf1.ch3.sourceforge.com:/tmp/cvs-serv26892/contrib/examples Added Files: Makefile.am cam_features.c thumbnail.c Log Message: contrib/examples/*: Added a couple of simple example programs to show how to use libexif. One was written by Naysawn Naderi and the other one I wrote. Closes bug #1246824. --- NEW FILE: Makefile.am --- # Simple example programs check_PROGRAMS = thumbnail # Example programs with dependencies other than plain libexif COMPLICATED_EXAMPLES = cam_features.c # Build just the simple examples as a sanity check, but include them all in # the source archive EXTRA_DIST = $(COMPLICATED_EXAMPLES) LDADD = $(top_builddir)/libexif/libexif.la --- NEW FILE: cam_features.c --- /*************************************************************************** * cam_features.c * * Wed Jul 27 11:25:09 2005 * Copyright 2005 User: Naysawn Naderi * Email: ndn at xiphos dot ca ****************************************************************************/ #include <stdio.h> #include <libraw1394/raw1394.h> #include <libdc1394/dc1394_control.h> #include <libdc1394/dc1394_register.h> #include <stdlib.h> #include <time.h> #include <sys/times.h> #include <errno.h> //EXIF includes #include "config.h" #include "libjpeg/jpeg-data.h" #include "libexif/exif-data.h" #include "libexif/exif-ifd.h" #include "libexif/exif-loader.h" int createEXIF(dc1394featureset_t *xFeatures, ExifData ** pParentEd); int main(int argc, char *argv[]) { dc1394camera_t *pCamera, **pCameras=NULL; int iNumCameras; dc1394featureset_t xFeatures; int i; int err=dc1394_find_cameras(&pCameras, &iNumCameras); //EXIF STUFF char cJpegOutputname[] = "foobar2.jpg"; JPEGData *pData; //float fOnefloat; ExifData * pEd; if (err!=DC1394_SUCCESS) { fprintf( stderr, "Unable to look for cameras\n\n" "Please check \n" " - if the kernel modules `ieee1394',`raw1394' and `ohci1394' are loaded \n" " - if you have read/write access to /dev/raw1394\n\n"); exit(1); } /*----------------------------------------------------------------------- * Initialize the camera *-----------------------------------------------------------------------*/ if (iNumCameras<1) { fprintf(stderr, "no cameras found :(\n"); exit(1); } pCamera=pCameras[0]; for (i=1;i<iNumCameras;i++) dc1394_free_camera(pCameras[i]); free(pCameras); if(dc1394_get_camera_feature_set(pCamera, &xFeatures)!=DC1394_SUCCESS) fprintf(stdio, "unable to get feature set\n"); else printf("camera's feature set retrieved\n"); createEXIF(&xFeatures, &pEd); //tag the file with the settings of the camera //exif_data_dump (pEd); //write the Exif data to a jpeg file pData = jpeg_data_new_from_file ("test.jpg"); //input data if (!pData) { printf ("Could not load '%s'!\n", "test.jpg"); return (-1); } printf("Saving EXIF data to jpeg file\n"); jpeg_data_set_exif_data (pData, pEd); printf("Set the data\n"); jpeg_data_save_file(pData, "foobar2.jpg"); return 0; } int createEXIF(dc1394featureset_t *xFeatures, ExifData ** pParentEd) { ExifEntry *pE; ExifData * pEd; unsigned char *upcEb, ucpSize[2]; unsigned int uiEbs; int i = !xFeatures->feature[DC1394_FEATURE_WHITE_BALANCE - DC1394_FEATURE_MIN].auto_active; ExifSRational xR = {xFeatures->feature[DC1394_FEATURE_BRIGHTNESS - DC1394_FEATURE_MIN].value, xFeatures->feature[DC1394_FEATURE_BRIGHTNESS - DC1394_FEATURE_MIN].max};; JPEGData *pData; /* if (argc <= 1) { printf ("You need to specify a file!\n"); return (1); } data = jpeg_data_new_from_file ("foobar.jpg"); if (!data) { printf ("Could not load '%s'!\n", "foobar.jpg"); return (1); } */ printf ("Creating EXIF data...\n"); pEd = exif_data_new (); /* Things to tag: EXIF_TAG_MAKE = 0x010f, EXIF_TAG_MODEL = 0x0110, EXIF_TAG_EXPOSURE_TIME = 0x829a, EXIF_TAG_BRIGHTNESS_VALUE = 0x9203, EXIF_TAG_WHITE_BALANCE = 0xa403, EXIF_TAG_GAIN_CONTROL = 0xa407, EXIF_TAG_CONTRAST = 0xa408, EXIF_TAG_SATURATION = 0xa409, EXIF_TAG_SHARPNESS = 0xa40a, EXIF printf ("Creating EXIF data...\n"); pEd = exif_data_new (); /_TAG_USER_COMMENT */ /* printf ("Creating EXIF entry...\n"); pE = exif_entry_new (); exif_content_add_entry (pEd->ifd[EXIF_IFD_0], pE); exif_entry_initialize (pE, EXIF_TAG_EXIF_VERSION); //exif_entry_unref (e); */ /* printf("Creating EXIF Entry with a value\n"); pE = exif_entry_new (); exif_content_add_entry (pEd->ifd[EXIF_IFD_0], pE); exif_entry_initialize (pE, EXIF_TAG_SHUTTER_SPEED_VALUE); exif_set_srational (pE->data, exif_data_get_byte_order (pEd), xR); //exif_entry_unref (pE); */ printf ("Adding a Make reference\n"); pE = exif_entry_new (); exif_content_add_entry (pEd->ifd[EXIF_IFD_0], pE); exif_entry_initialize (pE, EXIF_TAG_MAKE); pE->data="AVT"; exif_entry_unref (pE); printf ("Adding a Model reference\n"); pE = exif_entry_new (); exif_content_add_entry (pEd->ifd[EXIF_IFD_0], pE); exif_entry_initialize (pE, EXIF_TAG_MODEL); pE->data="510c"; exif_entry_unref (pE); printf ("Adding a Tag to reference # samples per pixel\n"); pE = exif_entry_new (); exif_content_add_entry (pEd->ifd[EXIF_IFD_0], pE); exif_entry_initialize (pE, EXIF_TAG_SAMPLES_PER_PIXEL); //by default is 3 exif_entry_unref (pE); printf ("Adding a White Balance Reference\n"); pE = exif_entry_new (); exif_content_add_entry (pEd->ifd[EXIF_IFD_0], pE); exif_entry_initialize (pE, EXIF_TAG_WHITE_BALANCE); exif_set_short(pE->data, exif_data_get_byte_order (pEd), i); //0=auto white balance, 1 = manual white balance exif_entry_unref (pE); //need to create logic according to the value of the sharpness printf ("Adding a Sharpness Reference\n"); pE = exif_entry_new (); exif_content_add_entry (pEd->ifd[EXIF_IFD_0], pE); exif_entry_initialize (pE, EXIF_TAG_SHARPNESS); exif_set_short(pE->data, exif_data_get_byte_order (pEd), 0); exif_entry_unref (pE); printf ("Adding a Brightness reference\n"); //try to get brightness //printf("Float Value: %i\n",xFeatures->feature[DC1394_FEATURE_BRIGHTNESS - DC1394_FEATURE_MIN].value); pE = exif_entry_new (); exif_content_add_entry (pEd->ifd[EXIF_IFD_0], pE); exif_entry_initialize (pE, EXIF_TAG_BRIGHTNESS_VALUE); exif_set_srational (pE->data, exif_data_get_byte_order (pEd), xR); //exif_data_dump (ed); //exif_data_dump (pEd); *pParentEd = pEd; printf("Done!\n"); //write the Exif data to a jpeg file /* pData = jpeg_data_new_from_file ("test.jpg"); //input data if (!pData) {//need to create logic according to the value of the sharpness printf ("Could not load '%s'!\n", "test.jpg"); return (1); } printf("Saving EXIF data to jpeg file\n"); jpeg_data_set_exif_data (pData, pEd); printf("Set the data\n"); jpeg_data_save_file(pData, "foobar2.jpg"); */ return 0; } --- NEW FILE: thumbnail.c --- /* * libexif example program to extract an EXIF thumbnail from an image * and save it into a new file. * * Placed into the public domain by Dan Fandrich */ #include <stdio.h> #include <libexif/exif-loader.h> int main(int argc, char **argv) { int rc = 1; ExifLoader *l; if (argc < 2) { printf("Usage: %s image.jpg\n", argv[0]); printf("Extracts a thumbnail from the given EXIF image.\n"); return rc; } /* Create an ExifLoader object to manage the EXIF loading process */ l = exif_loader_new(); if (l) { ExifData *ed; /* Load the EXIF data from the image file */ exif_loader_write_file(l, argv[1]); /* Get a pointer to the EXIF data */ ed = exif_loader_get_data(l); /* The loader is no longer needed--free it */ exif_loader_unref(l); l = NULL; if (ed) { /* Make sure the image had a thumbnail before trying to write it */ if (ed->data && ed->size) { FILE *thumb; char thumb_name[1024]; /* Try to create a unique name for the thumbnail file */ snprintf(thumb_name, sizeof(thumb_name), "%s_thumb.jpg", argv[1]); thumb = fopen(thumb_name, "wb"); if (thumb) { /* Write the thumbnail image to the file */ fwrite(ed->data, 1, ed->size, thumb); fclose(thumb); printf("Wrote thumbnail to %s\n", thumb_name); rc = 0; } else { printf("Could not create file %s\n", thumb_name); rc = 2; } } else { printf("No EXIF thumbnail in file %s\n", argv[1]); rc = 1; } /* Free the EXIF data */ exif_data_unref(ed); } } return rc; } |