MCPcopy Create free account
hub / github.com/DistroAV/DistroAV / ndi_source_thread

Function ndi_source_thread

src/ndi-source.cpp:384–757  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

382 obs_source *obs_source, obs_source_frame *obs_video_frame);
383
384void *ndi_source_thread(void *data)
385{
386 auto s = (ndi_source_t *)data;
387 auto obs_source_name = obs_source_get_name(s->obs_source);
388 obs_log(LOG_DEBUG, "'%s' +ndi_source_thread(…)", obs_source_name);
389
390 auto config = Config::Current();
391 ptz_t ptz;
392 NDIlib_tally_t tally;
393
394 obs_source_audio obs_audio_frame = {};
395 obs_source_frame obs_video_frame = {};
396
397 NDIlib_recv_create_v3_t recv_desc;
398 recv_desc.allow_video_fields = true;
399
400 NDIlib_recv_instance_t ndi_receiver = nullptr;
401 NDIlib_video_frame_v2_t video_frame;
402
403 NDIlib_metadata_frame_t metadata_frame;
404 NDIlib_framesync_instance_t ndi_frame_sync = nullptr;
405 NDIlib_audio_frame_v3_t audio_frame;
406 NDIlib_frame_type_e frame_received = NDIlib_frame_type_none;
407
408 int64_t timestamp_audio = 0;
409 int64_t timestamp_video = 0;
410
411 //
412 // Main NDI receiver loop: BEGIN
413 //
414 while (s->running) {
415 //
416 // reset_ndi_receiver: BEGIN
417 //
418 if (s->config.reset_ndi_receiver) {
419 s->config.reset_ndi_receiver = false;
420
421 // If config.ndi_receiver_name changed, then so did obs_source_name
422 obs_source_name = obs_source_get_name(s->obs_source);
423
424 //
425 // Update recv_desc.p_ndi_recv_name
426 //
427 recv_desc.p_ndi_recv_name = s->config.ndi_receiver_name;
428 obs_log(LOG_DEBUG,
429 "'%s' ndi_source_thread: reset_ndi_receiver; Setting recv_desc.p_ndi_recv_name='%s'",
430 obs_source_name, //
431 recv_desc.p_ndi_recv_name);
432
433 //
434 // Update recv_desc.source_to_connect_to.p_ndi_name
435 //
436 recv_desc.source_to_connect_to.p_ndi_name = s->config.ndi_source_name;
437 obs_log(LOG_DEBUG,
438 "'%s' ndi_source_thread: reset_ndi_receiver; Setting recv_desc.source_to_connect_to.p_ndi_name='%s'",
439 obs_source_name, //
440 recv_desc.source_to_connect_to.p_ndi_name);
441

Callers

nothing calls this directly

Tested by

no test coverage detected