function OnInit(initData) { initData.name = 'ExifTool'; initData.desc = 'Provide columns for metadata read via ExifTool'; initData.version = '2024-01-23'; initData.url = 'https://resource.dopus.com/t/exiftool-custom-columns/38975'; initData.default_enable = true; initData.min_version = '13.0'; initData.config_desc = DOpus.Create().Map(); initData.config_desc('logLevel') = 'Set level of logging'; initData.config.logLevel = DOpus.Create.Vector(1, 'none', 'standard', 'max'); initData.config_desc('exeExifTool') = 'Enter full path to exiftool.exe'; initData.config.exeExifTool = '/programfiles\\exiftool\\exiftool.exe'; initData.config_desc('cacheFolder') = 'Enter full path to cache folder'; initData.config.cacheFolder = '/profile\\ExifToolCache'; initData.config_desc('patternCheckMode') = 'Set which files to process'; initData.config.patternCheckMode = DOpus.Create.Vector(0, 'all', 'matching', 'non-matching'); initData.config_desc('wildPattern') = 'Set wildcard pattern to match against the filename'; initData.config.wildPattern = '*.*'; initData.config_desc('wildFlags') = 'Set pattern matching mode'; initData.config.wildFlags = DOpus.Create.Vector(0, 'standard pattern matching', 'regular expression', 'filename mode', 'case-sensitive', 'DOS only'); initData.config_desc('printConversion') = 'Select human or machine readable format'; initData.config.printConversion = DOpus.Create.Vector(0, 'human', 'machine'); } function OnAddColumns(AddColData) { for (var e = new Enumerator(exifColumns); !e.atEnd(); e.moveNext()) { var columnItem = e.item(); var col = AddColData.AddColumn(); col.multicol = true; col.label = columnItem('label'); col.header = columnItem('header'); col.justify = columnItem('justify'); col.name = columnItem('name'); col.type = columnItem('type'); col.method = 'OnColumn'; } var exeExifTool = fsu.Resolve(Script.config.exeExifTool); var cacheFolder = fsu.Resolve(Script.config.cacheFolder); var cmd = DOpus.Create().Command(); cmd.RunCommand('CreateFolder NAME="' + cacheFolder + '"'); if (fsu.Exists(exeExifTool)) { Log(2, 'exeExifTool: ' + exeExifTool); } else { Log(1, 'exeExifTool: ' + exeExifTool); Log(1, ' File not found!'); } if (fsu.Exists(cacheFolder)) { Log(2, 'cacheFolder: ' + cacheFolder); } else { Log(1, 'cacheFolder: ' + cacheFolder); Log(1, ' Folder not found!'); } Log(2, 'patternCheckMode: ' + Script.config.patternCheckMode); Log(2, 'wildPattern: ' + Script.config.wildPattern); Log(2, 'wildFlags: ' + Script.config.wildFlags); Log(2, 'logLevel: ' + Script.config.logLevel); Log(2, 'printConversion: ' + Script.config.printConversion); Log(2, 'exifColumns.count: ' + exifColumns.count); } function OnAddCommands(addCmdData) { var cmd = addCmdData.AddCommand(); cmd.name = 'ExifToolProbeFiles'; cmd.method = 'OnExifToolProbeFiles'; cmd.desc = 'Generate text files with ExifTool metadata for selected files'; cmd.label = 'Probe Files'; cmd.hide = false; cmd.icon = 'script'; var cmd = addCmdData.AddCommand(); cmd.name = 'ExifToolOpenCacheInDual'; cmd.method = 'OnExifToolOpenCacheInDual'; cmd.desc = 'Open the ExifTool cache folder for the source in the destination'; cmd.label = 'Open Cache In Dual'; cmd.hide = false; cmd.icon = 'script'; var cmd = addCmdData.AddCommand(); cmd.name = 'ExifToolColumnsToCommands'; cmd.method = 'OnExifToolColumnsToCommands'; cmd.desc = 'Edit clipboard content: Convert column definitions to button commands'; cmd.label = 'Columns To Commands'; cmd.hide = false; cmd.icon = 'script'; var cmd = addCmdData.AddCommand(); cmd.name = 'ExifToolDeleteCache'; cmd.method = 'OnExifToolDeleteCache'; cmd.desc = 'Delete ExifTool cache for the source'; cmd.label = 'Delete Cache'; cmd.hide = false; cmd.icon = 'script'; } function OnColumn(scriptColData) { var item = scriptColData.item; var tab = scriptColData.tab; if (item.is_dir) return; var exeExifTool = fsu.Resolve(Script.config.exeExifTool); var cacheFolder = fsu.Resolve(Script.config.cacheFolder); if (!fsu.Exists(exeExifTool)) { Log(1, 'skipped (exiftool.exe not found): ' + exeExifTool); return; } if (!fsu.Exists(cacheFolder)) { Log(1, 'skipped (cacheFolder not found): ' + cacheFolder); return; } if (!CheckPattern(item.name)) { Log(2, 'skipped (pattern mismatch): ' + item); return; } if ((String(item).substring(1, 15)) == ':\\$RECYCLE.BIN') { Log(2, 'skipped (inside recycle bin): ' + item); return; } if ((String(item.path).indexOf(String(cacheFolder))) == 0) { Log(2, 'skipped (inside cachefolder): ' + item); return; } var itemPath = fsu.GetItem(item.path); if (itemPath.InGroup('Archives')) { Log(2, 'skipped (inside archive): ' + item); return; } if (itemPath.fileattr != undefined) { if (itemPath.fileattr.hidden) { Log(2, 'skipped (hidden file/folder): ' + item); return; } if (itemPath.fileattr.system) { Log(2, 'skipped (system file/folder): ' + item); return; } } var cacheFile = fsu.GetItem(cacheFolder + '\\' + String(item.realpath).replace(':', '') + '.txt'); if (Script.config.logLevel) var startTime = DOpus.Create().Date(); if (!fsu.Exists(cacheFile) || cacheFile.modify.Compare(item.modify) < 0) { var srcToEnum = tab.path; if (typeof srcToEnum == 'object') { var filesToEnum = tab.files; } else { srcToEnum = item.path; var filesToEnum = fsu.ReadDir(item.path).Next(-1); } Log(1, 'Enumerating ' + filesToEnum.count + ' items in "' + srcToEnum + '"...', startTime); var argFile = fsu.GetTempFile(); var filesForExifTool = 0; for (var e = new Enumerator(filesToEnum); !e.atEnd(); e.moveNext()) { var enumFile = e.item(); if (enumFile.is_dir) continue; if (!CheckPattern(enumFile.name)) continue; var cacheTabItem = fsu.GetItem(cacheFolder + '\\' + String(enumFile.realpath).replace(':', '') + '.txt'); if (fsu.Exists(cacheTabItem) && cacheTabItem.modify.Compare(enumFile.modify) > 0) continue; argFile.Write('' + (Script.config.printConversion ? '--printConv\n' : '') + '-short\n' + '-duplicates\n' + '-unknown\n' + '-groupNames\n' + '-tab\n' + '-charset\n' + 'FileName=UTF8\n' + '-textOut!\n' + cacheTabItem.path + '\\%F.txt\n' + String(enumFile.realpath).replace(/\\$/, '') + '\n' + '-execute\n'); Log(2, enumFile, startTime); filesForExifTool++; } argFile.Close(); Log(1, '... done!', startTime); if (filesForExifTool > 0) { Log(1, 'Handing over ' + filesForExifTool + ' files to ExifTool...', startTime); var cmdLine = '"' + exeExifTool + '" -@ "' + argFile + '"'; Log(2, cmdLine, startTime); wsh.Run(cmdLine, 0, true); Log(1, '... done!', startTime); } else { Log(2, '*** No files found - so nothing to do for ExifTool (Who called the script and why? Strange!) ***', startTime); Log(2, 'srcToEnum: ' + srcToEnum); Log(2, 'typeof srcToEnum: ' + typeof srcToEnum); Log(2, 'filesToEnum: ' + filesToEnum); Log(2, 'typeof filesToEnum: ' + typeof filesToEnum); } } if (!fsu.Exists(cacheFile)) { Log(2, '*** Error: cache file could not be created! ***'); Log(2, 'item: ' + item); Log(2, 'cacheFile: ' + cacheFile); Log(2, ''); Log(2, 'cmdLine:'); Log(2, cmdLine); Log(2, ''); return; } exifTags.clear(); var exifCache = stt.Decode(cacheFile.Open().Read(), 'utf8').split('\r\n'); for (var i = 0; i < exifCache.length; i++) { var line = exifCache[i].split('\t'); if (line.length != 3) continue; var group = line[0]; var tag = line[1]; var value = line[2]; var key = group + '-' + tag; exifTags(key) = value; } for (var e = new Enumerator(exifColumns); !e.atEnd(); e.moveNext()) { var column = e.item(); var name = column('name'); var type = column('type'); group = column('group'); tag = column('tag'); key = group + '-' + tag; value = exifTags.exists(key) ? exifTags(key) : column('defaultValue'); if (type == 'datetime' || type == 'date' || type == 'time') { value = value.replace(/^(\d\d\d\d):(\d\d):(\d\d)/, '$1-$2-$3'); if (value) value = DOpus.Create().Date(value); } else if (type == 'number' || type == 'double' || type == 'duration' || type == 'durationh') { value = value.replace(/[^\d\.]/g, ''); } // Add your custom modifications here... if (key == 'QuickTime-Duration') { value = Math.round(value * 10) / 10; } if (key == 'QuickTime-VideoFrameRate') { value = Math.round(value * 10) / 10; } // if (key.indexOf('QuickTime') == 0 && key.indexOf('Duration') > 0) { // value = Math.round(value * 10) / 10; // } // if (group == 'QuickTime') { // if (tag.indexOf('Duration') >= 0) { // value = Math.round(value * 10) / 10; // } else if (tag == 'Model') { // value = value.replace(' (1st generation)', ''); // value = value.replace(' (2nd generation)', ''); // value = value.replace(' (3rd generation)', ''); // value = value.replace(' (12.9-inch)', ''); // } // } // ... but not below this line! scriptColData.columns(name).value = value; } } function GetColumnMap(group, tag, name, label, header, defaultValue, justify, type) { var map = DOpus.Create().Map(); var tmp = (group + '-' + tag); map('group') = group; map('tag') = tag; map('name') = name == '' ? tmp : stt.Decode(name, 'utf8'); map('label') = label == '' ? tmp : stt.Decode(label, 'utf8'); map('header') = header == '' ? tmp : stt.Decode(header, 'utf8'); map('defaultValue') = defaultValue == '' ? '' : stt.Decode(defaultValue, 'utf8'); map('justify') = justify; map('type') = type; return map; } function CheckColumns() { exifColumns.reverse(); for (var i = exifColumns.count - 1; i >= 0; i--) { var columnItem = exifColumns(i); if (ssi.insert(columnItem('name'))) continue; Log(1, 'removed (dupe): ' + columnItem('name')); exifColumns.erase(i); } exifColumns.reverse(); } function CheckPattern(itemName) { var pCM = Script.config.patternCheckMode; if (pCM == 0) return true; var wildPattern = Script.config.wildPattern var wildFlags = ['', 'r', 'f', 'c', 'd'][Script.config.wildFlags]; wld.Parse(wildPattern, wildFlags); if (pCM == 1 && wld.Match(itemName)) return true; if (pCM == 2 && !wld.Match(itemName)) return true; return false; } function padTime(milliseconds) { var tmp = ('000000' + String(milliseconds)).slice(-6); tmp = tmp.substring(0, 3) + ':' + tmp.substring(3, 6); tmp = tmp.replace(/^00/, ' '); tmp = tmp.replace(/^0/, ' '); return tmp; } function Log(level, str, time) { var logLevel = Script.config == null ? 2 : Script.config.logLevel; if (!logLevel) return; if (!level) return; if (level > logLevel) return; if (time) { var currTime = DOpus.Create().Date(); str = padTime(currTime + currTime.ms - time - time.ms) + ' ' + str; } DOpus.Output(str); } function OnExifToolProbeFiles(scriptCmdData) { var cmd = scriptCmdData.func.command; var tab = scriptCmdData.func.sourcetab; var wsh = new ActiveXObject('WScript.Shell'); cmd.deselect = false; if (tab.selected_files.count == 0) return; var exeExifTool = fsu.Resolve(Script.config.exeExifTool); Log(2, 'Enumerating...'); Log(2, ''); cmd.ClearFiles(); for (var e = new Enumerator(tab.selected_files); !e.atEnd(); e.moveNext()) { var item = e.item(); var exifColumnsPath = fsu.GetTempFilePath(); var cmdLine = '"' + exeExifTool + '"' + ' -short' + ' -duplicates' + ' -unknown' + ' -groupNames' + ' -tab' + ' -textOut! "%0f' + exifColumnsPath + '"' + ' "' + item + '"'; Log(2, cmdLine); wsh.Run(cmdLine, 0, true); var exifColumnsLines = stt.Decode(fsu.GetItem(exifColumnsPath).Open().Read(), 'utf8').split('\r\n'); var exifColumnsFile = fsu.GetItem(item + '-exifColumns.txt').Open('wa'); for (var i = 0; i < exifColumnsLines.length; i++) { var line = exifColumnsLines[i].split('\t'); if (line.length != 3) continue; var group = line[0]; var tag = line[1]; var value = line[2]; var str = 'exifColumns.push_back(GetColumnMap(\'' + group + '\', \'' + tag + '\', \'\', \'\', \'\', \'\', \'\', \'\'));'; while (str.length < 140) str += ' '; str += '// ' + value + '\r\n'; exifColumnsFile.Write(str); } exifColumnsFile.Close(); cmd.AddFile(exifColumnsFile); } Log(2, ''); Log(2, '... done'); cmd.RunCommand('Select NONE'); cmd.RunCommand('Select FROMSCRIPT SETFOCUS'); cmd.RunCommand('Select SHOWFOCUS') } function OnExifToolOpenCacheInDual(scriptCmdData) { var cmd = scriptCmdData.func.command; var tab = scriptCmdData.func.sourcetab; var lst = tab.lister; cmd.deselect = false; var cacheFolder = fsu.Resolve(Script.config.cacheFolder); var srcPath = String(fsu.Resolve(tab.path)); Log(1, srcPath); if (srcPath.substring(0, 2) == '::') return; var destPath = cacheFolder + '\\' + srcPath.replace(':', '').replace(/\\$/, ''); Log(1, destPath); cmd.RunCommand('CreateFolder NAME="' + destPath + '"'); cmd.RunCommand('GO' + ' PATH="' + destPath + '"' + ' NEWTAB=findexisting' + ' OPENINDUAL'); cmd.ClearFiles(); for (var e = new Enumerator(tab.selected_files); !e.atEnd(); e.moveNext()) { var item = e.item(); cmd.AddFile(destPath + '\\' + item.name + '.txt'); } lst.Update(); cmd.SetSourceTab(lst.desttab); cmd.RunCommand('Set FORMAT=!default'); cmd.RunCommand('SELECT NONE'); cmd.RunCommand('SELECT FROMSCRIPT SETFOCUS'); cmd.RunCommand('SELECT SHOWFOCUS'); cmd.RunCommand('Set FOCUS=dest'); } function OnExifToolColumnsToCommands(scriptCmdData) { if (DOpus.GetClipFormat() != 'text') { Log(1, 'No text in Clipboard!'); return; } var cmd = scriptCmdData.func.command; cmd.deselect = false; var clipLines = DOpus.GetClip().split('\r\n'); var tmp = ''; for (var i = 0; i < clipLines.length; i++) { var line = clipLines[i].split('\''); var group = line[1]; var tag = line[3]; var name = line[5]; if (name == '') name = group + '-' + tag; if (typeof name == 'undefined') continue; tmp += 'Set COLUMNSTOGGLE="scp:ExifTool/' + name + '(!,a,0)"\r\n'; } if (tmp) { Log(2, 'Clipboard converted to ' + tmp.split('\r\n').count + ' Set commands'); Log(2, ''); Log(2, 'New clipboard content:'); Log(2, tmp); DOpus.SetClip(tmp); } else { Log(1, 'Nothing found. Clipboard unchanged.'); } } function OnExifToolDeleteCache(scriptCmdData) { var cmd = scriptCmdData.func.command; var tab = scriptCmdData.func.sourcetab; cmd.deselect = false; var cacheFolder = fsu.Resolve(Script.config.cacheFolder); var srcPath = String(fsu.Resolve(tab.path)); if (fsu.GetType(srcPath) == 'invalid') return; // special nodes like 'This PC' and 'iCloud Photos' cmd.ClearFiles(); Log(2, 'Looking for cache folders...'); Log(2, ''); if (srcPath.substring(0, 5) == 'coll:') { var locations = DOpus.Create().StringSetI(); var folderEnum = fsu.ReadDir(srcPath); while (!folderEnum.complete) { var item = folderEnum.Next(); locations.insert(item.path); } folderEnum.Close(); for (var e = new Enumerator(locations); !e.atEnd(); e.moveNext()) { var loc = e.item(); var destPath = cacheFolder + '\\' + loc.replace(':', ''); Log(2, destPath); cmd.AddFile(destPath); } } else { var destPath = cacheFolder + '\\' + srcPath.replace(':', ''); Log(2, destPath); cmd.AddFile(destPath); } Log(2, ''); Log(2, '... done!'); cmd.RunCommand('Delete QUIET'); cmd.RunCommand('Go REFRESH'); } var stt = DOpus.Create().StringTools(); var ssi = DOpus.Create().StringSetI(); var fsu = DOpus.FSUtil(); var wld = fsu.NewWild(); var wsh = new ActiveXObject('WScript.Shell'); var exifColumns = DOpus.Create().Vector(); var exifTags = DOpus.Create().Map(); // Column definitions go here. // group, tag: reference for ExifTool (mandatory) // name, label, header: adjust to your preferences (optional) // justify: like Opus standard for columns (optional) // type: datetime, date, time, double, number, duration, durationh. String if left empty (optional) // defaultValue: value, if no tag is found via ExifTool (optional) // group, tag, name, label, header, defaultValue, justify, type exifColumns.push_back(GetColumnMap('ASF', 'AudioChannels', '', '', '', '', '', 'number')); exifColumns.push_back(GetColumnMap('ASF', 'AudioCodecDescription', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('ASF', 'AudioCodecID', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('ASF', 'AudioCodecName', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('ASF', 'AudioSampleRate', '', '', '', '', '', 'number')); exifColumns.push_back(GetColumnMap('ASF', 'Author', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('ASF', 'Copyright', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('ASF', 'CreationDate', '', '', '', '', '', 'datetime')); exifColumns.push_back(GetColumnMap('ASF', 'DataPackets', '', '', '', '', '', 'number')); exifColumns.push_back(GetColumnMap('ASF', 'Duration', '', '', '', '', 'right', 'duration')); exifColumns.push_back(GetColumnMap('ASF', 'ErrorCorrectionType', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('ASF', 'FileID', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('ASF', 'FileLength', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('ASF', 'Flags', '', '', '', '', '', 'number')); exifColumns.push_back(GetColumnMap('ASF', 'ImageHeight', '', '', '', '', '', 'number')); exifColumns.push_back(GetColumnMap('ASF', 'ImageWidth', '', '', '', '', '', 'number')); exifColumns.push_back(GetColumnMap('ASF', 'MaxBitrate', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('ASF', 'MaxPacketSize', '', '', '', '', '', 'number')); exifColumns.push_back(GetColumnMap('ASF', 'MinPacketSize', '', '', '', '', '', 'number')); exifColumns.push_back(GetColumnMap('ASF', 'Preroll', '', '', '', '', '', 'number')); exifColumns.push_back(GetColumnMap('ASF', 'SendDuration', '', '', '', '', 'right', 'duration')); exifColumns.push_back(GetColumnMap('ASF', 'StreamNumber', '', '', '', '', '', 'number')); exifColumns.push_back(GetColumnMap('ASF', 'StreamType', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('ASF', 'TimeOffset', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('ASF', 'Title', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('ASF', 'VideoCodecDescription', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('ASF', 'VideoCodecName', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('Canon', 'CanonExposureMode', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('Canon', 'FocusMode', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('Canon', 'MeteringMode', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('Canon', 'NumAFPoints', '', '', '', '', 'right', 'number')); exifColumns.push_back(GetColumnMap('Canon', 'ValidAFPoints', '', '', '', '', 'right', 'number')); exifColumns.push_back(GetColumnMap('Composite', 'Aperture', '', '', '', '', 'right', 'double')); exifColumns.push_back(GetColumnMap('Composite', 'AvgBitrate', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('Composite', 'BlueBalance', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('Composite', 'CircleOfConfusion', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('Composite', 'DOF', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('Composite', 'DriveMode', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('Composite', 'Duration', '', '', '', '', 'right', 'duration')); exifColumns.push_back(GetColumnMap('Composite', 'FOV', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('Composite', 'FocalLength35efl', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('Composite', 'FocusDistance2', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('Composite', 'GPSAltitude', '', '', '', '', 'right', 'double')); exifColumns.push_back(GetColumnMap('Composite', 'GPSDateTime', '', '', '', '', '', 'datetime')); exifColumns.push_back(GetColumnMap('Composite', 'GPSLatitude', '', '', '', '', 'right', 'double')); exifColumns.push_back(GetColumnMap('Composite', 'GPSLongitude', '', '', '', '', 'right', 'double')); exifColumns.push_back(GetColumnMap('Composite', 'GPSPosition', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('Composite', 'HyperfocalDistance', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('Composite', 'ISO', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('Composite', 'ImageSize', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('Composite', 'Lens', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('Composite', 'Lens35efl', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('Composite', 'LensID', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('Composite', 'LightValue', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('Composite', 'Megapixels', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('Composite', 'RedBalance', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('Composite', 'Rotation', '', '', '', '', 'right', 'number')); exifColumns.push_back(GetColumnMap('Composite', 'ScaleFactor35efl', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('Composite', 'ShootingMode', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('Composite', 'ShutterSpeed', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('Composite', 'SubSecCreateDate', '', '', '', '', '', 'datetime')); exifColumns.push_back(GetColumnMap('Composite', 'SubSecDateTimeOriginal', '', '', '', '', '', 'datetime')); exifColumns.push_back(GetColumnMap('Composite', 'SubSecModifyDate', '', '', '', '', '', 'datetime')); exifColumns.push_back(GetColumnMap('Composite', 'VolumeSize', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('EXE', 'CompanyName', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('EXE', 'MachineType', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('EXE', 'SubsystemVersion', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('EXE', 'TimeStamp', '', '', '', '', '', 'datetime')); exifColumns.push_back(GetColumnMap('EXIF', 'ApertureValue', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('EXIF', 'Artist', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('EXIF', 'BitsPerSample', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('EXIF', 'BlackLevel', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('EXIF', 'BrightnessValue', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('EXIF', 'CFAPattern2', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('EXIF', 'CFARepeatPatternDim', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('EXIF', 'ChromaticAberrationCorrection', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('EXIF', 'ColorSpace', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('EXIF', 'ComponentsConfiguration', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('EXIF', 'CompressedBitsPerPixel', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('EXIF', 'Compression', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('EXIF', 'Contrast', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('EXIF', 'Copyright', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('EXIF', 'CreateDate', '', '', '', '', '', 'datetime')); exifColumns.push_back(GetColumnMap('EXIF', 'CustomRendered', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('EXIF', 'DateTimeOriginal', '', '', '', '', '', 'datetime')); exifColumns.push_back(GetColumnMap('EXIF', 'DefaultCropOrigin', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('EXIF', 'DefaultCropSize', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('EXIF', 'DigitalZoomRatio', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('EXIF', 'DistortionCorrection', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('EXIF', 'ExifImageHeight', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('EXIF', 'ExifImageWidth', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('EXIF', 'ExifVersion', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('EXIF', 'ExposureCompensation', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('EXIF', 'ExposureMode', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('EXIF', 'ExposureProgram', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('EXIF', 'ExposureTime', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('EXIF', 'FNumber', '', '', '', '', 'right', 'double')); exifColumns.push_back(GetColumnMap('EXIF', 'FileSource', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('EXIF', 'Flash', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('EXIF', 'FlashpixVersion', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('EXIF', 'FocalLength', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('EXIF', 'FocalLengthIn35mmFormat', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('EXIF', 'FocalPlaneResolutionUnit', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('EXIF', 'FocalPlaneXResolution', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('EXIF', 'FocalPlaneYResolution', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('EXIF', 'GPSAltitude', '', '', '', '', 'right', 'double')); exifColumns.push_back(GetColumnMap('EXIF', 'GPSAltitudeRef', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('EXIF', 'GPSDateStamp', '', '', '', '', '', 'date')); exifColumns.push_back(GetColumnMap('EXIF', 'GPSDifferential', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('EXIF', 'GPSLatitude', '', '', '', '', 'right', 'double')); exifColumns.push_back(GetColumnMap('EXIF', 'GPSLatitudeRef', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('EXIF', 'GPSLongitude', '', '', '', '', 'right', 'double')); exifColumns.push_back(GetColumnMap('EXIF', 'GPSLongitudeRef', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('EXIF', 'GPSMapDatum', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('EXIF', 'GPSStatus', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('EXIF', 'GPSTimeStamp', '', '', '', '', '', 'time')); exifColumns.push_back(GetColumnMap('EXIF', 'GPSVersionID', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('EXIF', 'ISO', '', '', '', '', 'right', 'number')); exifColumns.push_back(GetColumnMap('EXIF', 'ImageDescription', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('EXIF', 'ImageHeight', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('EXIF', 'ImageWidth', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('EXIF', 'InteropIndex', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('EXIF', 'InteropVersion', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('EXIF', 'LensInfo', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('EXIF', 'LensModel', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('EXIF', 'LensSerialNumber', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('EXIF', 'LightSource', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('EXIF', 'Make', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('EXIF', 'MaxApertureValue', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('EXIF', 'MeteringMode', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('EXIF', 'Model', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('EXIF', 'ModifyDate', '', '', '', '', '', 'datetime')); exifColumns.push_back(GetColumnMap('EXIF', 'OffsetTime', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('EXIF', 'OffsetTimeDigitized', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('EXIF', 'OffsetTimeOriginal', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('EXIF', 'Orientation', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('EXIF', 'OwnerName', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('EXIF', 'PhotometricInterpretation', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('EXIF', 'PlanarConfiguration', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('EXIF', 'PreviewImageLength', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('EXIF', 'PreviewImageStart', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('EXIF', 'RecommendedExposureIndex', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('EXIF', 'ResolutionUnit', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('EXIF', 'Rotation', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('EXIF', 'RowsPerStrip', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('EXIF', 'SamplesPerPixel', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('EXIF', 'Saturation', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('EXIF', 'SceneCaptureType', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('EXIF', 'SceneType', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('EXIF', 'SensitivityType', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('EXIF', 'SerialNumber', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('EXIF', 'Sharpness', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('EXIF', 'ShutterSpeedValue', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('EXIF', 'Software', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('EXIF', 'SonyCropSize', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('EXIF', 'SonyCropTopLeft', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('EXIF', 'SonyRawFileType', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('EXIF', 'StripByteCounts', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('EXIF', 'StripOffsets', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('EXIF', 'SubSecTime', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('EXIF', 'SubfileType', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('EXIF', 'ThumbnailLength', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('EXIF', 'ThumbnailOffset', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('EXIF', 'UserComment', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('EXIF', 'VignettingCorrection', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('EXIF', 'WB_RGGBLevels', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('EXIF', 'WhiteBalance', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('EXIF', 'WhiteLevel', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('EXIF', 'XPComment', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('EXIF', 'XResolution', '', '', '', '', 'right', 'number')); exifColumns.push_back(GetColumnMap('EXIF', 'YCbCrPositioning', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('EXIF', 'YResolution', '', '', '', '', 'right', 'number')); exifColumns.push_back(GetColumnMap('ExifIFD', 'DateTimeOriginal', '', '', '', '', '', 'datetime')); exifColumns.push_back(GetColumnMap('FLAC', 'BitsPerSample', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('FLAC', 'BlockSizeMax', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('FLAC', 'BlockSizeMin', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('FLAC', 'Channels', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('FLAC', 'FrameSizeMax', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('FLAC', 'FrameSizeMin', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('FLAC', 'MD5Signature', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('FLAC', 'Padding', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('FLAC', 'Picture', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('FLAC', 'PictureBitsPerPixel', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('FLAC', 'PictureDescription', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('FLAC', 'PictureHeight', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('FLAC', 'PictureIndexedColors', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('FLAC', 'PictureLength', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('FLAC', 'PictureMIMEType', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('FLAC', 'PictureType', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('FLAC', 'PictureWidth', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('FLAC', 'SampleRate', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('FLAC', 'SeekTable', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('FLAC', 'TotalSamples', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('File', 'BitsPerSample', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('File', 'ColorComponents', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('File', 'Comment', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('File', 'Directory', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('File', 'EncodingProcess', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('File', 'ExifByteOrder', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('File', 'FileAccessDate', '', '', '', '', '', 'datetime')); exifColumns.push_back(GetColumnMap('File', 'FileCreateDate', '', '', '', '', '', 'datetime')); exifColumns.push_back(GetColumnMap('File', 'FileModifyDate', '', '', '', '', '', 'datetime')); exifColumns.push_back(GetColumnMap('File', 'FileName', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('File', 'FilePermissions', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('File', 'FileSize', '', '', '', '', '', 'number')); exifColumns.push_back(GetColumnMap('File', 'FileType', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('File', 'FileTypeExtension', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('File', 'ImageHeight', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('File', 'ImageWidth', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('File', 'LineCount', '', '', '', '', '', 'number')); exifColumns.push_back(GetColumnMap('File', 'MIMEEncoding', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('File', 'MIMEType', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('File', 'Newlines', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('File', 'WordCount', '', '', '', '', '', 'number')); exifColumns.push_back(GetColumnMap('File', 'YCbCrSubSampling', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('File', 'ZoneIdentifier', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('Flash', 'AudioBitrate', '', '', '', '', '', 'number')); exifColumns.push_back(GetColumnMap('Flash', 'AudioBitsPerSample', '', '', '', '', '', 'number')); exifColumns.push_back(GetColumnMap('Flash', 'AudioChannels', '', '', '', '', '', 'number')); exifColumns.push_back(GetColumnMap('Flash', 'AudioEncoding', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('Flash', 'AudioSampleRate', '', '', '', '', '', 'number')); exifColumns.push_back(GetColumnMap('Flash', 'ByteLength', '', '', '', '', '', 'number')); exifColumns.push_back(GetColumnMap('Flash', 'CanSeekOnTime', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('Flash', 'Duration', '', '', '', '', 'right', 'duration')); exifColumns.push_back(GetColumnMap('Flash', 'FrameRate', '', '', '', '', '', 'number')); exifColumns.push_back(GetColumnMap('Flash', 'ImageHeight', '', '', '', '', '', 'number')); exifColumns.push_back(GetColumnMap('Flash', 'ImageWidth', '', '', '', '', '', 'number')); exifColumns.push_back(GetColumnMap('Flash', 'SourceData', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('Flash', 'StartTime', '', '', '', '', '', 'datetime')); exifColumns.push_back(GetColumnMap('Flash', 'TotalDataRate', '', '', '', '', '', 'number')); exifColumns.push_back(GetColumnMap('Flash', 'TotalDuration', '', '', '', '', 'right', 'duration')); exifColumns.push_back(GetColumnMap('Flash', 'VideoBitrate', '', '', '', '', '', 'number')); exifColumns.push_back(GetColumnMap('Flash', 'VideoEncoding', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('H264', 'ApertureSetting', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('H264', 'DateTimeOriginal', '', '', '', '', '', 'datetime')); exifColumns.push_back(GetColumnMap('H264', 'ExposureProgram', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('H264', 'ExposureTime', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('H264', 'FNumber', '', '', '', '', 'right', 'double')); exifColumns.push_back(GetColumnMap('H264', 'Focus', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('H264', 'Gain', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('H264', 'ImageHeight', '', '', '', '', 'right', 'number')); exifColumns.push_back(GetColumnMap('H264', 'ImageStabilization', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('H264', 'ImageWidth', '', '', '', '', 'right', 'number')); exifColumns.push_back(GetColumnMap('H264', 'Make', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('H264', 'Model', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('H264', 'TimeCode', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('H264', 'WhiteBalance', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('ICC_Profile', 'BlueMatrixColumn', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('ICC_Profile', 'BlueTRC', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('ICC_Profile', 'CMMFlags', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('ICC_Profile', 'ChromaticAdaptation', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('ICC_Profile', 'ColorSpaceData', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('ICC_Profile', 'ConnectionSpaceIlluminant', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('ICC_Profile', 'DeviceAttributes', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('ICC_Profile', 'DeviceManufacturer', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('ICC_Profile', 'DeviceModel', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('ICC_Profile', 'GreenMatrixColumn', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('ICC_Profile', 'GreenTRC', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('ICC_Profile', 'MediaBlackPoint', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('ICC_Profile', 'MediaWhitePoint', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('ICC_Profile', 'PrimaryPlatform', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('ICC_Profile', 'ProfileCMMType', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('ICC_Profile', 'ProfileClass', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('ICC_Profile', 'ProfileConnectionSpace', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('ICC_Profile', 'ProfileCopyright', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('ICC_Profile', 'ProfileCreator', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('ICC_Profile', 'ProfileDateTime', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('ICC_Profile', 'ProfileDescription', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('ICC_Profile', 'ProfileFileSignature', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('ICC_Profile', 'ProfileID', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('ICC_Profile', 'ProfileVersion', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('ICC_Profile', 'RedMatrixColumn', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('ICC_Profile', 'RedTRC', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('ICC_Profile', 'RenderingIntent', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('ID3', 'Genre', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('ID3', 'ReleaseTime', '', '', '', '', '', 'datetime')); exifColumns.push_back(GetColumnMap('ID3', 'Subtitle', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('ID3', 'Year', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('ISO', 'PathTableLocation', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('ISO', 'PathTableSize', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('ISO', 'RootDirectoryCreateDate', '', '', '', '', '', 'datetime')); exifColumns.push_back(GetColumnMap('ISO', 'Software', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('ISO', 'System', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('ISO', 'VolumeBlockCount', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('ISO', 'VolumeBlockSize', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('ISO', 'VolumeCreateDate', '', '', '', '', '', 'datetime')); exifColumns.push_back(GetColumnMap('ISO', 'VolumeModifyDate', '', '', '', '', '', 'datetime')); exifColumns.push_back(GetColumnMap('ISO', 'VolumeName', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('ISO', 'VolumeSetDiskCount', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('ISO', 'VolumeSetDiskNumber', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('JFIF', 'JFIFVersion', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('JFIF', 'ResolutionUnit', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('JFIF', 'XResolution', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('JFIF', 'YResolution', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('M2TS', 'AudioBitrate', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('M2TS', 'AudioChannels', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('M2TS', 'AudioSampleRate', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('M2TS', 'Duration', '', '', '', '', '', 'duration')); exifColumns.push_back(GetColumnMap('M2TS', 'SurroundMode', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('M2TS', 'VideoStreamType', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('MPF', 'DependentImage1EntryNumber', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('MPF', 'DependentImage2EntryNumber', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('MPF', 'MPFVersion', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('MPF', 'MPImageFlags', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('MPF', 'MPImageFormat', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('MPF', 'MPImageLength', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('MPF', 'MPImageStart', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('MPF', 'MPImageType', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('MPF', 'NumberOfImages', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('MakerNotes', 'CameraOrientation', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('MakerNotes', 'CanonExposureMode', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('MakerNotes', 'CanonModelID', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('MakerNotes', 'CreativeStyle', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('MakerNotes', 'Shutter', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('MakerNotes', 'ShutterCount', '', '', '', '', 'right', 'number')); exifColumns.push_back(GetColumnMap('MakerNotes', 'WhiteBalance', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('Matroska', 'DateTimeOriginal', '', '', '', '', '', 'datetime')); exifColumns.push_back(GetColumnMap('Matroska', 'DisplayHeight', '', '', '', '', 'right', 'number')); exifColumns.push_back(GetColumnMap('Matroska', 'DisplayWidth', '', '', '', '', 'right', 'number')); exifColumns.push_back(GetColumnMap('Matroska', 'Duration', '', '', '', '', 'right', 'duration')); exifColumns.push_back(GetColumnMap('Matroska', 'ImageHeight', '', '', '', '', 'right', 'number')); exifColumns.push_back(GetColumnMap('Matroska', 'ImageWidth', '', '', '', '', 'right', 'number')); exifColumns.push_back(GetColumnMap('Matroska', 'TrackNumber', '', '', '', '', 'right', 'number')); exifColumns.push_back(GetColumnMap('Matroska', 'VideoCodecID', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('Matroska', 'VideoFrameRate', '', '', '', '', 'right', 'double')); exifColumns.push_back(GetColumnMap('PDF', 'Author', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('PDF', 'CreateDate', '', '', '', '', '', 'datetime')); exifColumns.push_back(GetColumnMap('PDF', 'Creator', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('PDF', 'Encryption', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('PDF', 'HasXFA', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('PDF', 'Keywords', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('PDF', 'Linearized', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('PDF', 'ModifyDate', '', '', '', '', '', 'datetime')); exifColumns.push_back(GetColumnMap('PDF', 'PDFVersion', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('PDF', 'PageCount', '', '', '', '', 'right', 'number')); exifColumns.push_back(GetColumnMap('PDF', 'Producer', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('PDF', 'Subject', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('PDF', 'Title', '', '', '', '', 'left', '')); exifColumns.push_back(GetColumnMap('PDF', 'UserAccess', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('QuickTime', 'AV1ConfigurationVersion', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('QuickTime', 'AudioAvgBitrate', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('QuickTime', 'ChromaFormat', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('QuickTime', 'ChromaSamplePosition', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('QuickTime', 'CleanAperture', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('QuickTime', 'CompatibleBrands', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('QuickTime', 'CompressorID', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('QuickTime', 'ContentCreateDate', '', '', '', '', '', 'datetime')); exifColumns.push_back(GetColumnMap('QuickTime', 'CreateDate', '', '', '', '', '', 'datetime')); exifColumns.push_back(GetColumnMap('QuickTime', 'CreationDate', '', '', '', '', '', 'datetime')); exifColumns.push_back(GetColumnMap('QuickTime', 'DateAcquired', '', '', '', '', '', 'datetime')); exifColumns.push_back(GetColumnMap('QuickTime', 'DateTimeOriginal', '', '', '', '', '', 'datetime')); exifColumns.push_back(GetColumnMap('QuickTime', 'Duration', '', '', '', '', 'right', 'duration')); exifColumns.push_back(GetColumnMap('QuickTime', 'EncodingTime', '', '', '', '', '', 'datetime')); exifColumns.push_back(GetColumnMap('QuickTime', 'GPSCoordinates', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('QuickTime', 'HandlerDescription', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('QuickTime', 'HandlerType', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('QuickTime', 'HighBitDepth', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('QuickTime', 'ImagePixelDepth', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('QuickTime', 'ImageSpatialExtent', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('QuickTime', 'InitialDelaySamples', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('QuickTime', 'LocationDate', '', '', '', '', '', 'datetime')); exifColumns.push_back(GetColumnMap('QuickTime', 'MajorBrand', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('QuickTime', 'Make', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('QuickTime', 'MediaCreateDate', '', '', '', '', '', 'datetime')); exifColumns.push_back(GetColumnMap('QuickTime', 'MediaData', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('QuickTime', 'MediaDataOffset', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('QuickTime', 'MediaDataSize', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('QuickTime', 'MediaDuration', '', '', '', '', 'right', 'duration')); exifColumns.push_back(GetColumnMap('QuickTime', 'MediaModifyDate', '', '', '', '', '', 'datetime')); exifColumns.push_back(GetColumnMap('QuickTime', 'MinorVersion', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('QuickTime', 'Model', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('QuickTime', 'ModifyDate', '', '', '', '', '', 'datetime')); exifColumns.push_back(GetColumnMap('QuickTime', 'PixelAspectRatio', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('QuickTime', 'PrimaryItemReference', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('QuickTime', 'Rotation', '', '', '', '', 'right', 'number')); exifColumns.push_back(GetColumnMap('QuickTime', 'SeqLevelIdx0', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('QuickTime', 'SeqProfile', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('QuickTime', 'SeqTier0', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('QuickTime', 'Subtitle', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('QuickTime', 'Title', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('QuickTime', 'TrackCreateDate', '', '', '', '', '', 'datetime')); exifColumns.push_back(GetColumnMap('QuickTime', 'TrackDuration', '', '', '', '', 'right', 'duration')); exifColumns.push_back(GetColumnMap('QuickTime', 'TrackModifyDate', '', '', '', '', '', 'datetime')); exifColumns.push_back(GetColumnMap('QuickTime', 'TwelveBit', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('QuickTime', 'VideoAvgBitrate', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('QuickTime', 'VideoAvgFrameRate', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('QuickTime', 'VideoCodec', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('QuickTime', 'VideoFieldOrder', '', '', '', '', 'right', 'double')); exifColumns.push_back(GetColumnMap('QuickTime', 'VideoFrameRate', '', '', '', '', 'right', 'double')); exifColumns.push_back(GetColumnMap('QuickTime', 'VideoMaxBitrate', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('QuickTime', 'VideoMaxFrameRate', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('QuickTime', 'VideoSize', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('QuickTime', 'XResolution', '', '', '', '', 'right', 'number')); exifColumns.push_back(GetColumnMap('QuickTime', 'YResolution', '', '', '', '', 'right', 'number')); exifColumns.push_back(GetColumnMap('RIFF', 'AvgBytesPerSec', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('RIFF', 'BitsPerSample', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('RIFF', 'Encoding', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('RIFF', 'NumChannels', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('RIFF', 'SampleRate', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('Sony', 'FocusMode', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('Vorbis', 'Accurateripcount', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('Vorbis', 'Accurateripcountalloffsets', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('Vorbis', 'Accurateripcrc', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('Vorbis', 'Accurateripdiscid', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('Vorbis', 'Accurateripid', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('Vorbis', 'Accurateriptotal', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('Vorbis', 'Album', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('Vorbis', 'AlbumArtist', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('Vorbis', 'Artist', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('Vorbis', 'AudioChannels', '', '', '', '', 'right', 'number')); exifColumns.push_back(GetColumnMap('Vorbis', 'Comment', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('Vorbis', 'Composer', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('Vorbis', 'Date', '', '', '', '', '', 'datetime')); exifColumns.push_back(GetColumnMap('Vorbis', 'Description', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('Vorbis', 'Encoder', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('Vorbis', 'Ensemble', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('Vorbis', 'Genre', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('Vorbis', 'Language', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('Vorbis', 'Media', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('Vorbis', 'NominalBitrate', '', '', '', '', 'right', 'number')); exifColumns.push_back(GetColumnMap('Vorbis', 'Organization', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('Vorbis', 'Rating', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('Vorbis', 'ReleaseType', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('Vorbis', 'RetailDate', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('Vorbis', 'RipDate', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('Vorbis', 'RippingTool', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('Vorbis', 'SampleRate', '', '', '', '', 'right', 'number')); exifColumns.push_back(GetColumnMap('Vorbis', 'Title', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('Vorbis', 'Totaltracks', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('Vorbis', 'TrackNumber', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('Vorbis', 'Tracktotal', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('Vorbis', 'Vendor', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('Vorbis', 'VorbisVersion', '', '', '', '', 'right', 'number')); exifColumns.push_back(GetColumnMap('XML', 'CreationDateValue', '', '', '', '', '', 'datetime')); exifColumns.push_back(GetColumnMap('XML', 'DeviceManufacturer', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('XML', 'DeviceModelName', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('XML', 'DeviceSerialNo', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('XML', 'VideoFormatVideoFrameCaptureFps', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('XML', 'VideoFormatVideoFrameFormatFps', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('XML', 'VideoFormatVideoFrameVideoCodec', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('XML', 'VideoFormatVideoLayoutNumOfVerticalLine', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('XML', 'VideoFormatVideoLayoutPixel', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('XMP', 'CaptionWriter', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('XMP', 'Contributor', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('XMP', 'CreateDate', '', '', '', '', '', 'datetime')); exifColumns.push_back(GetColumnMap('XMP', 'Creator', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('XMP', 'CreatorTool', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('XMP', 'Date', '', '', '', '', '', 'datetime')); exifColumns.push_back(GetColumnMap('XMP', 'DateCreated', '', '', '', '', '', 'datetime')); exifColumns.push_back(GetColumnMap('XMP', 'Description', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('XMP', 'DocumentID', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('XMP', 'Format', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('XMP', 'HDRPMakerNote', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('XMP', 'HasExtendedXMP', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('XMP', 'Headline', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('XMP', 'InstanceID', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('XMP', 'Keywords', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('XMP', 'Marked', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('XMP', 'MetadataDate', '', '', '', '', '', 'datetime')); exifColumns.push_back(GetColumnMap('XMP', 'ModifyDate', '', '', '', '', '', 'datetime')); exifColumns.push_back(GetColumnMap('XMP', 'Producer', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('XMP', 'Rating', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('XMP', 'Rights', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('XMP', 'StartupProfile', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('XMP', 'Subject', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('XMP', 'Title', '', '', '', '', 'left', '')); exifColumns.push_back(GetColumnMap('XMP', 'WebStatement', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('XMP', 'XMPToolkit', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('ZIP', 'ArchivedFileName', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('ZIP', 'CompressedSize', '', '', '', '', 'right', 'number')); exifColumns.push_back(GetColumnMap('ZIP', 'ModifyDate', '', '', '', '', '', 'datetime')); exifColumns.push_back(GetColumnMap('ZIP', 'OperatingSystem', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('ZIP', 'PackingMethod', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('ZIP', 'UncompressedSize', '', '', '', '', 'right', 'number')); exifColumns.push_back(GetColumnMap('ZIP', 'ZipBitFlag', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('ZIP', 'ZipCRC', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('ZIP', 'ZipCompressedSize', '', '', '', '', 'right', 'number')); exifColumns.push_back(GetColumnMap('ZIP', 'ZipCompression', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('ZIP', 'ZipFileName', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('ZIP', 'ZipModifyDate', '', '', '', '', '', 'datetime')); exifColumns.push_back(GetColumnMap('ZIP', 'ZipRequiredVersion', '', '', '', '', '', '')); exifColumns.push_back(GetColumnMap('ZIP', 'ZipUncompressedSize', '', '', '', '', 'right', 'number')); // Add new column definitions here... // ... but not below this line! CheckColumns();