diff --git a/plugins/linux-v4l2/v4l2-input.c b/plugins/linux-v4l2/v4l2-input.c index 1a73cbc0d..ae7c6ff30 100644 --- a/plugins/linux-v4l2/v4l2-input.c +++ b/plugins/linux-v4l2/v4l2-input.c @@ -59,8 +59,6 @@ struct v4l2_data { int resolution; int framerate; bool sys_timing; - bool started; - uint64_t start_ts; /* internal data */ obs_source_t *source; @@ -141,6 +139,7 @@ static void *v4l2_thread(void *vptr) int r; fd_set fds; uint8_t *start; + uint64_t first_ts; struct timeval tv; struct v4l2_buffer buf; struct obs_source_frame out; @@ -149,8 +148,8 @@ static void *v4l2_thread(void *vptr) if (v4l2_start_capture(data->dev, &data->buffers) < 0) goto exit; + first_ts = 0; data->frames = 0; - v4l2_prep_obs_frame(data, &out, plane_offsets); while (os_event_try(data->event) == EAGAIN) { @@ -183,11 +182,10 @@ static void *v4l2_thread(void *vptr) out.timestamp = data->sys_timing ? os_gettime_ns() : timeval2ns(buf.timestamp); - if (!data->started) { - data->start_ts = out.timestamp; - data->started = true; - } - out.timestamp -= data->start_ts; + if (!data->frames) + first_ts = out.timestamp; + + out.timestamp -= first_ts; start = (uint8_t *) data->buffers.info[buf.index].start; for (uint_fast32_t i = 0; i < MAX_AV_PLANES; ++i) @@ -650,8 +648,6 @@ static void v4l2_init(struct v4l2_data *data) { int fps_num, fps_denom; - data->started = false; - blog(LOG_INFO, "Start capture from %s", data->device_id); data->dev = v4l2_open(data->device_id, O_RDWR | O_NONBLOCK); if (data->dev == -1) {