• OBS源码解析(2)run_program函数


    static int run_program(fstream &logFile, int argc, char *argv[])
    {

    /*初始化和读取profile相关信息*/
    int ret = -1;

    auto profilerNameStore = CreateNameStore();

    std::unique_ptr<void, decltype(ProfilerFree)>
    prof_release(static_cast<void*>(&ProfilerFree),
    ProfilerFree);

    profiler_start();
    profile_register_root(run_program_init, 0);

    auto PrintInitProfile = [&]()
    {
    auto snap = GetSnapshot();

    profiler_snapshot_filter_roots(snap.get(), [](void *data,
    const char *name, bool *remove)
    {
    *remove = (*static_cast<const char**>(data)) != name;
    return true;
    }, static_cast<void*>(&run_program_init));

    profiler_print(snap.get());
    };

    ScopeProfiler prof{run_program_init};

    QCoreApplication::addLibraryPath(".");
    /*生成OBSApp 对象*/
    OBSApp program(argc, argv, profilerNameStore.get());

    try {

    /*初始化应用*/
    program.AppInit();

    OBSTranslator translator;

    create_log_file(logFile);
    delete_oldest_file("obs-studio/profiler_data");

    program.installTranslator(&translator);

    /*初始化obs模块*/

    if (!program.OBSInit())
    return 0;

    prof.Stop();

    return program.exec();

    } catch (const char *error) {
    blog(LOG_ERROR, "%s", error);
    OBSErrorBox(nullptr, "%s", error);
    }

    return ret;
    }

    本博客所有内容均为原创,转载请说明出处。欢迎音视频多媒体领域的朋友来人来函交流心得。
  • 相关阅读:
    js调试技巧
    Java编程技巧——构建器
    java设计模式:工厂方法模式(Factory Method)
    23种设计模式导航
    java设计模式:单例模式(Singleton Pattern)
    迭代器与生成器
    装饰器
    文件操作的说明与使用
    函数命名、调用小技巧
    各类型数据的操作方法
  • 原文地址:https://www.cnblogs.com/liuxt/p/6070149.html
Copyright © 2020-2023  润新知