- card->new_data_ready = true;
- card->new_frame = new_frame;
- card->new_frame_length = frame_length;
- card->new_frame_field = field;
- card->new_frame_interlaced = video_format.interlaced;
- card->new_data_ready_fence = fence;
- card->dropped_frames = dropped_frames;
- card->new_data_ready_changed.notify_all();
-
- if (field != num_fields - 1) {
- // Wait until the previous frame was consumed.
- card->new_data_ready_changed.wait(lock, [card]{ return !card->new_data_ready || card->should_quit; });
- if (card->should_quit) return;
- }
+ CaptureCard::NewFrame new_frame;
+ new_frame.frame = frame;
+ new_frame.length = frame_length;
+ new_frame.field = field;
+ new_frame.interlaced = video_format.interlaced;
+ new_frame.ready_fence = fence;
+ new_frame.dropped_frames = dropped_frames;
+ card->new_frames.push(move(new_frame));
+ card->new_frames_changed.notify_all();