mirror of
https://github.com/pikvm/ustreamer.git
synced 2026-03-11 01:53:43 +00:00
refactoring
This commit is contained in:
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user