Browse Source

display: split vout_display_Reset() in two

pull/83/head
Rémi Denis-Courmont 8 years ago
parent
commit
3cc2bef538
  1. 30
      src/video_output/display.c

30
src/video_output/display.c

@ -472,13 +472,6 @@ static void vout_display_Reset(vout_display_t *vd)
{
vout_display_priv_t *osys = container_of(vd, vout_display_priv_t, display);
if (likely(!atomic_exchange_explicit(&osys->reset_pictures, false,
memory_order_relaxed)))
return;
atomic_thread_fence(memory_order_acquire);
VoutDisplayDestroyRender(vd);
if (osys->pool != NULL) {
picture_pool_Release(osys->pool);
osys->pool = NULL;
@ -490,6 +483,17 @@ static void vout_display_Reset(vout_display_t *vd)
msg_Err(vd, "Failed to adjust render format");
}
static void vout_display_CheckReset(vout_display_t *vd)
{
vout_display_priv_t *osys = container_of(vd, vout_display_priv_t, display);
if (unlikely(atomic_exchange_explicit(&osys->reset_pictures, false,
memory_order_relaxed))) {
atomic_thread_fence(memory_order_acquire);
vout_display_Reset(vd);
}
}
static int vout_UpdateSourceCrop(vout_display_t *vd)
{
vout_display_priv_t *osys = container_of(vd, vout_display_priv_t, display);
@ -601,7 +605,7 @@ void vout_UpdateDisplaySourceProperties(vout_display_t *vd, const video_format_t
* over the new decoder crop settings. */
vout_UpdateSourceCrop(vd);
}
vout_display_Reset(vd);
vout_display_CheckReset(vd);
}
void vout_display_SetSize(vout_display_t *vd, unsigned width, unsigned height)
@ -611,7 +615,7 @@ void vout_display_SetSize(vout_display_t *vd, unsigned width, unsigned height)
osys->cfg.display.width = width;
osys->cfg.display.height = height;
vout_display_Control(vd, VOUT_DISPLAY_CHANGE_DISPLAY_SIZE, &osys->cfg);
vout_display_Reset(vd);
vout_display_CheckReset(vd);
}
void vout_SetDisplayFilled(vout_display_t *vd, bool is_filled)
@ -623,7 +627,7 @@ void vout_SetDisplayFilled(vout_display_t *vd, bool is_filled)
osys->cfg.is_display_filled = is_filled;
vout_display_Control(vd, VOUT_DISPLAY_CHANGE_DISPLAY_FILLED, &osys->cfg);
vout_display_Reset(vd);
vout_display_CheckReset(vd);
}
void vout_SetDisplayZoom(vout_display_t *vd, unsigned num, unsigned den)
@ -652,7 +656,7 @@ void vout_SetDisplayZoom(vout_display_t *vd, unsigned num, unsigned den)
osys->cfg.zoom.num = num;
osys->cfg.zoom.den = den;
vout_display_Control(vd, VOUT_DISPLAY_CHANGE_ZOOM, &osys->cfg);
vout_display_Reset(vd);
vout_display_CheckReset(vd);
}
void vout_SetDisplayAspect(vout_display_t *vd, unsigned dar_num, unsigned dar_den)
@ -670,7 +674,7 @@ void vout_SetDisplayAspect(vout_display_t *vd, unsigned dar_num, unsigned dar_de
}
vout_SetSourceAspect(vd, sar_num, sar_den);
vout_display_Reset(vd);
vout_display_CheckReset(vd);
}
void vout_SetDisplayCrop(vout_display_t *vd,
@ -692,7 +696,7 @@ void vout_SetDisplayCrop(vout_display_t *vd,
osys->crop.den = crop_den;
vout_UpdateSourceCrop(vd);
vout_display_Reset(vd);
vout_display_CheckReset(vd);
}
}

Loading…
Cancel
Save