]> git.sesse.net Git - vlc/blobdiff - src/audio_output/filters.c
es_out: use input_DecoderDrain()
[vlc] / src / audio_output / filters.c
index ea451a36aa253719e1aa869b6dfcbb9f70b134c3..74c5a6adef62124f9911ef9b228d09b05ecf9226 100644 (file)
@@ -51,7 +51,7 @@ static filter_t *CreateFilter (vlc_object_t *obj, const char *type,
     if (unlikely(filter == NULL))
         return NULL;
 
-    filter->p_owner = owner;
+    filter->owner.sys = owner;
     filter->fmt_in.audio = *infmt;
     filter->fmt_in.i_codec = infmt->i_format;
     filter->fmt_out.audio = *outfmt;
@@ -296,7 +296,8 @@ static int VisualizationCallback (vlc_object_t *obj, const char *var,
      * separate "visual" (external) and "audio-visual" (internal) variables...
      * The visual plugin should have one submodule per effect instead. */
     if (strcasecmp (mode, "none") && strcasecmp (mode, "goom")
-     && strcasecmp (mode, "projectm") && strcasecmp (mode, "vsxu"))
+     && strcasecmp (mode, "projectm") && strcasecmp (mode, "vsxu")
+     && strcasecmp (mode, "glspectrum"))
     {
         var_Create (obj, "effect-list", VLC_VAR_STRING);
         var_SetString (obj, "effect-list", mode);
@@ -309,24 +310,6 @@ static int VisualizationCallback (vlc_object_t *obj, const char *var,
     return VLC_SUCCESS;
 }
 
-static int EqualizerCallback (vlc_object_t *obj, const char *var,
-                              vlc_value_t oldval, vlc_value_t newval,
-                              void *data)
-{
-    const char *val = newval.psz_string;
-    if (!strcmp("equalizer", var) && *val)
-    {
-        var_Create (obj, "equalizer-preset", VLC_VAR_STRING);
-        var_SetString (obj, "equalizer-preset", val);
-    }
-
-    if (aout_ChangeFilterString (obj, obj, "audio-filter", "equalizer", *val))
-        aout_InputRequestRestart ((audio_output_t *)obj); /* <- That sucks! */
-
-    (void) var; (void) oldval; (void) data;
-    return VLC_SUCCESS;
-}
-
 vout_thread_t *aout_filter_RequestVout (filter_t *filter, vout_thread_t *vout,
                                         video_format_t *fmt)
 {
@@ -334,9 +317,11 @@ vout_thread_t *aout_filter_RequestVout (filter_t *filter, vout_thread_t *vout,
      * If you want to use visualization filters from another place, you will
      * need to add a new pf_aout_request_vout callback or store a pointer
      * to aout_request_vout_t inside filter_t (i.e. a level of indirection). */
-    const aout_request_vout_t *req = (void *)filter->p_owner;
+    const aout_request_vout_t *req = filter->owner.sys;
     char *visual = var_InheritString (filter->p_parent, "audio-visual");
-    bool recycle = (visual != NULL) && strcasecmp(visual, "none");
+    /* NOTE: Disable recycling to always close the filter vout because OpenGL
+     * visualizations do not use this function to ask for a context. */
+    bool recycle = false;
     free (visual);
 
     return req->pf_request_vout (req->p_private, vout, fmt, recycle);
@@ -415,14 +400,8 @@ aout_filters_t *aout_FiltersNew (vlc_object_t *obj,
 
     /* Callbacks (before reading values and also before return statement) */
     if (request_vout != NULL)
-    {
-        var_AddCallback (obj, "equalizer", EqualizerCallback, NULL);
-        var_AddCallback (obj, "equalizer-bands", EqualizerCallback, NULL);
         var_AddCallback (obj, "visual", VisualizationCallback, NULL);
 
-        var_TriggerCallback( obj, "equalizer-bands" );
-    }
-
     /* Now add user filters */
     if (!AOUT_FMT_LINEAR(outfmt))
     {   /* Non-linear output: just convert formats, no filters/visu */
@@ -496,9 +475,8 @@ aout_filters_t *aout_FiltersNew (vlc_object_t *obj,
 
 error:
     aout_FiltersPipelineDestroy (filters->tab, filters->count);
-    var_DelCallback (obj, "equalizer", EqualizerCallback, NULL);
-    var_DelCallback (obj, "equalizer-bands", EqualizerCallback, NULL);
-    var_DelCallback (obj, "visual", VisualizationCallback, NULL);
+    if (request_vout != NULL)
+        var_DelCallback (obj, "visual", VisualizationCallback, NULL);
     free (filters);
     return NULL;
 }
@@ -518,11 +496,7 @@ void aout_FiltersDelete (vlc_object_t *obj, aout_filters_t *filters)
         aout_FiltersPipelineDestroy (&filters->resampler, 1);
     aout_FiltersPipelineDestroy (filters->tab, filters->count);
     if (obj != NULL)
-    {
-        var_DelCallback (obj, "equalizer", EqualizerCallback, NULL);
-        var_DelCallback (obj, "equalizer-bands", EqualizerCallback, NULL);
         var_DelCallback (obj, "visual", VisualizationCallback, NULL);
-    }
     free (filters);
 }