* src/input/subtitles.c: made the autodetection fuzziness a config option.

* 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.
This commit is contained in:
Derk-Jan Hartman 2003-10-11 22:40:05 +00:00
parent b6990fe688
commit b841a87b2a
5 changed files with 43 additions and 31 deletions

View 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;

View 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" );

View 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 );
}

View 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)
@ -49,17 +49,6 @@
*/
#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 );

View 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 );