指向SDL音频回调成员函数的指针



我使用SDL 1.2.15来播放libav (ffmpeg)音频,就像这个例子一样。

我已经声明了一个类来播放声音。但是现在我必须在SDL_AudioSpec::callback中存储回调函数的指针(在示例wanted_spec.callback中)。但是我的回调是我的类的成员。

SDL中的回调指针是:

void (SDLCALL *callback)(void *userdata, Uint8 *stream, int len);

式中SDLCALL__cdecl

如何在wanted_spec_.callback中存储成员函数的指针?

如果你想使用非静态成员函数来处理回调,你需要提供一个转发函数,并将userdata设置为指向目标对象的指针。

struct CallbackObject
{
    void onCallback(Uint8 *stream, int len)
    {
        // ....
    }
    static void forwardCallback(void *userdata, Uint8 *stream, int len)
    {
        static_cast<CallbackObject*>(userdata)->onCallback(stream, len);
    }
};

SDL_AudioSpec audio;
CallbackObject callbackObject;
audio.callback = CallbackObject::forwardCallback;
audio.userdata = &callbackObject;

最新更新