File tree 3 files changed +12
-7
lines changed
3 files changed +12
-7
lines changed Original file line number Diff line number Diff line change @@ -194,10 +194,8 @@ sc_delay_buffer_frame_sink_push(struct sc_frame_sink *sink,
194
194
sc_clock_update (& db -> clock , sc_tick_now (), pts );
195
195
sc_cond_signal (& db -> wait_cond );
196
196
197
- if (db -> clock .count == 1 ) {
197
+ if (db -> first_frame_asap && db -> clock .count == 1 ) {
198
198
sc_mutex_unlock (& db -> mutex );
199
- // First frame, push it immediately, not to delay the opening of the
200
- // scrcpy window
201
199
return sc_frame_source_sinks_push (& db -> frame_source , frame );
202
200
}
203
201
@@ -227,10 +225,12 @@ sc_delay_buffer_frame_sink_push(struct sc_frame_sink *sink,
227
225
}
228
226
229
227
void
230
- sc_delay_buffer_init (struct sc_delay_buffer * db , sc_tick delay ) {
228
+ sc_delay_buffer_init (struct sc_delay_buffer * db , sc_tick delay ,
229
+ bool first_frame_asap ) {
231
230
assert (delay > 0 );
232
231
233
232
db -> delay = delay ;
233
+ db -> first_frame_asap = first_frame_asap ;
234
234
235
235
sc_frame_source_init (& db -> frame_source );
236
236
Original file line number Diff line number Diff line change @@ -29,6 +29,7 @@ struct sc_delay_buffer {
29
29
struct sc_frame_sink frame_sink ; // frame sink trait
30
30
31
31
sc_tick delay ;
32
+ bool first_frame_asap ;
32
33
33
34
sc_thread thread ;
34
35
sc_mutex mutex ;
@@ -49,8 +50,11 @@ struct sc_delay_buffer_callbacks {
49
50
* Initialize a delay buffer.
50
51
*
51
52
* \param delay a (strictly) positive delay
53
+ * \param first_frame_asap if true, do not delay the first frame (useful for
54
+ a video stream).
52
55
*/
53
56
void
54
- sc_delay_buffer_init (struct sc_delay_buffer * db , sc_tick delay );
57
+ sc_delay_buffer_init (struct sc_delay_buffer * db , sc_tick delay ,
58
+ bool first_frame_asap );
55
59
56
60
#endif
Original file line number Diff line number Diff line change @@ -685,7 +685,8 @@ scrcpy(struct scrcpy_options *options) {
685
685
686
686
struct sc_frame_source * src = & s -> video_decoder .frame_source ;
687
687
if (options -> display_buffer ) {
688
- sc_delay_buffer_init (& s -> display_buffer , options -> display_buffer );
688
+ sc_delay_buffer_init (& s -> display_buffer , options -> display_buffer ,
689
+ true);
689
690
sc_frame_source_add_sink (src , & s -> display_buffer .frame_sink );
690
691
src = & s -> display_buffer .frame_source ;
691
692
}
@@ -708,7 +709,7 @@ scrcpy(struct scrcpy_options *options) {
708
709
709
710
struct sc_frame_source * src = & s -> video_decoder .frame_source ;
710
711
if (options -> v4l2_buffer ) {
711
- sc_delay_buffer_init (& s -> v4l2_buffer , options -> v4l2_buffer );
712
+ sc_delay_buffer_init (& s -> v4l2_buffer , options -> v4l2_buffer , true );
712
713
sc_frame_source_add_sink (src , & s -> v4l2_buffer .frame_sink );
713
714
src = & s -> v4l2_buffer .frame_source ;
714
715
}
You can’t perform that action at this time.
0 commit comments