]> git.sesse.net Git - vlc/blobdiff - modules/video_filter/atmo/atmo.cpp
Trailing ;
[vlc] / modules / video_filter / atmo / atmo.cpp
index ded46c21ddae31af6e9d26b1cb7212f575c45aa9..1d4c04e8d054c8bbce2318bcfabb7818824bfbec 100644 (file)
@@ -117,53 +117,55 @@ void SaveBitmap(filter_sys_t *p_sys, uint8_t *p_pixels, char *psz_filename);
 strings for settings menus and hints
 */
 #define MODULE_DESCRIPTION N_ ( \
- "This module allows to control an so called AtmoLight device which "\
- "is connected to your computer.\n"\
- "AtmoLight is the homebrew version of that what Philips calls AmbiLight.\n"\
- "If you need further informations feel free to visit us at\n\n"\
- "http://www.vdr-wiki.de/wiki/index.php/Atmo-plugin\n"\
+ "This module allows to control an so called AtmoLight device "\
+ "connected to your computer.\n"\
+ "AtmoLight is the homegrown version of what Philips calls AmbiLight.\n"\
+ "If you need further information feel free to visit us at\n\n"\
+ "http://www.vdr-wiki.de/wiki/index.php/Atmo-plugin\n "\
  "http://www.vdr-wiki.de/wiki/index.php/AtmoWin\n\n"\
- "there you will find detailed descriptions how to build it for your self and "\
- "where you can get the required parts and so on.\n There you can also see "\
- "pictures and some movies showing such a device in live action...")
+ "You can find there detailed descriptions on how to build it for yourself "\
+ "and where to get the required parts.\n" \
+ "You can also have a look at pictures and some movies showing such a device " \
+ "in live action.")
 
 
 
 #if defined( __ATMO_DEBUG__ )
 #   define SAVEFRAMES_TEXT     N_("Save Debug Frames")
-#   define SAVEFRAMES_LONGTEXT N_("Writes every 128th miniframe to a folder.")
+#   define SAVEFRAMES_LONGTEXT N_("Write every 128th miniframe to a folder.")
 #   define FRAMEPATH_TEXT      N_("Debug Frame Folder")
-#   define FRAMEPATH_LONGTEXT  N_("defines the path where the debugframes " \
+#   define FRAMEPATH_LONGTEXT  N_("The path where the debugframes " \
                                   "should be saved")
 #endif
 
 #define WIDTH_TEXT             N_("Extracted Image Width")
-#define WIDTH_LONGTEXT         N_("defines the width of the mini image for " \
+#define WIDTH_LONGTEXT         N_("The width of the mini image for " \
                                   "further processing (64 is default)")
 
 #define HEIGHT_TEXT            N_("Extracted Image Height")
-#define HEIGHT_LONGTEXT        N_("defines the height of the mini image for " \
+#define HEIGHT_LONGTEXT        N_("The height of the mini image for " \
                                   "further processing (48 is default)")
 
-#define PCOLOR_TEXT            N_("use Pause Color")
-#define PCOLOR_LONGTEXT        N_("use the color defined below if the user " \
-                          "paused the video.(have light to get another beer?)")
+#define PCOLOR_TEXT            N_("Color when paused")
+#define PCOLOR_LONGTEXT        N_("Set the color to show if the user " \
+                                  "pauses the video. (Have light to get " \
+                                  "another beer?)")
 #define PCOLOR_RED_TEXT        N_("Pause-Red")
-#define PCOLOR_RED_LONGTEXT    N_("the red component of pause color")
+#define PCOLOR_RED_LONGTEXT    N_("Red component of the pause color")
 #define PCOLOR_GREEN_TEXT      N_("Pause-Green")
-#define PCOLOR_GREEN_LONGTEXT  N_("the green component of pause color")
+#define PCOLOR_GREEN_LONGTEXT  N_("Green component of the pause color")
 #define PCOLOR_BLUE_TEXT       N_("Pause-Blue")
-#define PCOLOR_BLUE_LONGTEXT   N_("the blue component of pause color")
+#define PCOLOR_BLUE_LONGTEXT   N_("Blue component of the pause color")
 #define FADESTEPS_TEXT         N_("Pause-Fadesteps")
 #define FADESTEPS_LONGTEXT     N_("Number of steps to change current color " \
                                   "to pause color (each step takes 40ms)")
 
 #define ECOLOR_RED_TEXT        N_("End-Red")
-#define ECOLOR_RED_LONGTEXT    N_("the red component of the shutdown color")
+#define ECOLOR_RED_LONGTEXT    N_("Red component of the shutdown color")
 #define ECOLOR_GREEN_TEXT      N_("End-Green")
-#define ECOLOR_GREEN_LONGTEXT  N_("the green component of the shutdown color")
+#define ECOLOR_GREEN_LONGTEXT  N_("Green component of the shutdown color")
 #define ECOLOR_BLUE_TEXT       N_("End-Blue")
-#define ECOLOR_BLUE_LONGTEXT   N_("the blue component of the shutdown color")
+#define ECOLOR_BLUE_LONGTEXT   N_("Blue component of the shutdown color")
 #define EFADESTEPS_TEXT        N_("End-Fadesteps")
 #define EFADESTEPS_LONGTEXT  N_("Number of steps to change current color to " \
                              "end color for dimming up the light in cinema " \
@@ -171,7 +173,7 @@ strings for settings menus and hints
 
 #define USEWHITEADJ_TEXT       N_("Use Software White adjust")
 #define USEWHITEADJ_LONGTEXT   N_("Should the buildin driver do a white " \
-                                  "adjust or you LED stripes? recommend.")
+                                  "adjust or your LED stripes? recommend.")
 #define WHITE_RED_TEXT         N_("White Red")
 #define WHITE_RED_LONGTEXT     N_("Red value of a pure white on your "\
                                   "LED stripes.")
@@ -184,49 +186,52 @@ strings for settings menus and hints
 
 #define SERIALDEV_TEXT         N_("Serial Port/Device")
 #define SERIALDEV_LONGTEXT   N_("Name of the serial port where the AtmoLight "\
-                       "controller is attached to\n on Windows usually "\
-                       "something like COM1 or COM2 on Linux /dev/ttyS01 f.e.")
+                                "controller is attached to.\n" \
+                                "On Windows usually something like COM1 or " \
+                                "COM2. On Linux /dev/ttyS01 f.e.")
 
 #define EDGE_TEXT            N_("Edge Weightning")
-#define EDGE_LONGTEXT        N_("increasing this value will result in color "\
-                                "more depending on the border of the frame")
+#define EDGE_LONGTEXT        N_("Increasing this value will result in color "\
+                                "more depending on the border of the frame.")
 #define BRIGHTNESS_TEXT     N_("Brightness")
-#define BRIGHTNESS_LONGTEXT N_("overall Brightness of you LED stripes")
+#define BRIGHTNESS_LONGTEXT N_("Overall brightness of your LED stripes")
 #define DARKNESS_TEXT       N_("Darkness Limit")
-#define DARKNESS_LONGTEXT   N_("pixels with a saturation lower than this will "\
-                               "be ignored should be greater than one for "\
-                               "letterboxed videos")
+#define DARKNESS_LONGTEXT   N_("Pixels with a saturation lower than this will "\
+                               "be ignored. Should be greater than one for "\
+                               "letterboxed videos.")
 #define HUEWINSIZE_TEXT     N_("Hue windowing")
-#define HUEWINSIZE_LONGTEXT N_("used for statistics")
+#define HUEWINSIZE_LONGTEXT N_("Used for statistics.")
 #define SATWINSIZE_TEXT     N_("Sat windowing")
-#define SATWINSIZE_LONGTEXT N_("used for statistics")
+#define SATWINSIZE_LONGTEXT N_("Used for statistics.")
 
 #define MEANLENGTH_TEXT     N_("Filter length (ms)")
-#define MEANLENGTH_LONGTEXT N_("Time it takes until a color is complete "\
-                                "changed, removes flickering")
+#define MEANLENGTH_LONGTEXT N_("Time it takes until a color is completely "\
+                                "changed. This prevents flickering.")
 #define MEANTHRESHOLD_TEXT     N_("Filter threshold")
-#define MEANTHRESHOLD_LONGTEXT N_("How much a color must changed, for an "\
-                                  "imediate color change")
-#define MEANPERCENTNEW_TEXT     N_("Filter Smoothness %")
+#define MEANTHRESHOLD_LONGTEXT N_("How much a color has to be changed for an "\
+                                  "immediate color change.")
+#define MEANPERCENTNEW_TEXT     N_("Filter Smoothness (in %)")
 #define MEANPERCENTNEW_LONGTEXT N_("Filter Smoothness")
 
-#define FILTERMODE_TEXT        N_("Filtermode")
+/* FIXME: WTF?!! feepk, July 6 '08 */
+#define FILTERMODE_TEXT        N_("Filter mode")
 #define FILTERMODE_LONGTEXT    N_("kind of filtering which should be use to "\
                                   "calcuate the color output")
-static int pi_filtermode_values[] = {
+static const int pi_filtermode_values[] = {
        (int)afmNoFilter,
        (int)afmCombined,
        (int)afmPercent
 };
-static const char *ppsz_filtermode_descriptions[] = {
+static const char *const ppsz_filtermode_descriptions[] = {
         N_("No Filtering"),
         N_("Combined"),
         N_("Percent")
 };
 
-#define FRAMEDELAY_TEXT       N_("Framedelay")
-#define FRAMEDELAY_LONGTEXT   N_("helps to get video out and light effects "\
-                             "insync values around 20ms should do the trick")
+#define FRAMEDELAY_TEXT       N_("Frame delay")
+#define FRAMEDELAY_LONGTEXT   N_("Helps to get the video output and the light "\
+                                 "effects in sync. Values around 20ms should " \
+                                 "do the trick.")
 
 
 #define CHANNEL_0_ASSIGN_TEXT N_("Channel summary")
@@ -235,9 +240,9 @@ static const char *ppsz_filtermode_descriptions[] = {
 #define CHANNEL_3_ASSIGN_TEXT N_("Channel top")
 #define CHANNEL_4_ASSIGN_TEXT N_("Channel bottom")
 
-#define CHANNELASSIGN_LONGTEXT N_("maps the hardware channel X to logical "\
-                                  "channel Y to fix wrong wiring:-)")
-static int pi_channel_assignment_values[] = {
+#define CHANNELASSIGN_LONGTEXT N_("Maps the hardware channel X to logical "\
+                                  "channel Y to fix wrong wiring :-)")
+static const int pi_channel_assignment_values[] = {
     -1,
      0,
      1,
@@ -245,7 +250,7 @@ static int pi_channel_assignment_values[] = {
      3,
      4
 };
-static const char *ppsz_channel_assignment_descriptions[] = {
+static const char *const ppsz_channel_assignment_descriptions[] = {
         N_("disabled"),
         N_("summary"),
         N_("left"),
@@ -254,21 +259,21 @@ static const char *ppsz_channel_assignment_descriptions[] = {
         N_("bottom")
 };
 
-#define ZONE_0_GRADIENT_TEXT N_("summary gradient")
-#define ZONE_1_GRADIENT_TEXT N_("left gradient")
-#define ZONE_2_GRADIENT_TEXT N_("right gradient")
-#define ZONE_3_GRADIENT_TEXT N_("top gradient")
-#define ZONE_4_GRADIENT_TEXT N_("bottom gradient")
-#define ZONE_X_GRADIENT_LONG_TEXT N_("defines a small bitmap with 64x48 "\
+#define ZONE_0_GRADIENT_TEXT N_("Summary gradient")
+#define ZONE_1_GRADIENT_TEXT N_("Left gradient")
+#define ZONE_2_GRADIENT_TEXT N_("Right gradient")
+#define ZONE_3_GRADIENT_TEXT N_("Top gradient")
+#define ZONE_4_GRADIENT_TEXT N_("Bottom gradient")
+#define ZONE_X_GRADIENT_LONG_TEXT N_("Defines a small bitmap with 64x48 "\
                                      "pixels, containing a grayscale gradient")
 
 #if defined( WIN32 )
 #   define ATMOWINEXE_TEXT      N_("Filename of AtmoWinA.exe")
-#   define ATMOWINEXE_LONGTEXT  N_("if you wan't that the AtmoLight control "\
-                                   "software is launched by\nVLC enter the "\
-                                   "complete Filename of AtmoWinA.exe here")
-#   define USEBUILDIN_TEXT      N_("Use buildin AtmoLight")
-#   define USEBUILDIN_LONGTEXT N_("VideoLan will directly use your AtmoLight "\
+#   define ATMOWINEXE_LONGTEXT  N_("if you want the AtmoLight control "\
+                                   "software to be launched by VLC, enter the "\
+                                   "complete path of AtmoWinA.exe here.")
+#   define USEBUILDIN_TEXT      N_("Use built-in AtmoLight")
+#   define USEBUILDIN_LONGTEXT N_("VLC will directly use your AtmoLight "\
                                   "hardware without running the external "\
                                   "AtmoWinA.exe Userspace driver.")
 #endif
@@ -278,17 +283,17 @@ static const char *ppsz_channel_assignment_descriptions[] = {
 /*****************************************************************************
 * Module descriptor
 *****************************************************************************/
-vlc_module_begin();
-set_description( N_("AtmoLight Filter") );
-set_help( MODULE_DESCRIPTION );
-set_shortname( N_( "AtmoLight" ));
-set_capability( "video filter2", 0 );
+vlc_module_begin ()
+set_description( N_("AtmoLight Filter") )
+set_help( MODULE_DESCRIPTION )
+set_shortname( N_( "AtmoLight" ))
+set_capability( "video filter2", 0 )
 
-set_category( CAT_VIDEO );
-set_subcategory( SUBCAT_VIDEO_VFILTER );
+set_category( CAT_VIDEO )
+set_subcategory( SUBCAT_VIDEO_VFILTER )
 
 #if defined(WIN32)
-set_section( N_("Choose between the buildin AtmoLight "\
+set_section( N_("Choose between the built-in AtmoLight "\
                  "driver or the external" ), 0 );
 
 /*
@@ -298,25 +303,25 @@ set_section( N_("Choose between the buildin AtmoLight "\
 add_bool(CFG_PREFIX "usebuildin", true, NULL,
          USEBUILDIN_TEXT, USEBUILDIN_LONGTEXT, false);
 add_string(CFG_PREFIX "serialdev", "COM1", NULL,
-           SERIALDEV_TEXT, SERIALDEV_LONGTEXT, false );
+           SERIALDEV_TEXT, SERIALDEV_LONGTEXT, false )
 
 /*
     on win32 the executeable external driver application
     for automatic start if needed
 */
 add_file(CFG_PREFIX "atmowinexe", NULL, NULL,
-         ATMOWINEXE_TEXT, ATMOWINEXE_LONGTEXT, false );
+         ATMOWINEXE_TEXT, ATMOWINEXE_LONGTEXT, false )
 #else
-set_section( N_("Enter connection of your AtmoLight hardware" ), 0 );
+set_section( N_("Enter the connection of your AtmoLight hardware" ), 0 )
 add_string(CFG_PREFIX "serialdev", "/dev/ttyS01", NULL,
-           SERIALDEV_TEXT, SERIALDEV_LONGTEXT, false );
+           SERIALDEV_TEXT, SERIALDEV_LONGTEXT, false )
 #endif
 
 /*
     color which is showed if you want durring pausing
     your movie ... used for both buildin / external
 */
-set_section( N_("Illuminate the room with this color on pause" ), 0 );
+set_section( N_("Illuminate the room with this color on pause" ), 0 )
 add_bool(CFG_PREFIX "usepausecolor", false, NULL,
          PCOLOR_TEXT, PCOLOR_LONGTEXT, false);
 add_integer_with_range(CFG_PREFIX "pcolor-red",   0, 0, 255, NULL,
@@ -332,7 +337,7 @@ add_integer_with_range(CFG_PREFIX "fadesteps", 50, 1, 250, NULL,
     color which is showed if you finished watching your movie ...
     used for both buildin / external
 */
-set_section( N_("Illuminate the room with this color on shutdown" ), 0 );
+set_section( N_("Illuminate the room with this color on shutdown" ), 0 )
 add_integer_with_range(CFG_PREFIX "ecolor-red",   192, 0, 255, NULL,
                        ECOLOR_RED_TEXT,   ECOLOR_RED_LONGTEXT,   false);
 add_integer_with_range(CFG_PREFIX "ecolor-green", 192, 0, 255, NULL,
@@ -348,7 +353,7 @@ add_integer_with_range(CFG_PREFIX "efadesteps",    50, 1, 250, NULL,
 
  definition of parameters for the buildin filter ...
 */
-set_section( N_("Settings only for buildin Live Video Processor" ), 0 );
+set_section( N_("Settings for the built-in Live Video Processor only" ), 0 )
 
 add_integer_with_range(CFG_PREFIX "EdgeWeightning",   8, 1, 30, NULL,
                        EDGE_TEXT, EDGE_LONGTEXT, false);
@@ -366,9 +371,9 @@ add_integer_with_range(CFG_PREFIX "SatWinSize",   3, 0, 5, NULL,
                        SATWINSIZE_TEXT, SATWINSIZE_LONGTEXT, false);
 
 add_integer(CFG_PREFIX "filtermode", (int)afmCombined, NULL,
-            FILTERMODE_TEXT, FILTERMODE_LONGTEXT, false );
+            FILTERMODE_TEXT, FILTERMODE_LONGTEXT, false )
 
-change_integer_list(pi_filtermode_values, ppsz_filtermode_descriptions, 0 );
+change_integer_list(pi_filtermode_values, ppsz_filtermode_descriptions, NULL );
 
 add_integer_with_range(CFG_PREFIX "MeanLength",    300, 300, 5000, NULL,
                        MEANLENGTH_TEXT, MEANLENGTH_LONGTEXT, false);
@@ -385,36 +390,36 @@ add_integer_with_range(CFG_PREFIX "FrameDelay", 18, 0, 35, NULL,
 /*
   output channel reordering
 */
-set_section( N_("Change channel assignment (fixes wrong wiring)" ), 0 );
+set_section( N_("Change channel assignment (fixes wrong wiring)" ), 0 )
 add_integer( CFG_PREFIX "channel_0", 0, NULL,
-            CHANNEL_0_ASSIGN_TEXT, CHANNELASSIGN_LONGTEXT, false );
+            CHANNEL_0_ASSIGN_TEXT, CHANNELASSIGN_LONGTEXT, false )
 change_integer_list( pi_channel_assignment_values,
                      ppsz_channel_assignment_descriptions, 0 );
 
 add_integer( CFG_PREFIX "channel_1", 1, NULL,
-            CHANNEL_1_ASSIGN_TEXT, CHANNELASSIGN_LONGTEXT, false );
+            CHANNEL_1_ASSIGN_TEXT, CHANNELASSIGN_LONGTEXT, false )
 change_integer_list( pi_channel_assignment_values,
                      ppsz_channel_assignment_descriptions, 0 );
 
 add_integer( CFG_PREFIX "channel_2", 2, NULL,
-            CHANNEL_2_ASSIGN_TEXT, CHANNELASSIGN_LONGTEXT, false );
+            CHANNEL_2_ASSIGN_TEXT, CHANNELASSIGN_LONGTEXT, false )
 change_integer_list( pi_channel_assignment_values,
                      ppsz_channel_assignment_descriptions, 0 );
 
 add_integer( CFG_PREFIX "channel_3", 3, NULL,
-            CHANNEL_3_ASSIGN_TEXT, CHANNELASSIGN_LONGTEXT, false );
+            CHANNEL_3_ASSIGN_TEXT, CHANNELASSIGN_LONGTEXT, false )
 change_integer_list( pi_channel_assignment_values,
                      ppsz_channel_assignment_descriptions, 0 );
 
 add_integer( CFG_PREFIX "channel_4", 4, NULL,
-            CHANNEL_4_ASSIGN_TEXT, CHANNELASSIGN_LONGTEXT, false );
+            CHANNEL_4_ASSIGN_TEXT, CHANNELASSIGN_LONGTEXT, false )
 change_integer_list( pi_channel_assignment_values,
                      ppsz_channel_assignment_descriptions, 0 );
 
 /*
   LED color white calibration
 */
-set_section( N_("Adjust the white light to your LED stripes" ), 0 );
+set_section( N_("Adjust the white light to your LED stripes" ), 0 )
 add_bool(CFG_PREFIX "whiteadj", true, NULL,
          USEWHITEADJ_TEXT, USEWHITEADJ_LONGTEXT, false);
 add_integer_with_range(CFG_PREFIX "white-red",   255, 0, 255, NULL,
@@ -436,7 +441,7 @@ Pixel BMP files - which contain your own grayscale... (you can produce funny
 effects with this...) the images MUST not compressed, should have 24-bit per
 pixel, or a simple 256 color grayscale palette
 */
-set_section( N_("Change gradients" ), 0 );
+set_section( N_("Change gradients" ), 0 )
 add_file(CFG_PREFIX "gradient_zone_0", NULL, NULL,
          ZONE_0_GRADIENT_TEXT, ZONE_X_GRADIENT_LONG_TEXT, true );
 add_file(CFG_PREFIX "gradient_zone_1", NULL, NULL,
@@ -453,7 +458,7 @@ add_file(CFG_PREFIX "gradient_zone_4", NULL, NULL,
 add_bool(CFG_PREFIX "saveframes", false, NULL,
          SAVEFRAMES_TEXT, SAVEFRAMES_LONGTEXT, false);
 add_string(CFG_PREFIX "framepath", "", NULL,
-           FRAMEPATH_TEXT, FRAMEPATH_LONGTEXT, false );
+           FRAMEPATH_TEXT, FRAMEPATH_LONGTEXT, false )
 #endif
 /*
    may be later if computers gets more power ;-) than now we increase
@@ -464,9 +469,9 @@ add_integer_with_range(CFG_PREFIX "width",  64, 64, 512, NULL,
 add_integer_with_range(CFG_PREFIX "height", 48, 48, 384, NULL,
                        HEIGHT_TEXT,  HEIGHT_LONGTEXT, true);
 
-add_shortcut( "atmo" );
-set_callbacks( CreateFilter, DestroyFilter  );
-vlc_module_end();
+add_shortcut( "atmo" )
+set_callbacks( CreateFilter, DestroyFilter  )
+vlc_module_end ()
 
 
 static const char *const ppsz_filter_options[] = {
@@ -550,7 +555,7 @@ typedef struct
 
 } fadethread_t;
 
-static void FadeToColorThread(fadethread_t *p_fadethread);
+static void *FadeToColorThread(vlc_object_t *);
 
 
 /*****************************************************************************
@@ -939,8 +944,7 @@ static void Atmo_Shutdown(filter_t *p_filter)
             if( vlc_thread_create( p_sys->p_fadethread,
                 "AtmoLight fadeing",
                 FadeToColorThread,
-                VLC_THREAD_PRIORITY_LOW,
-                false ) )
+                VLC_THREAD_PRIORITY_LOW ) )
             {
                 msg_Err( p_filter, "cannot create FadeToColorThread" );
                 vlc_object_release( p_sys->p_fadethread );
@@ -1171,7 +1175,7 @@ static void Atmo_SetupParameters(filter_t *p_filter)
                                           "error %d",psz_gradient_file,i_res);
                     }
                 }
-                delete psz_gradient_file;
+                free( psz_gradient_file );
             }
 
             p_sys->p_atmo_dyndata = new CAtmoDynData((vlc_object_t *)p_filter,
@@ -1718,8 +1722,9 @@ static picture_t * Filter( filter_t *p_filter, picture_t *p_pic )
 * to a target color defined in p_fadethread struct
 * use for: Fade to Pause Color,  and Fade to End Color
 *****************************************************************************/
-static void FadeToColorThread(fadethread_t *p_fadethread)
+static void *FadeToColorThread(vlc_object_t *obj)
 {
+    fadethread_t *p_fadethread = (fadethread_t *)obj;
     filter_sys_t *p_sys = (filter_sys_t *)p_fadethread->p_filter->p_sys;
     int i_steps_done = 0;
     int i_index;
@@ -1731,10 +1736,9 @@ static void FadeToColorThread(fadethread_t *p_fadethread)
     int i_src_green;
     int i_src_blue;
 
-    vlc_thread_ready( p_fadethread );
-
     uint8_t *p_source = NULL;
 
+    int canc = vlc_savecancel ();
     /* initialize AtmoWin for this thread! */
     AtmoInitialize(p_fadethread->p_filter , true);
 
@@ -1819,6 +1823,8 @@ static void FadeToColorThread(fadethread_t *p_fadethread)
     }
     /* call indirect to OleUnitialize() for this thread */
     AtmoFinalize(p_fadethread->p_filter, 0);
+    vlc_restorecancel (canc);
+    return NULL;
 }
 
 /*****************************************************************************
@@ -1891,8 +1897,7 @@ static int StateCallback( vlc_object_t *p_this, char const *psz_cmd,
                 if( vlc_thread_create( p_sys->p_fadethread,
                     "AtmoLight fadeing",
                     FadeToColorThread,
-                    VLC_THREAD_PRIORITY_LOW,
-                    false) )
+                    VLC_THREAD_PRIORITY_LOW ) )
                 {
                     msg_Err( p_filter, "cannot create FadeToColorThread" );
                     vlc_object_release( p_sys->p_fadethread );
@@ -1923,13 +1928,14 @@ static int StateCallback( vlc_object_t *p_this, char const *psz_cmd,
 *****************************************************************************/
 static void AddStateVariableCallback(filter_t *p_filter)
 {
-    playlist_t *p_playlist = pl_Yield( p_filter );
-    input_thread_t *p_input = p_playlist->p_input;
+    playlist_t *p_playlist = pl_Hold( p_filter );
+    input_thread_t *p_input = playlist_CurrentInput( p_playlist );
     if(p_input)
     {
         var_AddCallback( p_input, "state", StateCallback, p_filter );
+        vlc_object_release( p_input );
     }
-    vlc_object_release( p_playlist );
+    pl_Release( p_filter );
 }
 
 /*****************************************************************************
@@ -1941,13 +1947,14 @@ static void AddStateVariableCallback(filter_t *p_filter)
 *****************************************************************************/
 static void DelStateVariableCallback( filter_t *p_filter )
 {
-    playlist_t *p_playlist = pl_Yield( p_filter );
-    input_thread_t *p_input = p_playlist->p_input;
+    playlist_t *p_playlist = pl_Hold( p_filter );
+    input_thread_t *p_input = playlist_CurrentInput( p_playlist );
     if(p_input)
     {
         var_DelCallback( p_input, "state", StateCallback, p_filter );
+        vlc_object_release( p_input );
     }
-    vlc_object_release( p_playlist );
+    pl_Release( p_filter );
 }