1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import libexif
import tables
var buf {.threadvar.}: cstring
# MUST be called once per thread if any of the helper procs are used
proc init_exif*() =
buf = cast[cstring](alloc(2001))
proc deinit_exif*() =
dealloc(buf)
proc collect_exif_data*(ed: ptr ExifData): Table[string, string] {.gcsafe.} =
proc process_entries(entry: ptr ExifEntry , callback_data: pointer) {.cdecl.} =
let name = exif_tag_get_name(entry.tag)
let val = exif_entry_get_value(entry, buf, 2000)
let result_table = cast[ptr Table[string, string]](callback_data)
result_table[][$name] = $val
proc process_contents(content: ptr ExifContent, callback_data: pointer) {.cdecl.} =
exif_content_foreach_entry(content, process_entries, callback_data)
exif_data_foreach_content(ed, process_contents, addr result)
exif_data_unref(ed)