Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "KOL";
Текущий архив: 2009.12.13;
Скачать: [xml.tar.bz2];

Вниз

LZO, чтоб его...   Найти похожие ветки 

 
=BuckLr= ©   (2008-04-22 21:28) [0]

Скачал исходники LZO - не пашет (порт Андрея Кудрявцева). Валится где-то в процедуре compress. Пытался сжать строку, так:

function LZOCompressStr(s: string): string;
var
 buffer: Pointer;
 size: Integer;
begin                        
 compress(PChar(s), Length(s), buffer, size);
 SetLength(result, size);
 Move(buffer^, pointer(result)^, size);
 FreeMem(buffer);
end;

В чём тут дело?


 
D[u]fa   (2008-04-23 08:50) [1]

Сам не видел порта, но мб под buffer надо память выделять?


 
=BuckLr= ©   (2008-04-23 10:37) [2]

Ну это понятно, что надо бы. Но, с другой стороны, для теста я использовал очень короткие строки, которые вполне способны расположиться в стеке. Да и как можно выделить память под буфер, размер которого я изначально не знаю (могу знать только после того, как сжатие отработает)? Валится-то где-то в функции compress, сейчас не вспомню, но где-то в первой трети.

Автор порта, я так понял, здесь уже не появляется? Я в сжатии полный профан :(

А алгоритм самое то, что нужно: +2 кило кода к программе для компрессии и декомпрессии. И степень сжатия мне вполне подходит.


 
=BuckLr= ©   (2008-04-23 16:06) [3]

Да, надо было выделить память. Я неправильно понял readme, думал, compress сама выделяет память для буфера. Оказалось, нет. Сжатие заработало. Теперь не могу заставить работать декомпрессию :( Распаковывает какую-то шнягу......


 
D[u]fa   (2008-04-23 16:49) [4]

покеж код, может посоветую чего =)


 
Тыщ   (2008-04-23 23:40) [5]

Извините за небольшой оффтоп, а LZO сильно лучше DEFLATE (zlib, gzip, zip, etc.)?


 
=BuckLr= ©   (2008-04-24 11:25) [6]


> покеж код

тот же самый, за исключением выделения памяти под буфер. В обоих случаях код один, разница только в функции (compress или decompress).
Но я нашёл проблему. Вместо decompress вызывал decompress_safe - заработало. Только глючно как-то... Ладно, домой приду, исходники скину "на посмотреть" :)


> LZO сильно лучше DEFLATE

неа. это адаптивное сжатие, типа LZH, жмёт не очень. Но на некоторых данных жмёт вполне ничего, при том что добавляет около 2 килобайт кода. Для моего случая это оптимальный вариант.


 
Тыщ   (2008-04-24 12:49) [7]

=BuckLr= ©   (24.04.08 11:25) [6]

> Но на некоторых данных жмёт вполне ничего, при том что добавляет около 2 килобайт кода. Для моего случая это оптимальный вариант.

Это на распаковщик? Вот тут есть tinf, распаковывает DEFLATE и добавляет 2 кб кода. Может, стоит портировать на Delphi.
http://www.ibsensoftware.com/download.html


 
=BuckLr= ©   (2008-04-24 17:25) [8]


> Это на распаковщик?

и распаковщик, и запаковщик :) 2 кило я примерно измерял, просто размер файла посмотрел до и после, так что весьма приблизительно...


> Может, стоит портировать на Delphi

оки, глянем, что за зверь. Правда, я тут на днях пытался портануть lzma, но вскоре понял, что не осилю :)


 
mdw ©   (2008-04-24 21:00) [9]


> оки, глянем, что за зверь. Правда, я тут на днях пытался
> портануть lzma, но вскоре понял, что не осилю :)

Я в принципе, порт сделал, Encoder+Decoder дают 26к. Правда от классов не избавился, постараюсь заняться в ближайшее время. Еще бы кто сделал совместимость с 7z, вообще было бы хорошо. А то я боюсь не скоро доберусь...


 
=BuckLr= ©   (2008-04-25 10:45) [10]


> Я в принципе, порт сделал

Выложи, плиз! Хотя бы так, как есть, я хочу использовать его в следующей работе. Хотя на объекты вряд ли рискну перевести - моцка может не хватить :)


 
mdw ©   (2008-04-25 11:24) [11]

www.kolnmck.ru/KOL_LZMA.rar


 
=BuckLr= ©   (2008-04-25 12:48) [12]

Спасибо.

Да. Тут, навскидку, классы убрать несложно.


 
mdw ©   (2008-04-25 13:18) [13]

Не сложно, время только нужно, а его не хватает как всегда....:(


 
mdw ©   (2008-04-25 16:03) [14]

Убил классы, на полтора кило умеменьшилось.


 
mdw ©   (2008-04-25 16:04) [15]

Обновил архив


 
=BuckLr= ©   (2008-04-27 10:49) [16]


> Обновил архив

В исходники ещё не глядел, но потестил демо, оказалось: вылетает, если параметры сжатия установить по максимуму :( посмотри, мож где какой ляп..


 
mdw ©   (2008-04-28 11:54) [17]


> В исходники ещё не глядел, но потестил демо, оказалось:
> вылетает, если параметры сжатия установить по максимуму
> :( посмотри, мож где какой ляп..

Нет никакого ляпа. Вылетает если Dictionary Size поставить больше 26. В этом случае выделяется буфер больше 500 мб, соответственно и валится... Можно попробовать переделать работу с памятью, но я не буду. По моему на фиг не нужно, архиватор сжирающий 500 мб - перебор. Не зря же рекомендуют  Dictionary Size = 26 (~16мб).


 
Vga ©   (2008-04-28 16:05) [18]

mdv, а чем не понравился родной С код? Его несложно в дельфи слинковать. Родной С декомпрессор из LZMA SDK - 2-3кб добавляет.
LZO - отличается быстрой распаковкой (до 20МБ/с на Pentium 133 по словам автора), малым кодом распаковки (байт 200 распаковщик, не требует памяти кроме как под выходной буфер), слабым сжатием.
Еще есть NRV (библиотека UCL) того же автора, этот сжимает и распаковывает медленнее, зато обычно жмет лучше чем Deflate.


 
mdw ©   (2008-04-28 16:41) [19]

Мне нужно было под WinCE.
А потом, я же не делал порт из С в делфи, а просто под Кол адаптировал.:)
А паскалевский, код который я брал, вроде как оффициальный порт С в паскаль. А про память - это как раз упаковщик, длина словаря.



Страницы: 1 вся ветка

Форум: "KOL";
Текущий архив: 2009.12.13;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.01 c
2-1256194244
kyn66
2009-10-22 10:50
2009.12.13
Цвет строк в многострочном GridEh


2-1256277237
kyn66
2009-10-23 09:53
2009.12.13
Подсчет среднего значения с нулевыми числами


15-1255365742
Игорь Шевченко
2009-10-12 20:42
2009.12.13
Ставлю Windows 95. Pan european edition. С дискет :)


2-1255265933
Alexei
2009-10-11 16:58
2009.12.13
Работа с SynMemo


2-1256444215
STD
2009-10-25 07:16
2009.12.13
TIcon





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский