bool driver_update_system_av_info(const struct retro_system_av_info *info) { g_extern.system.av_info = *info; rarch_reinit_drivers(); // Cannot continue recording with different parameters. // Take the easiest route out and just restart the recording. #ifdef HAVE_RECORD if (g_extern.rec) { static const char *msg = "Restarting FFmpeg recording due to driver reinit."; msg_queue_push(g_extern.msg_queue, msg, 2, 180); RARCH_WARN("%s\n", msg); rarch_deinit_recording(); rarch_init_recording(); } #endif return true; }
void engine_handle_cmd(void *data) { struct android_app *android_app = (struct android_app*)g_android; int8_t cmd; if (read(android_app->msgread, &cmd, sizeof(cmd)) != sizeof(cmd)) cmd = -1; switch (cmd) { case APP_CMD_INPUT_CHANGED: slock_lock(android_app->mutex); if (android_app->inputQueue) AInputQueue_detachLooper(android_app->inputQueue); android_app->inputQueue = android_app->pendingInputQueue; if (android_app->inputQueue) { RARCH_LOG("Attaching input queue to looper"); AInputQueue_attachLooper(android_app->inputQueue, android_app->looper, LOOPER_ID_INPUT, NULL, NULL); } scond_broadcast(android_app->cond); slock_unlock(android_app->mutex); break; case APP_CMD_INIT_WINDOW: slock_lock(android_app->mutex); android_app->window = android_app->pendingWindow; scond_broadcast(android_app->cond); slock_unlock(android_app->mutex); if (g_extern.is_paused) rarch_reinit_drivers(); break; case APP_CMD_RESUME: slock_lock(android_app->mutex); android_app->activityState = cmd; scond_broadcast(android_app->cond); slock_unlock(android_app->mutex); break; case APP_CMD_START: slock_lock(android_app->mutex); android_app->activityState = cmd; scond_broadcast(android_app->cond); slock_unlock(android_app->mutex); break; case APP_CMD_PAUSE: slock_lock(android_app->mutex); android_app->activityState = cmd; scond_broadcast(android_app->cond); slock_unlock(android_app->mutex); if (!g_extern.system.shutdown) { RARCH_LOG("Pausing RetroArch.\n"); g_extern.is_paused = true; } break; case APP_CMD_STOP: slock_lock(android_app->mutex); android_app->activityState = cmd; scond_broadcast(android_app->cond); slock_unlock(android_app->mutex); break; case APP_CMD_CONFIG_CHANGED: break; case APP_CMD_TERM_WINDOW: slock_lock(android_app->mutex); /* The window is being hidden or closed, clean it up. */ /* terminate display/EGL context here */ //RARCH_WARN("Window is terminated outside PAUSED state.\n"); android_app->window = NULL; scond_broadcast(android_app->cond); slock_unlock(android_app->mutex); break; case APP_CMD_GAINED_FOCUS: g_extern.is_paused = false; if ((android_app->sensor_state_mask & (1ULL << RETRO_SENSOR_ACCELEROMETER_ENABLE)) && android_app->accelerometerSensor == NULL && driver.input_data) android_input_set_sensor_state(driver.input_data, 0, RETRO_SENSOR_ACCELEROMETER_ENABLE, android_app->accelerometer_event_rate); break; case APP_CMD_LOST_FOCUS: // Avoid draining battery while app is not being used if ((android_app->sensor_state_mask & (1ULL << RETRO_SENSOR_ACCELEROMETER_ENABLE)) && android_app->accelerometerSensor != NULL && driver.input_data) android_input_set_sensor_state(driver.input_data, 0, RETRO_SENSOR_ACCELEROMETER_DISABLE, android_app->accelerometer_event_rate); break; case APP_CMD_DESTROY: g_extern.system.shutdown = true; break; } }