Спасибо. Принесу в жертву пару девственниц за твое здоровье
самое главное - объединить srep с lolz, но чтобы заголовки dds были сохранены
не в заголовках дело, а в том, что srep портит структурированность, что очень важно для lolz'а. В lolz детект данных сделан не по заголовкам. Можешь отрезать заголовок от DDS файла, он от этого не перестанет корректно детектироваться. Структурированность - это сохранение постоянного размера структуры данных. В хекс редакторе невооруженным глазом видно различие до srep'а и после него, например на DDS.
Может быть, просто добавление srep в lolz с дополнительными проверками сделает это, так как srep уже очень хорош
оригинальный srep не подойдет в данном случае, слишком многое пришлось бы менять. Проще создать с нуля свое, чем переделывать чужое. Поиск совпадений, менеджер памяти и модель для сжатия статистики уже готовы, осталось сделать только декомпрессию и долгими ночами все это дебажить, чтобы корректно работало.
algo | compr size | compr time | additional dec mem usage
dxt1 uncompressed data | 1 000 000 000 | |
srep:l64+lolz -d16 | 330 304 759 | 25m25s | 63 000kb
srep:l256+lolz -d16 | 322 454 237 | 28m00s | 54 000kb
srep:l512+lolz -d16 | 321 391 049 | 27m38s | 43 000kb
lolz -d16 -ldmf0 | 326 672 596 | 38m52s |
lolz -d16 -ldmf1 -ldl12 | 320 605 119 | 39m01s | 6 755kb
lolz -d16 -ldmf1 -ldl10 | 318 140 286 | 40m01s | 8 960kb
lolz -d16 -ldmf1 -ldl8 | 309 014 973 | 42m14s | 17 627kb
lolz -d16 -ldmf1 -ldl5 | 302 452 702 | 51m33s | 28 081kb
Время неточное, т.к. что-то тестировалось с высокой загрузкой процессора, а что-то на почти простаивающем. Дополнительная память на сжатие помимо обычной для lolz для -ldl5 (задает минимальный размер совпадения 2 ^ X) получается равной половине входного размера файла. с -ldl6 - четверть и т.д.