diff options
author | Lorry Tar Creator <lorry-tar-importer@lorry> | 2012-07-12 20:34:34 +0000 |
---|---|---|
committer | Lorry Tar Creator <lorry-tar-importer@lorry> | 2012-07-12 20:34:34 +0000 |
commit | 0c6a5fa0d9719a40748d8726b4543f02f70518c1 (patch) | |
tree | 241f9ae619069ac5861d7621ade296102ab5de5d /contrib/examples/cam_features.c | |
download | libexif-tarball-0c6a5fa0d9719a40748d8726b4543f02f70518c1.tar.gz |
libexif-0.6.21HEADlibexif-0.6.21master
Diffstat (limited to 'contrib/examples/cam_features.c')
-rw-r--r-- | contrib/examples/cam_features.c | 175 |
1 files changed, 175 insertions, 0 deletions
diff --git a/contrib/examples/cam_features.c b/contrib/examples/cam_features.c new file mode 100644 index 0000000..6a2dc18 --- /dev/null +++ b/contrib/examples/cam_features.c @@ -0,0 +1,175 @@ +/*************************************************************************** + * cam_features.c + * + * Wed Jul 27 11:25:09 2005 + * Copyright 2005 User: Naysawn Naderi + * Email: ndn at xiphos dot ca + * + * Uses libdc1394 and libraw1394 + ****************************************************************************/ + +#include <stdio.h> +#include <stdlib.h> +#include <time.h> +#include <sys/times.h> +#include <errno.h> + +#include <libraw1394/raw1394.h> +#include <libdc1394/dc1394_control.h> +#include <libdc1394/dc1394_register.h> + +//EXIF includes +#include <libexif/exif-data.h> +#include <libexif/exif-ifd.h> +#include <libexif/exif-loader.h> + +// Part of the exif command-line source package +#include "libjpeg/jpeg-data.h" + + +#define FILENAME "test.jpg" + + +static 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 + 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(stdout, "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 (FILENAME); //input data + if (!pData) { + printf ("Could not load '%s'!\n", FILENAME); + 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; + 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};; + + 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_TAG_USER_COMMENT + */ + + 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"); + + return 0; +} |