diff options
Diffstat (limited to 'vapi/libexif.vapi')
-rw-r--r-- | vapi/libexif.vapi | 340 |
1 files changed, 340 insertions, 0 deletions
diff --git a/vapi/libexif.vapi b/vapi/libexif.vapi new file mode 100644 index 0000000..ff29a76 --- /dev/null +++ b/vapi/libexif.vapi @@ -0,0 +1,340 @@ +/* Copyright 2009-2014 Yorba Foundation + * + * This software is licensed under the GNU LGPL (version 2.1 or later). + * See the COPYING file in this distribution. + */ + +[CCode ( + cprefix = "Exif", + lower_case_cprefix="exif_" +)] +namespace Exif { + [CCode ( + cname="ExifByteOrder", + cheader_filename="libexif/exif-byte-order.h", + cprefix="EXIF_BYTE_ORDER_" + )] + public enum ByteOrder { + INTEL, + MOTOROLA; + + public unowned string get_name(); + } + + [Compact] + [CCode ( + cname="ExifContent", + cheader_filename="libexif/exif-content.h", + ref_function="exif_content_ref", + ref_function_void=true, + unref_function="exif_content_unref", + free_function="exif_content_free" + )] + public class Content { + [CCode (cname="exif_content_new")] + public Content(); + public void add_entry(Entry entry); + public void remove_entry(Entry entry); + public void dump(uint indent = 4); + public void foreach_entry(ForeachEntryFunc cb, void *user); + public unowned Entry get_entry(Tag tag); + public void fix(); + public Ifd get_ifd(); + + public Entry **entries; + public int count; + public Data parent; + } + + [CCode ( + cheader_filename="libexif/exif-utils.h", + cprefix="exif_", + lower_case_cprefix="exif_" + )] + namespace Convert { + public static uint16 get_short(uchar *buffer, ByteOrder byteOrder); + public static int16 get_sshort(uchar *buffer, ByteOrder byteOrder); + public static uint32 get_long(uchar *buffer, ByteOrder byteOrder); + public static int32 get_slong(uchar *buffer, ByteOrder byteOrder); + public static Rational get_rational(uchar *buffer, ByteOrder byteOrder); + public static void set_short(uchar *buffer, ByteOrder byteOrder, uint16 val); + public static void set_sshort(uchar *buffer, ByteOrder byteOrder, int16 val); + public static void set_long(uchar *buffer, ByteOrder byteOrder, uint32 val); + public static void set_slong(uchar *buffer, ByteOrder byteOrder, int32 val); + } + + [CCode (cheader_filename="libexif/exif-content.h", has_target=false)] + public delegate void ForeachEntryFunc(Entry e, void *user); + + [Compact] + [CCode ( + cname="ExifData", + cheader_filename="libexif/exif-data.h", + ref_function="exif_data_ref", + ref_function_void=true, + unref_function="exif_data_unref", + free_function="exif_data_free" + )] + public class Data { + [CCode (cname="exif_data_new")] + public Data(); + public static Data? new_from_file(string path); + public static Data? new_from_data(uint8 *data, size_t count); + public void dump(); + public void fix(); + public void foreach_content(ForeachContentFunc cb, void *user = null); + public ByteOrder get_byte_order(); + public DataType get_data_type(); + public void load_data(uchar *buffer, uint size); + public void set_option(DataOption option); + public void unset_option(DataOption option); + public void save_data(uchar **buffer, uint *size); + public void set_data_type(DataType data_type); + + // length is Exif.IFD_COUNT + public Content[] ifd; + public uchar *data; + public uint size; + } + + [CCode (cheader_filename="libexif/exif-data.h", has_target=false)] + public delegate void ForeachContentFunc(Content c, void *user); + + [CCode ( + cname="ExifDataOption", + cheader_filename="libexif/exif-data.h", + cprefix="EXIF_DATA_OPTION_" + )] + public enum DataOption { + IGNORE_UNKNOWN_TAGS, + FOLLOW_SPECIFICATION, + DONT_CHANGE_MAKER_NOTE; + + public unowned string get_name(); + public unowned string get_description(); + } + + [CCode ( + cname="ExifDataType", + cheader_filename="libexif/exif-data-type.h", + cprefix="EXIF_DATA_TYPE_" + )] + public enum DataType { + UNCOMPRESSED_CHUNKY, + UNCOMPRESSED_PLANAR, + UNCOMPRESSED_YCC, + COMPRESSED; + + public bool is_valid() { + switch (this) { + case UNCOMPRESSED_CHUNKY: + case UNCOMPRESSED_PLANAR: + case UNCOMPRESSED_YCC: + case COMPRESSED: + return true; + + default: + return false; + } + } + } + + [CCode (cname="EXIF_DATA_TYPE_COUNT")] + public const int DATA_TYPE_COUNT; + + [Compact] + [CCode ( + cname="ExifEntry", + cheader_filename="libexif/exif-entry.h", + ref_function="exif_entry_ref", + ref_function_void=true, + unref_function="exif_entry_unref" + )] + public class Entry { + [CCode (cname="exif_entry_new")] + public Entry(); + public void dump(uint indent = 4); + public void initialize(Tag tag); + public void fix(); + public unowned char* get_value(char *val, uint maxlen); + public string get_string() { + char[] buffer = new char[256]; + get_value(buffer, 256); + + GLib.StringBuilder builder = new GLib.StringBuilder(); + foreach (char c in buffer) + builder.append_c(c); + + return builder.str; + } + + public Tag tag; + public Format format; + public ulong components; + public uchar *data; + public uint size; + public Content *parent; + } + + [CCode ( + cname="ExifFormat", + cheader_filename="libexif/exif-format.h", + cprefix="EXIF_FORMAT_" + )] + public enum Format { + BYTE, + ASCII, + SHORT, + LONG, + RATIONAL, + SBYTE, + UNDEFINED, + SSHORT, + SLONG, + SRATIONAL, + FLOAT, + DOUBLE; + + public unowned string get_name(); + public unowned uchar get_size(); + } + + [CCode ( + cname="ExifIfd", + cheader_filename="libexif/exif-ifd.h", + cprefix="EXIF_IFD_" + )] + public enum Ifd { + [CCode (cname="EXIF_IFD_0")] + ZERO, + [CCode (cname="EXIF_IFD_1")] + ONE, + EXIF, + GPS, + INTEROPERABILITY; + + public unowned string get_name(); + } + + [CCode (cname="EXIF_IFD_COUNT")] + public const int IFD_COUNT; + + [Compact] + [CCode ( + cname="ExifLoader", + cheader_filename="libexif/exif-loader.h", + ref_function="exif_loader_ref", + ref_function_void=true, + unref_function="exif_loader_unref", + free_function="exif_loader_free" + )] + public class Loader { + [CCode (cname="exif_loader_new")] + public Loader(); + public void write_file(string fname); + public void reset(); + public Data get_data(); + } + + // TODO: Flesh out Log functionality + [Compact] + [CCode ( + cname="ExifLog", + cheader_filename="libexif/exif-loader.h", + ref_function="exif_log_ref", + ref_function_void=true, + unref_function="exif_log_unref", + free_function="exif_log_free" + )] + public class Log { + [CCode (cname="exif_log_new")] + public Log(); + } + + [CCode ( + cname="ExifLogCode", + cheader_filename="libexif/exif-log.h", + cprefix="EXIF_LOG_CODE_" + )] + public enum LogCode { + NONE, + DEBUG, + NO_MEMORY, + CORRUPT_DATA; + + public unowned string get_title(); + public unowned string get_message(); + } + + [Compact] + [CCode ( + cname="ExifMem", + cheader_filename="libexif/exif-mem.h", + ref_function="exif_mem_ref", + ref_function_void=true, + unref_function="exif_mem_unref" + )] + public class Mem { + public void *alloc(uint32 size); + public void *realloc(void *ptr, uint32 size); + public void free(void *ptr); + public static Mem new_default(); + } + + [SimpleType] + [CCode ( + cname="ExifRational", + cheader_filename="libexif/exif-utils.h" + )] + public struct Rational { + uint32 numerator; + uint32 denominator; + } + + [CCode ( + cname="ExifSupportLevel", + cheader_filename="libexif/exif-tag.h", + cprefix="EXIF_SUPPORT_LEVEL_" + )] + public enum SupportLevel { + UNKNOWN, + NOT_RECORDED, + MANDATORY, + OPTIONAL + } + + [CCode ( + cname="ExifTag", + cheader_filename="libexif/exif-tag.h", + cprefix="EXIF_TAG_" + )] + public enum Tag { + PIXEL_X_DIMENSION, + PIXEL_Y_DIMENSION, + BITS_PER_SAMPLE, + DATE_TIME_ORIGINAL, + ORIENTATION, + RELATED_IMAGE_WIDTH, + RELATED_IMAGE_LENGTH, + EXPOSURE_TIME, + FNUMBER, + ISO_SPEED_RATINGS, + MAKE, + MODEL, + FLASH, + FOCAL_LENGTH, + GPS_LATITUDE, + GPS_LATITUDE_REF, + GPS_LONGITUDE, + GPS_LONGITUDE_REF, + ARTIST, + COPYRIGHT, + SOFTWARE, + IMAGE_DESCRIPTION; + + public unowned string get_name_in_ifd(Ifd ifd); + public unowned string get_title_in_ifd(Ifd ifd); + public unowned string get_description_in_ifd(Ifd ifd); + public SupportLevel get_support_level_in_ifd(Ifd ifd, DataType data_type); + } +} |