170 похожих чатов

А как нынче бороться с такой историей? Есть ffmpeg'ная сишная

функция. У нее есть коллбек, который выглядит вот так

int(*)(void *opaque, uint8_t *buf, int buf_size),

Но я хочу ее вызывать для каждого экземпляра класса, который в отдельном потоке. Ну и, соответственно, нужно как-то скормить туда функцию из класса

int Demuxer::readBufferCallback(void* opaque, uint8_t* buf, int buf_size)

очевидно хватаю ошибку

Error C2664 'AVIOContext *avio_alloc_context(unsigned char *,int,int,void *,int (__cdecl *)(void *,uint8_t *,int),int (__cdecl *)(void *,uint8_t *,int),int64_t (__cdecl *)(void *,int64_t,int))':

cannot convert argument 5 from

'int (__cdecl Demuxer::* )(void *,uint8_t *,int)' to 'int (__cdecl *)(void *,uint8_t *,int)'

2 ответов

8 просмотров

Ну в общем да, к сожалению, этой штуке нельзя присвоить какой-то произвольный функциональный объект, вроде лямбды с состоянием. А что такое opaque? Это какой-то системный объект, или пользовательский?

оборачиваете вашу member функцию в лямбду без захватов с требуемой сигнатурой. такую лямбду можно приводить к указателю на функцию в avio_alloc_context передаете this как opaque аргумент в лямбде делаете static_cast в указатель на ваш класс и вызываете вашу member функцию

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта