Я молодец!
Sep. 25th, 2011 03:13 am![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Сегодня написал одну очень полезную программу. Она значительно ускоряет DPP, когда тот конвертирует файлы CR2 в JPG.
CR2 - это RAW формат фотоснимков, сделанных камерами Canon.
DPP - это Canon Digital Photo Professional, программа для технической коррекции RAW-файлов. Там можно поправить то-сё, а потом конвертировать набор файлов в JPG (batch process).
Проблема в том, что DPP хоть и поддерживает многопоточность, загружая все ядра, но делает это не очень правильно: файлы всё равно открываются последовательно, и только какие-то операции в пределах каждого файла делаются параллельно. В результате в таскмане видна "пила":
прочитал файл, приготовился, поработал, сохранил файл
Процессор явно много отдыхает между пиками.
В общем, задался я целью "истинно" омногозадачить 4 ядра нашего нового i7.
Исследование показало, что схема работы DPP такая:
DPPViewer.exe (UI приложения) по команде batch process создает в заданном выходном каталоге скрипт со случайным именем и неслучайным расширением .vbf, затем вызывает DPPBatch.exe, передавая ему путь к скрипту.
Скрипт - бинарный файл с общими настройками обработки, списком файлов CR2 и специфическими настройками для каждого файла.
DPPBatch.exe, руководствуясь этим скриптом, раз за разом вызывает DPPWorker.exe для каждого файла.
Наконец, DPPWorker.exe превращает заданный CR2 в JPG.
Моё вмешательство в схему работы было задумано так: перехватить вызов DPPBatch.exe (заменить своей программой), прочитать скрипт, спросить у юзера нужное число потоков, разбить скрипт соответственно на части и для каждой части запустить оригинальный DPPBatch.exe.
Задумка прекрасно удалась в течение этой субботы, после того, как я нашел результат труда одного замечательного человека, который уже проанализировал формат файла .vbf и выложил его в открытый доступ.
В результате выполненной работы скорость конвертации поднимается на 30-50%.
Думаю, может, приукрасить программу, прикрутить инсталлятор и продавать? :-)
CR2 - это RAW формат фотоснимков, сделанных камерами Canon.
DPP - это Canon Digital Photo Professional, программа для технической коррекции RAW-файлов. Там можно поправить то-сё, а потом конвертировать набор файлов в JPG (batch process).
Проблема в том, что DPP хоть и поддерживает многопоточность, загружая все ядра, но делает это не очень правильно: файлы всё равно открываются последовательно, и только какие-то операции в пределах каждого файла делаются параллельно. В результате в таскмане видна "пила":
прочитал файл, приготовился, поработал, сохранил файл
Процессор явно много отдыхает между пиками.
В общем, задался я целью "истинно" омногозадачить 4 ядра нашего нового i7.
Исследование показало, что схема работы DPP такая:
DPPViewer.exe (UI приложения) по команде batch process создает в заданном выходном каталоге скрипт со случайным именем и неслучайным расширением .vbf, затем вызывает DPPBatch.exe, передавая ему путь к скрипту.
Скрипт - бинарный файл с общими настройками обработки, списком файлов CR2 и специфическими настройками для каждого файла.
DPPBatch.exe, руководствуясь этим скриптом, раз за разом вызывает DPPWorker.exe для каждого файла.
Наконец, DPPWorker.exe превращает заданный CR2 в JPG.
Моё вмешательство в схему работы было задумано так: перехватить вызов DPPBatch.exe (заменить своей программой), прочитать скрипт, спросить у юзера нужное число потоков, разбить скрипт соответственно на части и для каждой части запустить оригинальный DPPBatch.exe.
Задумка прекрасно удалась в течение этой субботы, после того, как я нашел результат труда одного замечательного человека, который уже проанализировал формат файла .vbf и выложил его в открытый доступ.
В результате выполненной работы скорость конвертации поднимается на 30-50%.
Думаю, может, приукрасить программу, прикрутить инсталлятор и продавать? :-)