refactoring

This commit is contained in:
Maxim Devaev
2024-03-10 12:10:09 +02:00
parent c333e75dff
commit 2e67a46eb8

View File

@@ -174,43 +174,31 @@ static void _main_loop(void) {
int once = 0; int once = 0;
int drm_opened = -1; int drm_opened = -1;
while (!atomic_load(&_g_stop)) { while (!atomic_load(&_g_stop)) {
# define CHECK(x_arg) if ((x_arg) < 0) { goto close; }
if (drm_opened <= 0) { if (drm_opened <= 0) {
if ((drm_opened = us_drm_open(drm, NULL)) < 0) { CHECK(drm_opened = us_drm_open(drm, NULL));
goto close;
}
} }
assert(drm_opened > 0); assert(drm_opened > 0);
if (atomic_load(&_g_ustreamer_online)) { if (atomic_load(&_g_ustreamer_online)) {
US_ONCE({ US_LOG_ERROR("DRM: Online stream is active, stopping capture ..."); }); US_ONCE({ US_LOG_ERROR("DRM: Online stream is active, stopping capture ..."); });
if (us_drm_wait_for_vsync(drm) < 0) { CHECK(us_drm_wait_for_vsync(drm));
goto close; CHECK(us_drm_expose_stub(drm, US_DRM_STUB_BUSY, NULL));
}
if (us_drm_expose_stub(drm, US_DRM_STUB_BUSY, NULL) < 0) {
goto close;
}
_slowdown(); _slowdown();
continue; continue;
} }
if (us_device_open(dev) < 0) { if (us_device_open(dev) < 0) {
/*if (us_drm_wait_for_vsync(drm) < 0) { /*CHECK(us_drm_wait_for_vsync(drm));
goto close; CHECK(us_drm_expose_stub(drm, US_DRM_STUB_NO_SIGNAL, NULL));*/
} CHECK(us_drm_dpms_power_off(drm));
if (us_drm_expose_stub(drm, US_DRM_STUB_NO_SIGNAL, NULL) < 0) {
goto close;
}*/
if (us_drm_dpms_power_off(drm) < 0) {
goto close;
}
_slowdown(); _slowdown();
continue; continue;
} }
us_drm_close(drm); us_drm_close(drm);
if ((drm_opened = us_drm_open(drm, dev)) < 0) { CHECK(drm_opened = us_drm_open(drm, dev));
goto close;
}
once = 0; once = 0;
@@ -220,14 +208,10 @@ static void _main_loop(void) {
goto close; goto close;
} }
if (us_drm_wait_for_vsync(drm) < 0) { CHECK(us_drm_wait_for_vsync(drm));
goto close;
}
if (prev_hw != NULL) { if (prev_hw != NULL) {
if (us_device_release_buffer(dev, prev_hw) < 0) { CHECK(us_device_release_buffer(dev, prev_hw));
goto close;
}
prev_hw = NULL; prev_hw = NULL;
} }
@@ -239,20 +223,15 @@ static void _main_loop(void) {
} }
assert(n_buf >= 0); assert(n_buf >= 0);
int exposed;
if (drm_opened == 0) { if (drm_opened == 0) {
exposed = us_drm_expose_dma(drm, hw); CHECK(us_drm_expose_dma(drm, hw));
prev_hw = hw; prev_hw = hw;
} else { } else {
exposed = us_drm_expose_stub(drm, drm_opened, dev); CHECK(us_drm_expose_stub(drm, drm_opened, dev));
if (us_device_release_buffer(dev, hw) < 0) { CHECK(us_device_release_buffer(dev, hw));
goto close;
}
} }
if (exposed < 0) { if (drm_opened > 0) {
goto close;
} else if (drm_opened > 0) {
_slowdown(); _slowdown();
} }
} }
@@ -264,6 +243,8 @@ static void _main_loop(void) {
us_device_close(dev); us_device_close(dev);
_slowdown(); _slowdown();
# undef CHECK
} }
us_device_destroy(dev); us_device_destroy(dev);