关于ffmpeg封装成类过程中回调函数的类型不匹配的状况
关于ffmpeg封装成类过程中回调函数的类型不匹配的情况
我需要把ffmpeg中的相关方法封装成一个类的方法实现数据隔离来达到多路解码的目的[,但是其中有个地方用到回调函数导致类型不匹配。代码大致如下
问题在于read_packet这个函数,我把封装到一个Video里面之后,
当我调用的时候会说类型不匹配,但是我不能调用成static类型,这样的话里面的socket变量就得是静态的,这样的话多路传输好像有问题,有没有其他办法解决掉这个问题,谢谢啊
------解决方案--------------------
楼主的意思是想让C的回调函数指向C++里的成员函数吧……
我之前也研究过,有点恶心,个人总结几种办法:
1.static,会破坏封装性,代码改动会很大但是最方便的一种方式。
2.写一个adaptor适配器类,具体怎么写我一时半会想不起来,总之是在外部弄的,不会破坏封装性但是比较麻烦。
3.虚函数指针,这个也依赖于C的接口是可控的(能够自己修改,第一个参数用void*,处理的时候无视掉),具体的就不说了。
总之后来我是用第2个办法弄的……如果有好的办法同样求。
我需要把ffmpeg中的相关方法封装成一个类的方法实现数据隔离来达到多路解码的目的[,但是其中有个地方用到回调函数导致类型不匹配。代码大致如下
AVIOContext *avio_alloc_context(
unsigned char * buffer,
int buffer_size,
int write_flag,
void * opaque,
int (*read_packet)(void *opaque, uint8_t *buf, int buf_size), //读包回调函数
int (*write_packet)(void *opaque, uint8_t *buf, int buf_size),
int64_t (*seek)(void *opaque, int64_t offset, int whence));
问题在于read_packet这个函数,我把封装到一个Video里面之后,
int Video::read_packet(void *opaque,uint8_t *buf,int buf_size);
当我调用的时候会说类型不匹配,但是我不能调用成static类型,这样的话里面的socket变量就得是静态的,这样的话多路传输好像有问题,有没有其他办法解决掉这个问题,谢谢啊
------解决方案--------------------
楼主的意思是想让C的回调函数指向C++里的成员函数吧……
我之前也研究过,有点恶心,个人总结几种办法:
1.static,会破坏封装性,代码改动会很大但是最方便的一种方式。
2.写一个adaptor适配器类,具体怎么写我一时半会想不起来,总之是在外部弄的,不会破坏封装性但是比较麻烦。
3.虚函数指针,这个也依赖于C的接口是可控的(能够自己修改,第一个参数用void*,处理的时候无视掉),具体的就不说了。
总之后来我是用第2个办法弄的……如果有好的办法同样求。