MCPcopy Create free account
hub / github.com/Aitum/obs-aitum-multistream / LoadOutputStats

Method LoadOutputStats

config-dialog.cpp:1326–1489  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1324static video_t *(*obs_encoder_parent_video_wrapper)(const obs_encoder_t *encoder) = nullptr;
1325
1326void OBSBasicSettings::LoadOutputStats(std::vector<video_t *> *oldVideos)
1327{
1328 if (!obs_encoder_parent_video_loaded) {
1329#ifdef _WIN32
1330 void *dl = os_dlopen("obs");
1331#else
1332 void *dl = dlopen(nullptr, RTLD_LAZY);
1333#endif
1334 if (dl) {
1335 auto sym = os_dlsym(dl, "obs_encoder_parent_video");
1336 if (sym)
1337 obs_encoder_parent_video_wrapper = (video_t * (*)(const obs_encoder_t *encoder)) sym;
1338 os_dlclose(dl);
1339 }
1340 obs_encoder_parent_video_loaded = true;
1341 }
1342 std::vector<std::tuple<video_t *, obs_encoder_t *, obs_output_t *>> refs;
1343 obs_enum_outputs(
1344 [](void *param, obs_output_t *output) {
1345 auto refs2 = (std::vector<std::tuple<video_t *, obs_encoder_t *, obs_output_t *>> *)param;
1346 auto ec = 0;
1347 for (size_t i = 0; i < MAX_OUTPUT_VIDEO_ENCODERS; i++) {
1348 auto venc = obs_output_get_video_encoder2(output, i);
1349 if (!venc)
1350 continue;
1351 ec++;
1352 video_t *video = obs_encoder_parent_video_wrapper ? obs_encoder_parent_video_wrapper(venc)
1353 : obs_encoder_video(venc);
1354 if (!video)
1355 video = obs_output_video(output);
1356 refs2->push_back(std::tuple<video_t *, obs_encoder_t *, obs_output_t *>(video, venc, output));
1357 }
1358 if (!ec) {
1359 refs2->push_back(std::tuple<video_t *, obs_encoder_t *, obs_output_t *>(obs_output_video(output),
1360 nullptr, output));
1361 }
1362 return true;
1363 },
1364 &refs);
1365 std::sort(refs.begin(), refs.end(),
1366 [](std::tuple<video_t *, obs_encoder_t *, obs_output_t *> const &a,
1367 std::tuple<video_t *, obs_encoder_t *, obs_output_t *> const &b) {
1368 video_t *va;
1369 video_t *vb;
1370 obs_encoder_t *ea;
1371 obs_encoder_t *eb;
1372 obs_output_t *oa;
1373 obs_output_t *ob;
1374 std::tie(va, ea, oa) = a;
1375 std::tie(vb, eb, ob) = b;
1376 if (va == vb) {
1377 if (ea == eb) {
1378 return oa < ob;
1379 }
1380 return va < vb;
1381 }
1382 return va < vb;
1383 });

Callers 1

MultistreamDockMethod · 0.80

Calls 1

to_string_with_precisionFunction · 0.85

Tested by

no test coverage detected