OBS
+ -

OBS模块WASAPI的其中OBS_DECLARE_MODULE和OBS_MODULE_USE_DEFAULT_LOCALE

2024-03-20 6 0

OBS插件模块WASAPI用于实现Windows音频的。其源文件目录位于:

obs-studio-master\plugins\win-wasapi

源文件有:

CMakeLists.txt
data //资源文件目录
enum-wasapi.cpp
enum-wasapi.hpp
plugin-main.cpp
wasapi-notify.cpp
wasapi-notify.hpp
win-wasapi.cpp

编译出来的文件为 win-wasapi.dll

在系统中查找该文件,竟然发现钉钉也大量用了OBS的插件DLL。看来我是真的out

在plugin-main.cpp中首先引入2个宏。批量实现一些DLL回调的可选导出函数。

OBS_DECLARE_MODULE()
OBS_MODULE_USE_DEFAULT_LOCALE("win-wasapi", "en-US")

其中OBS_DECLARE_MODULE()定义为

/** Required: Declares a libobs module. */
#define OBS_DECLARE_MODULE()                                             \
    static obs_module_t *obs_module_pointer;                         \
    MODULE_EXPORT void obs_module_set_pointer(obs_module_t *module); \
    void obs_module_set_pointer(obs_module_t *module)                \
    {                                                                \
        obs_module_pointer = module;                             \
    }                                                                \
    obs_module_t *obs_current_module(void)                           \
    {                                                                \
        return obs_module_pointer;                               \
    }                                                                \
    MODULE_EXPORT uint32_t obs_module_ver(void);                     \
    uint32_t obs_module_ver(void)                                    \
    {                                                                \
        return LIBOBS_API_VER;                                   \
    }

可以看到,实现的是HMODULE及版本相关的函数。

OBS_MODULE_USE_DEFAULT_LOCALE()实现与本地语言相关的处理。

/** Optional: Use this macro in a module to use default locale handling. */
#define OBS_MODULE_USE_DEFAULT_LOCALE(module_name, default_locale)      \
    lookup_t *obs_module_lookup = NULL;                             \
    const char *obs_module_text(const char *val)                    \
    {                                                               \
        const char *out = val;                                  \
        text_lookup_getstr(obs_module_lookup, val, &out);       \
        return out;                                             \
    }                                                               \
    bool obs_module_get_string(const char *val, const char **out)   \
    {                                                               \
        return text_lookup_getstr(obs_module_lookup, val, out); \
    }                                                               \
    void obs_module_set_locale(const char *locale)                  \
    {                                                               \
        if (obs_module_lookup)                                  \
            text_lookup_destroy(obs_module_lookup);         \
        obs_module_lookup = obs_module_load_locale(             \
            obs_current_module(), default_locale, locale);  \
    }                                                               \
    void obs_module_free_locale(void)                               \
    {                                                               \
        text_lookup_destroy(obs_module_lookup);                 \
        obs_module_lookup = NULL;                               \
    }

0 篇笔记 写笔记

作者信息
我爱内核
Windows驱动开发,网站开发
好好学习,天天向上。
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

您的支持,是我们前进的动力!