@@ -218,33 +218,40 @@ sc_recorder_on_ended(struct sc_recorder *recorder, bool success,
218
218
}
219
219
220
220
static void
221
- sc_video_demuxer_on_ended (struct sc_demuxer * demuxer , bool eos ,
222
- void * userdata ) {
221
+ sc_video_demuxer_on_ended (struct sc_demuxer * demuxer ,
222
+ enum sc_demuxer_status status , void * userdata ) {
223
223
(void ) demuxer ;
224
224
(void ) userdata ;
225
225
226
- if (eos ) {
226
+ // The device may not decide to disable the video
227
+ assert (status != SC_DEMUXER_STATUS_DISABLED );
228
+
229
+ if (status == SC_DEMUXER_STATUS_EOS ) {
227
230
PUSH_EVENT (SC_EVENT_DEVICE_DISCONNECTED );
228
231
} else {
229
232
PUSH_EVENT (SC_EVENT_DEMUXER_ERROR );
230
233
}
231
234
}
232
235
233
236
static void
234
- sc_audio_demuxer_on_ended (struct sc_demuxer * demuxer , bool eos ,
235
- void * userdata ) {
237
+ sc_audio_demuxer_on_ended (struct sc_demuxer * demuxer ,
238
+ enum sc_demuxer_status status , void * userdata ) {
236
239
(void ) demuxer ;
237
- (void ) userdata ;
238
240
239
- // Contrary to the video demuxer, keep mirroring if only the audio fails.
241
+ const struct scrcpy_options * options = userdata ;
242
+
243
+ // Contrary to the video demuxer, keep mirroring if only the audio fails
244
+ // (unless --require-audio is set).
240
245
// 'eos' is true on end-of-stream, including when audio capture is not
241
246
// possible on the device (so that scrcpy continue to mirror video without
242
247
// failing).
243
248
// However, if an audio configuration failure occurs (for example the user
244
249
// explicitly selected an unknown audio encoder), 'eos' is false and scrcpy
245
250
// must exit.
246
251
247
- if (!eos ) {
252
+ if (status == SC_DEMUXER_STATUS_ERROR
253
+ || (status == SC_DEMUXER_STATUS_DISABLED
254
+ && options -> require_audio )) {
248
255
PUSH_EVENT (SC_EVENT_DEMUXER_ERROR );
249
256
}
250
257
}
@@ -443,7 +450,7 @@ scrcpy(struct scrcpy_options *options) {
443
450
.on_ended = sc_audio_demuxer_on_ended ,
444
451
};
445
452
sc_demuxer_init (& s -> audio_demuxer , "audio" , s -> server .audio_socket ,
446
- & audio_demuxer_cbs , NULL );
453
+ & audio_demuxer_cbs , options );
447
454
}
448
455
449
456
bool needs_video_decoder = options -> display ;
0 commit comments