mirror of
https://github.com/lifegpc/pixiv_downloader.git
synced 2026-07-08 01:32:41 +08:00
Update exif module
This commit is contained in:
23
exif/exif.h
23
exif/exif.h
@@ -21,6 +21,8 @@ typedef struct ExifDataRef ExifDataRef;
|
||||
typedef struct ExifDataItor ExifDataItor;
|
||||
/// <div rustbindgen opaque></div>
|
||||
typedef struct ExifDatumRef ExifDatumRef;
|
||||
/// <div rustbindgen opaque></div>
|
||||
typedef struct ExifValueRef ExifValueRef;
|
||||
#if defined _WIN32 && defined WIN32_DLL
|
||||
#if BUILD_DLL
|
||||
#define EXIF_API __declspec(dllexport)
|
||||
@@ -51,15 +53,17 @@ EXIF_API int exif_get_key_default_type_id(ExifKey* key);
|
||||
EXIF_API void exif_free(void* v);
|
||||
EXIF_API void exif_free_key(ExifKey* key);
|
||||
EXIF_API ExifValue* exif_create_value(int type_id);
|
||||
EXIF_API int exif_get_value_type_id(ExifValue* value);
|
||||
EXIF_API long exif_get_value_count(ExifValue* value);
|
||||
EXIF_API long exif_get_value_size(ExifValue* value);
|
||||
EXIF_API long exif_get_value_size_data_area(ExifValue *value);
|
||||
EXIF_API int exif_value_read(ExifValue* value, const uint8_t* bytes, long len, int byte_order);
|
||||
EXIF_API int exif_get_value_ok(ExifValue* value);
|
||||
EXIF_API char* exif_value_to_string(ExifValue* value, size_t* len);
|
||||
EXIF_API char* exif_value_to_string2(ExifValue* value, size_t* len, long i);
|
||||
EXIF_API int64_t exif_value_to_int64(ExifValue* value, long i);
|
||||
EXIF_API ExifValueRef* exif_value_get_ref(ExifValue* value);
|
||||
EXIF_API int exif_get_value_type_id(ExifValueRef* value);
|
||||
EXIF_API long exif_get_value_count(ExifValueRef* value);
|
||||
EXIF_API long exif_get_value_size(ExifValueRef* value);
|
||||
EXIF_API long exif_get_value_size_data_area(ExifValueRef *value);
|
||||
EXIF_API int exif_value_read(ExifValueRef* value, const uint8_t* bytes, long len, int byte_order);
|
||||
EXIF_API int exif_get_value_ok(ExifValueRef* value);
|
||||
EXIF_API char* exif_value_to_string(ExifValueRef* value, size_t* len);
|
||||
EXIF_API char* exif_value_to_string2(ExifValueRef* value, size_t* len, long i);
|
||||
EXIF_API int64_t exif_value_to_int64(ExifValueRef* value, long i);
|
||||
EXIF_API ExifValue* exif_value_ref_clone(ExifValueRef* value);
|
||||
EXIF_API ExifData* exif_data_new();
|
||||
EXIF_API int exif_data_ref_add(ExifDataRef* d, ExifKey* key, ExifValue* value);
|
||||
EXIF_API int exif_data_ref_clear(ExifDataRef* d);
|
||||
@@ -72,6 +76,7 @@ EXIF_API void exif_data_ref_sort_by_tag(ExifDataRef* d);
|
||||
EXIF_API ExifDataItor* exif_data_ref_iter(ExifDataRef* d);
|
||||
EXIF_API ExifDatumRef* exif_data_itor_next(ExifDataItor* itor);
|
||||
EXIF_API char* exif_datum_key(ExifDatumRef* d);
|
||||
EXIF_API ExifValueRef* exif_datum_value(ExifDatumRef *d);
|
||||
EXIF_API void exif_free_value(ExifValue* value);
|
||||
EXIF_API void exif_free_data(ExifData* d);
|
||||
EXIF_API void exif_free_data_itor(ExifDataItor* itor);
|
||||
|
||||
@@ -196,38 +196,44 @@ end:
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
int exif_get_value_type_id(ExifValue* value) {
|
||||
if (!value) return -1;
|
||||
ExifValueRef* exif_value_get_ref(ExifValue* value) {
|
||||
if (!value) return nullptr;
|
||||
value->ref.value = value->value.get();
|
||||
return &value->ref;
|
||||
}
|
||||
|
||||
int exif_get_value_type_id(ExifValueRef* value) {
|
||||
if (!value || !value->value) return -1;
|
||||
return value->value->typeId();
|
||||
}
|
||||
|
||||
long exif_get_value_count(ExifValue* value) {
|
||||
if (!value) return -1;
|
||||
long exif_get_value_count(ExifValueRef* value) {
|
||||
if (!value || !value->value) return -1;
|
||||
return value->value->count();
|
||||
}
|
||||
|
||||
long exif_get_value_size(ExifValue* value) {
|
||||
if (!value) return -1;
|
||||
long exif_get_value_size(ExifValueRef* value) {
|
||||
if (!value || !value->value) return -1;
|
||||
return value->value->size();
|
||||
}
|
||||
|
||||
long exif_get_value_size_data_area(ExifValue* value) {
|
||||
if (!value) return -1;
|
||||
long exif_get_value_size_data_area(ExifValueRef* value) {
|
||||
if (!value || !value->value) return -1;
|
||||
return value->value->sizeDataArea();
|
||||
}
|
||||
|
||||
int exif_value_read(ExifValue* value, const uint8_t* bytes, long len, int byte_order) {
|
||||
if (!value || !bytes) return -1;
|
||||
int exif_value_read(ExifValueRef* value, const uint8_t* bytes, long len, int byte_order) {
|
||||
if (!value || !bytes || !value->value) return -1;
|
||||
return value->value->read(bytes, len, static_cast<Exiv2::ByteOrder>(byte_order));
|
||||
}
|
||||
|
||||
int exif_get_value_ok(ExifValue* value) {
|
||||
if (!value) return 0;
|
||||
int exif_get_value_ok(ExifValueRef* value) {
|
||||
if (!value || !value->value) return 0;
|
||||
return value->value->ok() ? 1 : 0;
|
||||
}
|
||||
|
||||
char* exif_value_to_string(ExifValue* value, size_t* len) {
|
||||
if (!value || !len) return nullptr;
|
||||
char* exif_value_to_string(ExifValueRef* value, size_t* len) {
|
||||
if (!value || !len || !value->value) return nullptr;
|
||||
auto s = value->value->toString();
|
||||
*len = s.size();
|
||||
char* tmp = nullptr;
|
||||
@@ -235,8 +241,8 @@ char* exif_value_to_string(ExifValue* value, size_t* len) {
|
||||
return tmp;
|
||||
}
|
||||
|
||||
char* exif_value_to_string2(ExifValue* value, size_t* len, long i) {
|
||||
if (!value || !len) return nullptr;
|
||||
char* exif_value_to_string2(ExifValueRef* value, size_t* len, long i) {
|
||||
if (!value || !len || !value->value) return nullptr;
|
||||
auto s = value->value->toString(i);
|
||||
*len = s.size();
|
||||
char* tmp = nullptr;
|
||||
@@ -244,11 +250,26 @@ char* exif_value_to_string2(ExifValue* value, size_t* len, long i) {
|
||||
return tmp;
|
||||
}
|
||||
|
||||
int64_t exif_value_to_int64(ExifValue* value, long i) {
|
||||
if (!value) return -1;
|
||||
int64_t exif_value_to_int64(ExifValueRef* value, long i) {
|
||||
if (!value || !value->value) return -1;
|
||||
return value->value->toInt64(i);
|
||||
}
|
||||
|
||||
ExifValue* exif_value_ref_clone(ExifValueRef* value) {
|
||||
if (!value || !value->value) return nullptr;
|
||||
ExifValue* v = new ExifValue;
|
||||
try {
|
||||
v->value = value->value->clone();
|
||||
} catch (std::exception& e) {
|
||||
printf("%s\n", e.what());
|
||||
goto end;
|
||||
}
|
||||
return v;
|
||||
end:
|
||||
if (v) delete v;
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
ExifData* exif_data_new() {
|
||||
return new ExifData;
|
||||
}
|
||||
@@ -299,6 +320,7 @@ long exif_data_ref_get_count(ExifDataRef* d) {
|
||||
|
||||
void exif_free_value(ExifValue* value) {
|
||||
if (!value) return;
|
||||
value->ref.value = nullptr;
|
||||
delete value;
|
||||
}
|
||||
|
||||
@@ -342,8 +364,19 @@ ExifDatumRef* exif_data_itor_next(ExifDataItor* itor) {
|
||||
}
|
||||
|
||||
char* exif_datum_key(ExifDatumRef* d) {
|
||||
if (!d->data) return nullptr;
|
||||
if (!d || !d->data) return nullptr;
|
||||
char* re = nullptr;
|
||||
if (!string2char(d->data->key(), re)) return nullptr;
|
||||
return re;
|
||||
}
|
||||
|
||||
ExifValueRef* exif_datum_value(ExifDatumRef *d) {
|
||||
if (!d || !d->data) return nullptr;
|
||||
try {
|
||||
d->ref.value = (Exiv2::Value*)&d->data->value();
|
||||
} catch (std::exception& e) {
|
||||
printf("%s\n", e.what());
|
||||
return nullptr;
|
||||
}
|
||||
return &d->ref;
|
||||
}
|
||||
|
||||
@@ -11,20 +11,25 @@ typedef struct ExifImage {
|
||||
typedef struct ExifKey {
|
||||
Exiv2::ExifKey* key = nullptr;
|
||||
} ExifKey;
|
||||
typedef struct ExifValueRef {
|
||||
Exiv2::Value* value;
|
||||
} ExifValueRef;
|
||||
typedef struct ExifValue {
|
||||
Exiv2::Value::UniquePtr value;
|
||||
ExifValueRef ref;
|
||||
} ExifValue;
|
||||
typedef struct ExifData {
|
||||
Exiv2::ExifData data;
|
||||
ExifDataRef ref;
|
||||
} ExifData;
|
||||
typedef struct ExifDatum {
|
||||
Exiv2::Exifdatum data;
|
||||
ExifDataRef ref;
|
||||
} ExifDatum;
|
||||
typedef struct ExifDatumRef {
|
||||
Exiv2::Exifdatum* data;
|
||||
ExifValueRef ref;
|
||||
} ExifDatumRef;
|
||||
typedef struct ExifDatum {
|
||||
Exiv2::Exifdatum data;
|
||||
ExifDatumRef ref;
|
||||
} ExifDatum;
|
||||
typedef struct ExifDataItor {
|
||||
ExifDataRef ref;
|
||||
ExifDatumRef ref2;
|
||||
|
||||
Reference in New Issue
Block a user