| /* GStreamer |
| * Copyright (C) 2010 Thiago Santos <thiago.sousa.santos@collabora.co.uk> |
| * |
| * This library is free software; you can redistribute it and/or |
| * modify it under the terms of the GNU Library General Public |
| * License as published by the Free Software Foundation; either |
| * version 2 of the License, or (at your option) any later version. |
| * |
| * This library is distributed in the hope that it will be useful, |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| * Library General Public License for more details. |
| * |
| * You should have received a copy of the GNU Library General Public |
| * License along with this library; if not, write to the |
| * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, |
| * Boston, MA 02110-1301, USA. |
| */ |
| |
| #include "gsttageditingprivate.h" |
| |
| #include <string.h> |
| |
| gint |
| __exif_tag_image_orientation_to_exif_value (const gchar * str) |
| { |
| if (str == NULL) |
| goto end; |
| |
| if (strcmp (str, "rotate-0") == 0) |
| return 1; |
| else if (strcmp (str, "flip-rotate-0") == 0) |
| return 2; |
| else if (strcmp (str, "rotate-180") == 0) |
| return 3; |
| else if (strcmp (str, "flip-rotate-180") == 0) |
| return 4; |
| else if (strcmp (str, "flip-rotate-270") == 0) |
| return 5; |
| else if (strcmp (str, "rotate-90") == 0) |
| return 6; |
| else if (strcmp (str, "flip-rotate-90") == 0) |
| return 7; |
| else if (strcmp (str, "rotate-270") == 0) |
| return 8; |
| |
| end: |
| GST_WARNING ("Invalid image orientation tag: %s", str); |
| return -1; |
| } |
| |
| const gchar * |
| __exif_tag_image_orientation_from_exif_value (gint value) |
| { |
| switch (value) { |
| case 1: |
| return "rotate-0"; |
| case 2: |
| return "flip-rotate-0"; |
| case 3: |
| return "rotate-180"; |
| case 4: |
| return "flip-rotate-180"; |
| case 5: |
| return "flip-rotate-270"; |
| case 6: |
| return "rotate-90"; |
| case 7: |
| return "flip-rotate-90"; |
| case 8: |
| return "rotate-270"; |
| default: |
| GST_WARNING ("Invalid tiff orientation tag value: %d", value); |
| return NULL; |
| } |
| } |
| |
| gint |
| __exif_tag_capturing_exposure_program_to_exif_value (const gchar * str) |
| { |
| if (str == NULL) |
| goto end; |
| |
| if (strcmp (str, "undefined") == 0) |
| return 0; |
| else if (strcmp (str, "manual") == 0) |
| return 1; |
| else if (strcmp (str, "normal") == 0) |
| return 2; |
| else if (strcmp (str, "aperture-priority") == 0) |
| return 3; |
| else if (strcmp (str, "shutter-priority") == 0) |
| return 4; |
| else if (strcmp (str, "creative") == 0) |
| return 5; |
| else if (strcmp (str, "action") == 0) |
| return 6; |
| else if (strcmp (str, "portrait") == 0) |
| return 7; |
| else if (strcmp (str, "landscape") == 0) |
| return 8; |
| |
| end: |
| GST_WARNING ("Invalid capturing exposure program tag: %s", str); |
| return -1; |
| } |
| |
| const gchar * |
| __exif_tag_capturing_exposure_program_from_exif_value (gint value) |
| { |
| switch (value) { |
| case 0: |
| return "undefined"; |
| case 1: |
| return "manual"; |
| case 2: |
| return "normal"; |
| case 3: |
| return "aperture-priority"; |
| case 4: |
| return "shutter-priority"; |
| case 5: |
| return "creative"; |
| case 6: |
| return "action"; |
| case 7: |
| return "portrait"; |
| case 8: |
| return "landscape"; |
| default: |
| GST_WARNING ("Invalid exif exposure program: %d", value); |
| return NULL; |
| } |
| } |
| |
| gint |
| __exif_tag_capturing_exposure_mode_to_exif_value (const gchar * str) |
| { |
| if (str == NULL) |
| goto end; |
| |
| if (strcmp (str, "auto-exposure") == 0) |
| return 0; |
| else if (strcmp (str, "manual-exposure") == 0) |
| return 1; |
| else if (strcmp (str, "auto-bracket") == 0) |
| return 2; |
| |
| end: |
| GST_WARNING ("Invalid capturing exposure mode tag: %s", str); |
| return -1; |
| } |
| |
| const gchar * |
| __exif_tag_capturing_exposure_mode_from_exif_value (gint value) |
| { |
| switch (value) { |
| case 0: |
| return "auto-exposure"; |
| case 1: |
| return "manual-exposure"; |
| case 2: |
| return "auto-bracket"; |
| default: |
| GST_WARNING ("Invalid exif exposure mode: %d", value); |
| return NULL; |
| } |
| } |
| |
| gint |
| __exif_tag_capturing_scene_capture_type_to_exif_value (const gchar * str) |
| { |
| if (str == NULL) |
| goto end; |
| |
| if (strcmp (str, "standard") == 0) |
| return 0; |
| else if (strcmp (str, "landscape") == 0) |
| return 1; |
| else if (strcmp (str, "portrait") == 0) |
| return 2; |
| else if (strcmp (str, "night-scene") == 0) |
| return 3; |
| |
| end: |
| GST_WARNING ("Invalid capturing scene capture type: %s", str); |
| return -1; |
| } |
| |
| const gchar * |
| __exif_tag_capturing_scene_capture_type_from_exif_value (gint value) |
| { |
| switch (value) { |
| case 0: |
| return "standard"; |
| case 1: |
| return "landscape"; |
| case 2: |
| return "portrait"; |
| case 3: |
| return "night-scene"; |
| default: |
| GST_WARNING ("Invalid exif scene capture type: %d", value); |
| return NULL; |
| } |
| } |
| |
| gint |
| __exif_tag_capturing_gain_adjustment_to_exif_value (const gchar * str) |
| { |
| if (str == NULL) |
| goto end; |
| |
| if (strcmp (str, "none") == 0) |
| return 0; |
| else if (strcmp (str, "low-gain-up") == 0) |
| return 1; |
| else if (strcmp (str, "high-gain-up") == 0) |
| return 2; |
| else if (strcmp (str, "low-gain-down") == 0) |
| return 3; |
| else if (strcmp (str, "high-gain-down") == 0) |
| return 4; |
| |
| end: |
| GST_WARNING ("Invalid capturing gain adjustment type: %s", str); |
| return -1; |
| } |
| |
| const gchar * |
| __exif_tag_capturing_gain_adjustment_from_exif_value (gint value) |
| { |
| switch (value) { |
| case 0: |
| return "none"; |
| case 1: |
| return "low-gain-up"; |
| case 2: |
| return "high-gain-up"; |
| case 3: |
| return "low-gain-down"; |
| case 4: |
| return "high-gain-down"; |
| default: |
| GST_WARNING ("Invalid exif gain control type: %d", value); |
| return NULL; |
| } |
| } |
| |
| gint |
| __exif_tag_capturing_white_balance_to_exif_value (const gchar * str) |
| { |
| if (str == NULL) |
| goto end; |
| |
| if (strcmp (str, "auto") == 0) |
| return 0; |
| else /* everything else is just manual */ |
| return 1; |
| |
| end: |
| GST_WARNING ("Invalid white balance: %s", str); |
| return -1; |
| } |
| |
| const gchar * |
| __exif_tag_capturing_white_balance_from_exif_value (gint value) |
| { |
| switch (value) { |
| case 0: |
| return "auto"; |
| case 1: |
| return "manual"; |
| default: |
| GST_WARNING ("Invalid white balance type: %d", value); |
| return NULL; |
| } |
| } |
| |
| static gint |
| __exif_tag_capturing_contrast_sharpness_to_exif_value (const gchar * str, |
| const gchar * tag_name) |
| { |
| if (str == NULL) |
| goto end; |
| |
| if (strcmp (str, "normal") == 0) |
| return 0; |
| else if (strcmp (str, "soft") == 0) |
| return 1; |
| else if (strcmp (str, "hard") == 0) |
| return 2; |
| |
| end: |
| GST_WARNING ("Invalid %s type: %s", tag_name, str); |
| return -1; |
| } |
| |
| static const gchar * |
| __exif_tag_capturing_contrast_sharpness_from_exif_value (gint value, |
| const gchar * tag_name) |
| { |
| switch (value) { |
| case 0: |
| return "normal"; |
| case 1: |
| return "soft"; |
| case 2: |
| return "hard"; |
| default: |
| GST_WARNING ("Invalid %s type: %d", tag_name, value); |
| return NULL; |
| } |
| } |
| |
| gint |
| __exif_tag_capturing_contrast_to_exif_value (const gchar * str) |
| { |
| return __exif_tag_capturing_contrast_sharpness_to_exif_value (str, |
| "contrast"); |
| } |
| |
| const gchar * |
| __exif_tag_capturing_contrast_from_exif_value (gint value) |
| { |
| return __exif_tag_capturing_contrast_sharpness_from_exif_value (value, |
| "contrast"); |
| } |
| |
| gint |
| __exif_tag_capturing_saturation_to_exif_value (const gchar * str) |
| { |
| if (str == NULL) |
| goto end; |
| |
| if (strcmp (str, "normal") == 0) |
| return 0; |
| else if (strcmp (str, "low-saturation") == 0) |
| return 1; |
| else if (strcmp (str, "high-saturation") == 0) |
| return 2; |
| |
| end: |
| GST_WARNING ("Invalid saturation type: %s", str); |
| return -1; |
| } |
| |
| const gchar * |
| __exif_tag_capturing_saturation_from_exif_value (gint value) |
| { |
| switch (value) { |
| case 0: |
| return "normal"; |
| case 1: |
| return "low-saturation"; |
| case 2: |
| return "high-saturation"; |
| default: |
| GST_WARNING ("Invalid saturation type: %d", value); |
| return NULL; |
| } |
| } |
| |
| gint |
| __exif_tag_capturing_sharpness_to_exif_value (const gchar * str) |
| { |
| return __exif_tag_capturing_contrast_sharpness_to_exif_value (str, |
| "sharpness"); |
| } |
| |
| const gchar * |
| __exif_tag_capturing_sharpness_from_exif_value (gint value) |
| { |
| return __exif_tag_capturing_contrast_sharpness_from_exif_value (value, |
| "sharpness"); |
| } |
| |
| gint |
| __exif_tag_capturing_metering_mode_to_exif_value (const gchar * str) |
| { |
| if (str == NULL) |
| goto end; |
| |
| if (strcmp (str, "unknown") == 0) |
| return 0; |
| else if (strcmp (str, "average") == 0) |
| return 1; |
| else if (strcmp (str, "center-weighted-average") == 0) |
| return 2; |
| else if (strcmp (str, "spot") == 0) |
| return 3; |
| else if (strcmp (str, "multi-spot") == 0) |
| return 4; |
| else if (strcmp (str, "pattern") == 0) |
| return 5; |
| else if (strcmp (str, "partial") == 0) |
| return 6; |
| else if (strcmp (str, "other") == 0) |
| return 255; |
| |
| end: |
| GST_WARNING ("Invalid metering mode type: %s", str); |
| return -1; |
| } |
| |
| const gchar * |
| __exif_tag_capturing_metering_mode_from_exif_value (gint value) |
| { |
| switch (value) { |
| case 0: |
| return "unknown"; |
| case 1: |
| return "average"; |
| case 2: |
| return "center-weighted-average"; |
| case 3: |
| return "spot"; |
| case 4: |
| return "multi-spot"; |
| case 5: |
| return "pattern"; |
| case 6: |
| return "partial"; |
| case 255: |
| return "other"; |
| default: |
| GST_WARNING ("Invalid metering mode type: %d", value); |
| return NULL; |
| } |
| } |
| |
| gint |
| __exif_tag_capturing_source_to_exif_value (const gchar * str) |
| { |
| if (str == NULL) |
| goto end; |
| |
| if (strcmp (str, "dsc") == 0) |
| return 3; |
| else if (strcmp (str, "other") == 0) |
| return 0; |
| else if (strcmp (str, "transparent-scanner") == 0) |
| return 1; |
| else if (strcmp (str, "reflex-scanner") == 0) |
| return 2; |
| |
| end: |
| GST_WARNING ("Invalid capturing source type: %s", str); |
| return -1; |
| } |
| |
| const gchar * |
| __exif_tag_capturing_source_from_exif_value (gint value) |
| { |
| switch (value) { |
| case 0: |
| return "other"; |
| case 1: |
| return "transparent-scanner"; |
| case 2: |
| return "reflex-scanner"; |
| case 3: |
| return "dsc"; |
| default: |
| GST_WARNING ("Invalid capturing source type: %d", value); |
| return NULL; |
| } |
| } |