It is needed to avoid problems with threaded event.
VOUT_DISPLAY_EVENT_FULLSCREEN,
VOUT_DISPLAY_EVENT_FULLSCREEN,
- VOUT_DISPLAY_EVENT_DISPLAY_SIZE, /* The display size need to change : int i_width, int i_height */
+ VOUT_DISPLAY_EVENT_DISPLAY_SIZE, /* The display size need to change : int i_width, int i_height, bool is_fullscreen */
/* */
VOUT_DISPLAY_EVENT_CLOSE,
/* */
VOUT_DISPLAY_EVENT_CLOSE,
-static inline void vout_display_SendEventDisplaySize(vout_display_t *vd, int width, int height)
+static inline void vout_display_SendEventDisplaySize(vout_display_t *vd, int width, int height, bool is_fullscreen)
- vout_display_SendEvent(vd, VOUT_DISPLAY_EVENT_DISPLAY_SIZE, width, height);
+ vout_display_SendEvent(vd, VOUT_DISPLAY_EVENT_DISPLAY_SIZE, width, height, is_fullscreen);
}
static inline void vout_display_SendEventPicturesInvalid(vout_display_t *vd)
{
}
static inline void vout_display_SendEventPicturesInvalid(vout_display_t *vd)
{
bool ch_display_size;
int display_width;
int display_height;
bool ch_display_size;
int display_width;
int display_height;
+ bool display_is_fullscreen;
bool ch_display_filled;
bool is_display_filled;
bool ch_display_filled;
bool is_display_filled;
case VOUT_DISPLAY_EVENT_DISPLAY_SIZE: {
const int width = (int)va_arg(args, int);
const int height = (int)va_arg(args, int);
case VOUT_DISPLAY_EVENT_DISPLAY_SIZE: {
const int width = (int)va_arg(args, int);
const int height = (int)va_arg(args, int);
- msg_Dbg(vd, "VoutDisplayEvent 'resize' %dx%d", width, height);
+ const bool is_fullscreen = (bool)va_arg(args, int);
+ msg_Dbg(vd, "VoutDisplayEvent 'resize' %dx%d %s",
+ width, height, is_fullscreen ? "fullscreen" : "window");
- osys->ch_display_size = true;
- osys->display_width = width;
- osys->display_height = height;
+ osys->ch_display_size = true;
+ osys->display_width = width;
+ osys->display_height = height;
+ osys->display_is_fullscreen = is_fullscreen;
cfg.display.width = osys->display_width;
cfg.display.height = osys->display_height;
cfg.display.width = osys->display_width;
cfg.display.height = osys->display_height;
- if (vout_display_Control(vd, VOUT_DISPLAY_CHANGE_DISPLAY_SIZE, &cfg)) {
- msg_Err(vd, "Failed to resize display");
+ if (!cfg.is_fullscreen != !osys->display_is_fullscreen ||
+ vout_display_Control(vd, VOUT_DISPLAY_CHANGE_DISPLAY_SIZE, &cfg)) {
+ if (!cfg.is_fullscreen == !osys->display_is_fullscreen)
+ msg_Err(vd, "Failed to resize display");
/* We ignore the resized */
osys->display_width = osys->cfg.display.width;
/* We ignore the resized */
osys->display_width = osys->cfg.display.width;
osys->cfg.display.width = osys->display_width;
osys->cfg.display.height = osys->display_height;
osys->cfg.display.width = osys->display_width;
osys->cfg.display.height = osys->display_height;
- if (!osys->is_fullscreen) {
+ if (!osys->display_is_fullscreen) {
osys->width_saved = osys->display_width;
osys->height_saved = osys->display_height;
}
osys->width_saved = osys->display_width;
osys->height_saved = osys->display_height;
}
osys->zoom.num = osys->cfg.zoom.num;
osys->zoom.den = osys->cfg.zoom.den;
} else if (cfg.is_display_filled) {
osys->zoom.num = osys->cfg.zoom.num;
osys->zoom.den = osys->cfg.zoom.den;
} else if (cfg.is_display_filled) {
- osys->ch_display_size = true;
- osys->display_width = (int64_t)vd->source.i_width * osys->zoom.num / osys->zoom.den;
- osys->display_height = (int64_t)vd->source.i_height * osys->zoom.num / osys->zoom.den;
+ const int display_width = (int64_t)vd->source.i_width * osys->zoom.num / osys->zoom.den;
+ const int display_height = (int64_t)vd->source.i_height * osys->zoom.num / osys->zoom.den;
+
+ vout_display_SendEventDisplaySize(vd, display_width, display_height, osys->cfg.is_fullscreen);
}
osys->cfg.zoom.num = osys->zoom.num;
}
osys->cfg.zoom.num = osys->zoom.num;