monobogdan
> Оно умеет декодированные данные прямо в stdout отдавать?
Вроде умеет. Пользовался этим лет 10 назад, уже не помню точно как.
А под виндой лучше через WinAPI декодировать, сделать отдельную реализацию.
Попытка подключить исходники lame к своему проекту заставила волосы шевелиться. Там такой код, что непонятно как он вообще работает. Тронешь - взорвется. Да еще и глобальное все, подраться может с любым твоим кодом. Ощущение что писал сие какой-то гениальный кодер 60х годов. Писал чисто на гениальности, о технологиях представления не имел.
0iStalker
Лучше https://github.com/lieff/minimp3
Здесь больше багов пофиксено и лицензий нормальная.
9К720
> Неужели дельфи такое говно, что не умеет в сишные вызовы? Да ни в жисть не
> поверю
Всё он умеет, разве только .h файлы сам не парсит.
Zab
> Попытка подключить исходники lame к своему проекту заставила волосы шевелиться.
А он разве отдельной dll-кой не подключается? Тогда, действительно, была бы та ещё коза.
Delfigamer
> А он разве отдельной dll-кой не подключается? Тогда, действительно, была бы та ещё коза.
Какая еще dll? Он юниксовый. На си без плюсов написанный. Причем, писал его явно не сишный программист, а какой-то фортрановский. Код нечитаемый.
Несколько сотен глобальных переменных без всяких префиксов подерутся с любыми вашими данными. Если же надо несколько потоков чтобы декодировали - вообще облом, он на это не рассчитан.
В общем, оно каким-то чудом работает, изолировать его в отдельном процессе (не потоке) просто необходимо. Но под виндой это затратно.
Zab
> Какая еще dll? Он юниксовый.
Ну shared object, какая разница, ты как будто не понял, о чём речь.
Zab
Не потрудишься рассказать, что это такое у меня выделено?
Zab
/* * OPTIONAL: * Set printf like error/debug/message reporting functions. * The second argument has to be a pointer to a function which looks like * void my_debugf(const char *format, va_list ap) * { * (void) vfprintf(stdout, format, ap); * } * If you use NULL as the value of the pointer in the set function, the * lame buildin function will be used (prints to stderr). * To quiet any output you have to replace the body of the example function * with just "return;" and use it in the set function. */ int CDECL lame_set_errorf(lame_global_flags *, lame_report_function); int CDECL lame_set_debugf( lame_global_flags *, lame_report_function); int CDECL lame_set_msgf ( lame_global_flags *, lame_report_function);
Не потрудишься рассказать, что это за lame_global_flags *, который передаётся в каждую функцию первым параметром?
Delfigamer
Думаешь, я вставлял lame в свои исходники? Посмотрел на него и не стал такую бомбу закладывать. Через командную строку использовал, когда нужен был. Так что, не знаю что что это за параметры. Могу гадать начать, но гадать ты и без меня можешь.
Поищи лучше что-то более профессионально написанное. Я тогда давно не нашел, но может плохо искал, а может оно сейчас появилось, тогда не было.
Поправка... Я пробовал вставить lame в свой проект, но сразу же понял, что придется переделывать все остальное, чтобы оно с лэймом совместилось (адаптировать лэйм - вообще без вариантов). Как-то не захотелось все ради этого уродовать. Да и не вышло бы, у меня ж сервер был, там параллельность сплошная, а лэйм не параллелен ни разу.
Zab
Можно конкретный пример хотя бы одной глобальной переменной? Чтобы уж точно знать, что бомба и правда есть, а не приснилась Забу в ночном кошмаре.
И было бы неплохо приложить версию - может, ты просто рассказываешь нам про что-то историческое.
Delfigamer
Думаешь, я архивы столько храню? А это я вообще с работы не уносил.
Дело происходило примерно в 2007м. Может lame с тех пор и изменился, но не верю. Мог бы измениться - он бы уже тогда другим был.
А переменные глобальные там были все. Похоже, программисты другого способа хранить данные не знали, что нормально для математиков, выросших на фортране.
Zab
> Дело происходило примерно в 2007м. Может lame с тех пор и изменился, но не
> верю. Мог бы измениться - он бы уже тогда другим был.
Тема в архиве.