]> git.sesse.net Git - vlc/blobdiff - src/libvlc.c
Added SSSE3/SSE4.1/SSE4.2 support to libvlc.
[vlc] / src / libvlc.c
index efebc02bde24f46ac5fe9c653f1c6bc3f54fe1b2..04eaaf952c3f044f438c6573e5b34064ae616277 100644 (file)
 #   include <dbus/dbus.h>
 #endif
 
-#ifdef HAVE_HAL
-#   include <hal/libhal.h>
-#endif
-
 #include <vlc_playlist.h>
 #include <vlc_interface.h>
 
@@ -86,6 +82,8 @@
 #include "audio_output/aout_internal.h"
 
 #include <vlc_charset.h>
+#include <vlc_cpu.h>
+#include <vlc_url.h>
 
 #include "libvlc.h"
 
@@ -225,8 +223,6 @@ static void PauseConsole  ( void );
 #endif
 static int  ConsoleWidth  ( void );
 
-static void InitDeviceValues( libvlc_int_t * );
-
 static vlc_mutex_t global_lock = VLC_STATIC_MUTEX;
 
 /**
@@ -298,7 +294,6 @@ int libvlc_InternalInit( libvlc_int_t *p_libvlc, int i_argc,
                          const char *ppsz_argv[] )
 {
     libvlc_priv_t *priv = libvlc_priv (p_libvlc);
-    char         p_capabilities[200];
     char *       p_tmp = NULL;
     char *       psz_modules = NULL;
     char *       psz_parser = NULL;
@@ -306,7 +301,7 @@ int libvlc_InternalInit( libvlc_int_t *p_libvlc, int i_argc,
     bool   b_exit = false;
     int          i_ret = VLC_EEXIT;
     playlist_t  *p_playlist = NULL;
-    vlc_value_t  val;
+    char        *psz_val;
 #if defined( ENABLE_NLS ) \
      && ( defined( HAVE_GETTEXT ) || defined( HAVE_INCLUDED_GETTEXT ) )
 # if defined (WIN32) || defined (__APPLE__)
@@ -541,11 +536,6 @@ int libvlc_InternalInit( libvlc_int_t *p_libvlc, int i_argc,
         return i_ret;
     }
 
-    /*
-     * Init device values
-     */
-    InitDeviceValues( p_libvlc );
-
     /*
      * Override default configuration with config file settings
      */
@@ -737,8 +727,15 @@ int libvlc_InternalInit( libvlc_int_t *p_libvlc, int i_argc,
     if( priv->b_color )
         priv->b_color = config_GetInt( p_libvlc, "color" ) > 0;
 
-    if( !config_GetInt( p_libvlc, "fpu" ) )
-        cpu_flags &= ~CPU_CAPABILITY_FPU;
+    char p_capabilities[200];
+#define PRINT_CAPABILITY( capability, string )                              \
+    if( vlc_CPU() & capability )                                            \
+    {                                                                       \
+        strncat( p_capabilities, string " ",                                \
+                 sizeof(p_capabilities) - strlen(p_capabilities) );         \
+        p_capabilities[sizeof(p_capabilities) - 1] = '\0';                  \
+    }
+    p_capabilities[0] = '\0';
 
 #if defined( __i386__ ) || defined( __x86_64__ )
     if( !config_GetInt( p_libvlc, "mmx" ) )
@@ -751,31 +748,43 @@ int libvlc_InternalInit( libvlc_int_t *p_libvlc, int i_argc,
         cpu_flags &= ~CPU_CAPABILITY_SSE;
     if( !config_GetInt( p_libvlc, "sse2" ) )
         cpu_flags &= ~CPU_CAPABILITY_SSE2;
-#endif
-#if defined( __powerpc__ ) || defined( __ppc__ ) || defined( __ppc64__ )
-    if( !config_GetInt( p_libvlc, "altivec" ) )
-        cpu_flags &= ~CPU_CAPABILITY_ALTIVEC;
-#endif
+    if( !config_GetInt( p_libvlc, "sse3" ) )
+        cpu_flags &= ~CPU_CAPABILITY_SSE3;
+    if( !config_GetInt( p_libvlc, "ssse3" ) )
+        cpu_flags &= ~CPU_CAPABILITY_SSSE3;
+    if( !config_GetInt( p_libvlc, "sse41" ) )
+        cpu_flags &= ~CPU_CAPABILITY_SSE4_1;
+    if( !config_GetInt( p_libvlc, "sse42" ) )
+        cpu_flags &= ~CPU_CAPABILITY_SSE4_2;
 
-#define PRINT_CAPABILITY( capability, string )                              \
-    if( vlc_CPU() & capability )                                            \
-    {                                                                       \
-        strncat( p_capabilities, string " ",                                \
-                 sizeof(p_capabilities) - strlen(p_capabilities) );         \
-        p_capabilities[sizeof(p_capabilities) - 1] = '\0';                  \
-    }
-
-    p_capabilities[0] = '\0';
-    PRINT_CAPABILITY( CPU_CAPABILITY_486, "486" );
-    PRINT_CAPABILITY( CPU_CAPABILITY_586, "586" );
-    PRINT_CAPABILITY( CPU_CAPABILITY_PPRO, "Pentium Pro" );
     PRINT_CAPABILITY( CPU_CAPABILITY_MMX, "MMX" );
     PRINT_CAPABILITY( CPU_CAPABILITY_3DNOW, "3DNow!" );
     PRINT_CAPABILITY( CPU_CAPABILITY_MMXEXT, "MMXEXT" );
     PRINT_CAPABILITY( CPU_CAPABILITY_SSE, "SSE" );
     PRINT_CAPABILITY( CPU_CAPABILITY_SSE2, "SSE2" );
+    PRINT_CAPABILITY( CPU_CAPABILITY_SSE3, "SSE3" );
+    PRINT_CAPABILITY( CPU_CAPABILITY_SSE3, "SSSE3" );
+    PRINT_CAPABILITY( CPU_CAPABILITY_SSE4_1, "SSE4.1" );
+    PRINT_CAPABILITY( CPU_CAPABILITY_SSE4_2, "SSE4.2" );
+    PRINT_CAPABILITY( CPU_CAPABILITY_SSE4A,  "SSE4A" );
+
+#elif defined( __powerpc__ ) || defined( __ppc__ ) || defined( __ppc64__ )
+    if( !config_GetInt( p_libvlc, "altivec" ) )
+        cpu_flags &= ~CPU_CAPABILITY_ALTIVEC;
+
     PRINT_CAPABILITY( CPU_CAPABILITY_ALTIVEC, "AltiVec" );
-    PRINT_CAPABILITY( CPU_CAPABILITY_FPU, "FPU" );
+
+#elif defined( __arm__ )
+    PRINT_CAPABILITY( CPU_CAPABILITY_NEON, "NEONv1" );
+
+#endif
+
+#if HAVE_FPU
+    strncat( p_capabilities, "FPU ",
+             sizeof(p_capabilities) - strlen( p_capabilities) );
+    p_capabilities[sizeof(p_capabilities) - 1] = '\0';
+#endif
+
     msg_Dbg( p_libvlc, "CPU has capabilities %s", p_capabilities );
 
     /*
@@ -915,21 +924,12 @@ int libvlc_InternalInit( libvlc_int_t *p_libvlc, int i_argc,
              && config_GetInt( p_libvlc, "started-from-file" ) ) )
         intf_Create( p_libvlc, "dbus,none" );
 
+# if !defined (HAVE_MAEMO)
     /* Prevents the power management daemon from suspending the system
      * when VLC is active */
     if( config_GetInt( p_libvlc, "inhibit" ) > 0 )
         intf_Create( p_libvlc, "inhibit,none" );
-#endif
-
-    /*
-     * If needed, load the Xscreensaver interface
-     * Currently, only for X
-     */
-#ifdef HAVE_X11_XLIB_H
-    if( config_GetInt( p_libvlc, "disable-screensaver" ) )
-    {
-        intf_Create( p_libvlc, "screensaver,none" );
-    }
+# endif
 #endif
 
     if( (config_GetInt( p_libvlc, "file-logging" ) > 0) &&
@@ -1003,16 +1003,15 @@ int libvlc_InternalInit( libvlc_int_t *p_libvlc, int i_argc,
     /*
      * Get --open argument
      */
-    var_Create( p_libvlc, "open", VLC_VAR_STRING | VLC_VAR_DOINHERIT );
-    var_Get( p_libvlc, "open", &val );
-    if ( val.psz_string != NULL && *val.psz_string )
+    psz_val = var_CreateGetString( p_libvlc, "open" );
+    if ( psz_val != NULL && *psz_val )
     {
         playlist_t *p_playlist = pl_Hold( p_libvlc );
-        playlist_AddExt( p_playlist, val.psz_string, NULL, PLAYLIST_INSERT, 0,
+        playlist_AddExt( p_playlist, psz_val, NULL, PLAYLIST_INSERT, 0,
                          -1, 0, NULL, 0, true, pl_Unlocked );
         pl_Release( p_libvlc );
     }
-    free( val.psz_string );
+    free( psz_val );
 
     return VLC_SUCCESS;
 }
@@ -1051,7 +1050,7 @@ void libvlc_InternalCleanup( libvlc_int_t *p_libvlc )
     /* Any thread still running must not assume pl_Hold() succeeds. */
     msg_Dbg( p_libvlc, "removing playlist" );
 
-    libvlc_priv(p_playlist->p_libvlc)->p_playlist = NULL;
+    libvlc_priv(p_libvlc)->p_playlist = NULL;
     barrier();  /* FIXME is that correct ? */
 
     vlc_object_release( p_playlist );
@@ -1298,13 +1297,16 @@ static int GetFilenames( libvlc_int_t *p_vlc, int i_argc, const char *ppsz_argv[
 
         /* TODO: write an internal function of this one, to avoid
          *       unnecessary lookups. */
+        char *mrl = make_URI( ppsz_argv[i_opt] );
+        if( !mrl )
+            continue;
 
         playlist_t *p_playlist = pl_Hold( p_vlc );
-        playlist_AddExt( p_playlist, ppsz_argv[i_opt], NULL, PLAYLIST_INSERT,
-                         0, -1,
-                         i_options, ( i_options ? &ppsz_argv[i_opt + 1] : NULL ), VLC_INPUT_OPTION_TRUSTED,
-                         true, pl_Unlocked );
+        playlist_AddExt( p_playlist, mrl, NULL, PLAYLIST_INSERT,
+                0, -1, i_options, ( i_options ? &ppsz_argv[i_opt + 1] : NULL ),
+                VLC_INPUT_OPTION_TRUSTED, true, pl_Unlocked );
         pl_Release( p_vlc );
+        free( mrl );
     }
 
     return VLC_SUCCESS;
@@ -1406,17 +1408,16 @@ static void print_help_section( module_config_t *p_item, bool b_color, bool b_de
     if( !p_item ) return;
     if( b_color )
     {
-        utf8_fprintf( stdout, RED"   %s:\n"GRAY,
-                      p_item->psz_text );
+        utf8_fprintf( stdout, RED"   %s:\n"GRAY, _( p_item->psz_text ) );
         if( b_description && p_item->psz_longtext )
             utf8_fprintf( stdout, MAGENTA"   %s\n"GRAY,
-                          p_item->psz_longtext );
+                          _( p_item->psz_longtext ) );
     }
     else
     {
-        utf8_fprintf( stdout, "   %s:\n", p_item->psz_text );
+        utf8_fprintf( stdout, "   %s:\n", _( p_item->psz_text ) );
         if( b_description && p_item->psz_longtext )
-            utf8_fprintf( stdout, "   %s\n", p_item->psz_longtext );
+            utf8_fprintf( stdout, "   %s\n", _( p_item->psz_longtext ) );
     }
 }
 
@@ -1556,17 +1557,18 @@ static void Usage( libvlc_int_t *p_this, char const *psz_search )
         {
             if( b_color )
                 utf8_fprintf( stdout, "\n " GREEN "%s" GRAY " (%s)\n",
-                              p_parser->psz_longname,
-                               p_parser->psz_object_name );
+                              _( p_parser->psz_longname ),
+                              p_parser->psz_object_name );
             else
-                utf8_fprintf( stdout, "\n %s\n", p_parser->psz_longname );
+                utf8_fprintf( stdout, "\n %s\n", _( p_parser->psz_longname ) );
         }
         if( p_parser->psz_help )
         {
             if( b_color )
-                utf8_fprintf( stdout, CYAN" %s\n"GRAY, p_parser->psz_help );
+                utf8_fprintf( stdout, CYAN" %s\n"GRAY,
+                              _( p_parser->psz_help ) );
             else
-                utf8_fprintf( stdout, " %s\n", p_parser->psz_help );
+                utf8_fprintf( stdout, " %s\n",  _( p_parser->psz_help ) );
         }
 
         /* Print module options */
@@ -1600,17 +1602,19 @@ static void Usage( libvlc_int_t *p_this, char const *psz_search )
                 {
                     if( b_color )
                         utf8_fprintf( stdout, GREEN "\n %s\n" GRAY,
-                                      p_item->psz_text );
+                                      _( p_item->psz_text ) );
                     else
-                        utf8_fprintf( stdout, "\n %s\n", p_item->psz_text );
+                        utf8_fprintf( stdout, "\n %s\n",
+                                      _( p_item->psz_text ) );
                 }
                 if( b_description && p_item->psz_longtext )
                 {
                     if( b_color )
                         utf8_fprintf( stdout, CYAN " %s\n" GRAY,
-                                      p_item->psz_longtext );
+                                      _( p_item->psz_longtext ) );
                     else
-                        utf8_fprintf( stdout, " %s\n", p_item->psz_longtext );
+                        utf8_fprintf( stdout, " %s\n",
+                                      _( p_item->psz_longtext ) );
                 }
                 break;
 
@@ -1674,7 +1678,7 @@ static void Usage( libvlc_int_t *p_this, char const *psz_search )
                         if( i ) strcat( psz_buffer, ", " );
                         sprintf( psz_buffer + strlen(psz_buffer), "%i (%s)",
                                  p_item->pi_list[i],
-                                 p_item->ppsz_list_text[i] );
+                                 _( p_item->ppsz_list_text[i] ) );
                     }
                     psz_ket = "}";
                 }
@@ -1754,7 +1758,8 @@ static void Usage( libvlc_int_t *p_this, char const *psz_search )
             psz_spaces[i] = ' ';
 
             /* We wrap the rest of the output */
-            sprintf( psz_buffer, "%s%s", p_item->psz_text, psz_suf );
+            sprintf( psz_buffer, "%s%s", _( p_item->psz_text ),
+                     psz_suf );
             b_description_hack = b_description;
 
  description:
@@ -1846,7 +1851,8 @@ static void Usage( libvlc_int_t *p_this, char const *psz_search )
 
             if( b_description_hack && p_item->psz_longtext )
             {
-                sprintf( psz_buffer, "%s%s", p_item->psz_longtext, psz_suf );
+                sprintf( psz_buffer, "%s%s", _( p_item->psz_longtext ),
+                         psz_suf );
                 b_description_hack = false;
                 psz_spaces = psz_spaces_longtext;
                 utf8_fprintf( stdout, "%s", psz_spaces );
@@ -1903,12 +1909,9 @@ static void Usage( libvlc_int_t *p_this, char const *psz_search )
 static void ListModules( libvlc_int_t *p_this, bool b_verbose )
 {
     module_t *p_parser;
-    char psz_spaces[22];
 
     bool b_color = config_GetInt( p_this, "color" ) > 0;
 
-    memset( psz_spaces, ' ', 22 );
-
 #ifdef WIN32
     ShowConsole( true );
 #endif
@@ -1919,23 +1922,14 @@ static void ListModules( libvlc_int_t *p_this, bool b_verbose )
     /* Enumerate each module */
     for (size_t j = 0; (p_parser = list[j]) != NULL; j++)
     {
-        int i;
-
-        /* Nasty hack, but right now I'm too tired to think about a nice
-         * solution */
-        i = 22 - strlen( p_parser->psz_object_name ) - 1;
-        if( i < 0 ) i = 0;
-        psz_spaces[i] = 0;
-
         if( b_color )
-            utf8_fprintf( stdout, GREEN"  %s%s "WHITE"%s\n"GRAY,
+            utf8_fprintf( stdout, GREEN"  %-22s "WHITE"%s\n"GRAY,
                           p_parser->psz_object_name,
-                          psz_spaces,
-                          p_parser->psz_longname );
+                          _( p_parser->psz_longname ) );
         else
-            utf8_fprintf( stdout, "  %s%s %s\n",
+            utf8_fprintf( stdout, "  %-22s %s\n",
                           p_parser->psz_object_name,
-                          psz_spaces, p_parser->psz_longname );
+                          _( p_parser->psz_longname ) );
 
         if( b_verbose )
         {
@@ -1965,8 +1959,6 @@ static void ListModules( libvlc_int_t *p_this, bool b_verbose )
                                   p_parser->i_score );
             }
         }
-
-        psz_spaces[i] = ' ';
     }
     module_list_free (list);
 
@@ -2082,73 +2074,6 @@ static int ConsoleWidth( void )
     return i_width;
 }
 
-/*****************************************************************************
- * InitDeviceValues: initialize device values
- *****************************************************************************
- * This function inits the dvd, vcd and cd-audio values
- *****************************************************************************/
-static void InitDeviceValues( libvlc_int_t *p_vlc )
-{
-#ifdef HAVE_HAL
-    LibHalContext * ctx = NULL;
-    int i, i_devices;
-    char **devices = NULL;
-    char *block_dev = NULL;
-    dbus_bool_t b_dvd;
-
-    DBusConnection *p_connection = NULL;
-    DBusError       error;
-
-    ctx = libhal_ctx_new();
-    if( !ctx ) return;
-    dbus_error_init( &error );
-    p_connection = dbus_bus_get ( DBUS_BUS_SYSTEM, &error );
-    if( dbus_error_is_set( &error ) || !p_connection )
-    {
-        libhal_ctx_free( ctx );
-        dbus_error_free( &error );
-        return;
-    }
-    libhal_ctx_set_dbus_connection( ctx, p_connection );
-    if( libhal_ctx_init( ctx, &error ) )
-    {
-        if( ( devices = libhal_get_all_devices( ctx, &i_devices, NULL ) ) )
-        {
-            for( i = 0; i < i_devices; i++ )
-            {
-                if( !libhal_device_property_exists( ctx, devices[i],
-                                                "storage.cdrom.dvd", NULL ) )
-                {
-                    continue;
-                }
-                b_dvd = libhal_device_get_property_bool( ctx, devices[ i ],
-                                                 "storage.cdrom.dvd", NULL  );
-                block_dev = libhal_device_get_property_string( ctx,
-                                devices[ i ], "block.device" , NULL );
-                if( b_dvd )
-                {
-                    config_PutPsz( p_vlc, "dvd", block_dev );
-                }
-
-                config_PutPsz( p_vlc, "vcd", block_dev );
-                config_PutPsz( p_vlc, "cd-audio", block_dev );
-                libhal_free_string( block_dev );
-            }
-            libhal_free_string_array( devices );
-        }
-        libhal_ctx_shutdown( ctx, NULL );
-        dbus_connection_unref( p_connection );
-        libhal_ctx_free( ctx );
-    }
-    else
-    {
-        msg_Warn( p_vlc, "Unable to get HAL device properties" );
-    }
-#else
-    (void)p_vlc;
-#endif /* HAVE_HAL */
-}
-
 #include <vlc_avcodec.h>
 
 void vlc_avcodec_mutex (bool acquire)