]> git.sesse.net Git - vlc/commitdiff
* src/input/subtitles.c: made the autodetection fuzziness a config option.
authorDerk-Jan Hartman <hartman@videolan.org>
Sat, 11 Oct 2003 22:40:05 +0000 (22:40 +0000)
committerDerk-Jan Hartman <hartman@videolan.org>
Sat, 11 Oct 2003 22:40:05 +0000 (22:40 +0000)
* ALL:
  use a counter and pass this along to New_Subtitle, so we can add more
  than one subtitle file. This 'fixes' a problem where all subtitles got the
  same track_id and therefore were all (un)selected at the same time.

modules/demux/util/sub.c
modules/demux/util/sub.h
src/input/input.c
src/input/subtitles.c
src/libvlc.h

index 686d93e9cb83ab28bff28460e741abb2fdd7d046..37848087719aba0d1f2c01d71c4af111b36ebd7c 100644 (file)
@@ -2,7 +2,7 @@
  * sub.c
  *****************************************************************************
  * Copyright (C) 1999-2003 VideoLAN
- * $Id: sub.c,v 1.27 2003/10/08 21:03:36 gbazin Exp $
+ * $Id: sub.c,v 1.28 2003/10/11 22:40:04 hartman Exp $
  *
  * Authors: Laurent Aimar <fenrir@via.ecp.fr>
  *
@@ -43,7 +43,8 @@ static int  Open ( vlc_object_t *p_this );
 static int  sub_open ( subtitle_demux_t *p_sub,
                        input_thread_t  *p_input,
                        char  *psz_name,
-                       mtime_t i_microsecperframe );
+                       mtime_t i_microsecperframe,
+                       int i_track_id );
 static int  sub_demux( subtitle_demux_t *p_sub, mtime_t i_maxdate );
 static int  sub_seek ( subtitle_demux_t *p_sub, mtime_t i_date );
 static void sub_close( subtitle_demux_t *p_sub );
@@ -231,7 +232,8 @@ static struct
 static int  sub_open ( subtitle_demux_t *p_sub,
                        input_thread_t  *p_input,
                        char     *psz_name,
-                       mtime_t i_microsecperframe )
+                       mtime_t i_microsecperframe,
+                       int i_track_id )
 {
     text_t  txt;
     vlc_value_t val;
@@ -424,11 +426,11 @@ static int  sub_open ( subtitle_demux_t *p_sub,
     /* *** add subtitle ES *** */
     vlc_mutex_lock( &p_input->stream.stream_lock );
     p_sub->p_es = input_AddES( p_input, p_input->stream.p_selected_program,
-                               0xff,    // FIXME
+                               0xff - i_track_id,    /* FIXME */
                                SPU_ES, NULL, 0 );
     vlc_mutex_unlock( &p_input->stream.stream_lock );
 
-    p_sub->p_es->i_stream_id = 0xff;    // FIXME
+    p_sub->p_es->i_stream_id = 0xff - i_track_id;    /* FIXME */
     p_sub->p_es->i_fourcc    = VLC_FOURCC( 's','u','b','t' );
 
     p_sub->i_previously_selected = 0;
index 2db66657317eb03ac4911539f0fb0ccc1adde546..2ded18ff07b50746ace16cbf15165c82a6d90c45 100644 (file)
@@ -2,7 +2,7 @@
  * sub.h
  *****************************************************************************
  * Copyright (C) 2001-2003 VideoLAN
- * $Id: sub.h,v 1.7 2003/08/23 19:20:29 hartman Exp $
+ * $Id: sub.h,v 1.8 2003/10/11 22:40:05 hartman Exp $
  *
  * Authors: Laurent Aimar <fenrir@via.ecp.fr>
  * 
@@ -47,7 +47,8 @@ typedef struct subtitle_demux_s
     int     (*pf_open) ( struct subtitle_demux_s *p_sub, 
                          input_thread_t*p_input, 
                          char *psz_name,
-                         mtime_t i_microsecperframe );
+                         mtime_t i_microsecperframe,
+                         int i_track_id );
     int     (*pf_demux)( struct subtitle_demux_s *p_sub, mtime_t i_maxdate );
     int     (*pf_seek) ( struct subtitle_demux_s *p_sub, mtime_t i_date );
     void    (*pf_close)( struct subtitle_demux_s *p_sub );
@@ -89,7 +90,8 @@ typedef struct subtitle_demux_s
  *****************************************************************************/
 static inline subtitle_demux_t *subtitle_New( input_thread_t *p_input,
                                               char *psz_name,
-                                              mtime_t i_microsecperframe );
+                                              mtime_t i_microsecperframe,
+                                              int i_track_id );
 /*****************************************************************************
  * subtitle_Select: Select the related subtitle ES.
  *****************************************************************************/
@@ -127,7 +129,8 @@ static inline void subtitle_Close( subtitle_demux_t *p_sub );
 static inline 
     subtitle_demux_t *subtitle_New( input_thread_t *p_input,
                                     char *psz_name,
-                                    mtime_t i_microsecperframe )
+                                    mtime_t i_microsecperframe,
+                                    int i_track_id )
 {
     subtitle_demux_t *p_sub;
 
@@ -140,7 +143,8 @@ static inline
         p_sub->pf_open( p_sub,
                         p_input,
                         psz_name,
-                        i_microsecperframe ) >=0 )
+                        i_microsecperframe,
+                        i_track_id ) >=0 )
     {
         msg_Info( p_input, "subtitle started" );
 
index 77f47b924377b1845f0696ec2da33d8a0057ece3..4a15f9a81265c694f1555f2e729409d426b9f253 100644 (file)
@@ -4,7 +4,7 @@
  * decoders.
  *****************************************************************************
  * Copyright (C) 1998-2002 VideoLAN
- * $Id: input.c,v 1.246 2003/10/08 21:01:07 gbazin Exp $
+ * $Id: input.c,v 1.247 2003/10/11 22:40:05 hartman Exp $
  *
  * Authors: Christophe Massiot <massiot@via.ecp.fr>
  *
@@ -112,6 +112,7 @@ input_thread_t *__input_CreateThread( vlc_object_t *p_parent,
     var_Create( p_input, "spu-channel", VLC_VAR_INTEGER|VLC_VAR_DOINHERIT );
     var_Create( p_input, "sub-file", VLC_VAR_FILE | VLC_VAR_DOINHERIT );
     var_Create( p_input, "sub-autodetect-file", VLC_VAR_BOOL | VLC_VAR_DOINHERIT );
+    var_Create( p_input, "sub-autodetect-fuzzy", VLC_VAR_INTEGER | VLC_VAR_DOINHERIT );
 
     var_Create( p_input, "sout", VLC_VAR_STRING | VLC_VAR_DOINHERIT );
     var_Create( p_input, "sout-audio", VLC_VAR_BOOL | VLC_VAR_DOINHERIT );
@@ -729,7 +730,7 @@ static int InitThread( input_thread_t * p_input )
     var_Get( p_input, "sub-file", &val );
     if( val.psz_string && *val.psz_string )
     {
-        if( ( p_sub = subtitle_New( p_input, strdup(val.psz_string), i_microsecondperframe ) ) )
+        if( ( p_sub = subtitle_New( p_input, strdup(val.psz_string), i_microsecondperframe, 0 ) ) )
         {
             TAB_APPEND( p_input->p_sys->i_sub, p_input->p_sys->sub, p_sub );
             subtitle_Select( p_sub );
@@ -740,11 +741,12 @@ static int InitThread( input_thread_t * p_input )
     var_Get( p_input, "sub-autodetect-file", &val );
     if( val.b_bool )
     {
+        int i;
         char **tmp = subtitles_Detect( p_input, "", p_input->psz_source );
         char **tmp2 = tmp;
-        while (*tmp2)
+        for( i = 0; *tmp2 != NULL; i++ )
         {
-            if( ( p_sub = subtitle_New( p_input, strdup(*tmp2++), i_microsecondperframe ) ) )
+            if( ( p_sub = subtitle_New( p_input, strdup(*tmp2++), i_microsecondperframe, i ) ) )
             {
                 TAB_APPEND( p_input->p_sys->i_sub, p_input->p_sys->sub, p_sub );
             }
index f217ca7f8b2a34c3cc5fb038f91b22c67a30e543..85a5c7e8675bb168326367f46a7f90a6ad0f8f30 100644 (file)
@@ -2,7 +2,7 @@
  * subtitles.c
  *****************************************************************************
  * Copyright (C) 2003 VideoLAN
- * $Id: subtitles.c,v 1.3 2003/10/02 00:16:05 hartman Exp $
+ * $Id: subtitles.c,v 1.4 2003/10/11 22:40:05 hartman Exp $
  *
  * Authors: Derk-Jan Hartman <hartman at videolan.org>
  * This is adapted code from the GPL'ed MPlayer (http://mplayerhq.hu)
  */
 #define MAX_SUBTITLE_FILES 128
 
-/**
- * This determines how fuzzy the returned results will be.
- *
- * Currently set to 3, other options are:
- * 0 = nothing
- * 1 = any subtitle file
- * 2 = any sub file containing movie name
- * 3 = sub file matching movie name exactly
- * 4 = sub file matching movie name with additional chars 
- */
-#define SUB_FUZZY 3
 
 /**
  * The possible extentions for subtitle files we support
@@ -173,6 +162,7 @@ char** subtitles_Detect( input_thread_t *p_this, char *psz_path, char *psz_fname
     /* variables to be used for derivatives FILE *f */
     char *tmp_fname_noext, *tmp_fname_trim, *tmp_fname_ext, *tmpresult;
  
+    vlc_value_t fuzzy;
     int len, i, j, i_sub_count;
     subfn *result; /* unsorted results */
     char **result2; /* sorted results */
@@ -217,7 +207,9 @@ char** subtitles_Detect( input_thread_t *p_this, char *psz_path, char *psz_fname
 
     strcpy_strip_ext( f_fname_noext, f_fname );
     strcpy_trim( f_fname_trim, f_fname_noext );
-
+    var_Get( p_this, "sub-autodetect-fuzzy", &fuzzy );
+    
+    
     for( j = 0; j <= 1; j++)
     {
        d = opendir( j == 0 ? f_dir : psz_path );
@@ -272,8 +264,8 @@ char** subtitles_Detect( input_thread_t *p_this, char *psz_path, char *psz_fname
                        /* doesn't contain the movie name */
                        if( j == 0 ) i_prio = 1;
                    }
-
-                   if( i_prio >= SUB_FUZZY )
+                    
+                   if( i_prio >= fuzzy.i_int )
                     {
                         sprintf( tmpresult, "%s%s", j == 0 ? f_dir : psz_path, de->d_name );
                         msg_Dbg( p_this, "autodetected subtitle: %s with priority %d", de->d_name, i_prio );
index 164335be54b56fd6673a857a5b957d2a0241dd03..860821836f446271e74315e538f5782e4712ea13 100644 (file)
@@ -2,7 +2,7 @@
  * libvlc.h: main libvlc header
  *****************************************************************************
  * Copyright (C) 1998-2002 VideoLAN
- * $Id: libvlc.h,v 1.94 2003/10/08 19:40:42 gbazin Exp $
+ * $Id: libvlc.h,v 1.95 2003/10/11 22:40:05 hartman Exp $
  *
  * Authors: Vincent Seguin <seguin@via.ecp.fr>
  *          Samuel Hocevar <sam@zoy.org>
@@ -149,7 +149,7 @@ static char *ppsz_language[] = { "auto", "en", "en_GB", "de", "fr", "it", "ja",
 
 #define AUDIO_FILTER_TEXT N_("Audio filters")
 #define AUDIO_FILTER_LONGTEXT N_( \
-    "This allows you to add audio postprocessing filters, to modify" \
+    "This allows you to add audio postprocessing filters, to modify " \
     "the sound.")
 
 #define HEADPHONE_TEXT N_("Headphone virtual spatialization effect")
@@ -291,6 +291,16 @@ static char *ppsz_language[] = { "auto", "en", "en_GB", "de", "fr", "it", "ja",
     "Automatically detect a subtitle file, if no subtitle filename is " \
     "specified."
 
+#define SUB_FUZZY_TEXT N_("Subtitle autodection fuzziness")
+#define SUB_FUZZY_LONGTEXT \
+    "This determines how fuzzy subtitle and movie filenaming matching " \
+    "will be. Options are:\n" \
+    "0 = no subtitles autodetected\n" \
+    "1 = any subtitle file\n" \
+    "2 = any subtitle file containing the movie name\n" \
+    "3 = subtitle file matching the movie name with additional chars\n" \
+    "4 = subtitle file matching the movie name exactly"
+
 #define SUB_FILE_TEXT N_("Use subtitle file")
 #define SUB_FILE_LONGTEXT \
     "Load this subtitle file. To be used when autodetect cannot detect " \
@@ -637,6 +647,8 @@ vlc_module_begin();
                  INPUT_SUBT_TEXT, INPUT_SUBT_LONGTEXT, VLC_TRUE );
     add_bool( "sub-autodetect-file", VLC_TRUE, NULL,
                  SUB_AUTO_TEXT, SUB_AUTO_LONGTEXT, VLC_FALSE );
+    add_integer( "sub-autodetect-fuzzy", 3, NULL,
+                 SUB_FUZZY_TEXT, SUB_FUZZY_LONGTEXT, VLC_TRUE );
     add_file( "sub-file", NULL, NULL,
                  SUB_FILE_TEXT, SUB_FILE_LONGTEXT, VLC_TRUE );