X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Faccess%2Fdvdread.c;h=5edf909fb868641d8822a3eea9bcb826f244c6fb;hb=c9e7c34b0feccc2f3f8a8afa047e6363bfcae6d5;hp=3758fbf8d5d8a3ee41afbfa00767eaaa7e68ed60;hpb=d466fd4185ffd791413658e948205e2676d2f470;p=vlc diff --git a/modules/access/dvdread.c b/modules/access/dvdread.c index 3758fbf8d5..5edf909fb8 100644 --- a/modules/access/dvdread.c +++ b/modules/access/dvdread.c @@ -46,9 +46,7 @@ # include #endif -#include #include -#include #ifdef HAVE_DVDREAD_DVD_READER_H #include @@ -78,26 +76,6 @@ "Caching value for DVDs. " \ "This value should be set in milliseconds." ) -#define CSSMETHOD_TEXT N_("Method used by libdvdcss for decryption") -#define CSSMETHOD_LONGTEXT N_( \ - "Set the method used by libdvdcss for key decryption.\n" \ - "title: decrypted title key is guessed from the encrypted sectors of " \ - "the stream. Thus it should work with a file as well as the " \ - "DVD device. But it sometimes takes much time to decrypt a title " \ - "key and may even fail. With this method, the key is only checked "\ - "at the beginning of each title, so it won't work if the key " \ - "changes in the middle of a title.\n" \ - "disc: the disc key is first cracked, then all title keys can be " \ - "decrypted instantly, which allows us to check them often.\n" \ - "key: the same as \"disc\" if you don't have a file with player keys " \ - "at compilation time. If you do, the decryption of the disc key " \ - "will be faster with this method. It is the one that was used by " \ - "libcss.\n" \ - "The default method is: key.") - -static const char *const psz_css_list[] = { "title", "disc", "key" }; -static const char *const psz_css_list_text[] = { N_("title"), N_("Disc"), N_("Key") }; - static int Open ( vlc_object_t * ); static void Close( vlc_object_t * ); @@ -110,13 +88,9 @@ vlc_module_begin () ANGLE_LONGTEXT, false ) add_integer( "dvdread-caching", DEFAULT_PTS_DELAY / 1000, NULL, CACHING_TEXT, CACHING_LONGTEXT, true ) - add_string( "dvdread-css-method", NULL, NULL, CSSMETHOD_TEXT, - CSSMETHOD_LONGTEXT, true ) - change_string_list( psz_css_list, psz_css_list_text, 0 ) + add_obsolete_string( "dvdread-css-method" ) /* obsolete since 1.1.0 */ set_capability( "access_demux", 0 ) - add_shortcut( "dvd" ) - add_shortcut( "dvdread" ) - add_shortcut( "dvdsimple" ) + add_shortcut( "dvd", "dvdread", "dvdsimple" ) set_callbacks( Open, Close ) vlc_module_end () @@ -199,14 +173,14 @@ static int Open( vlc_object_t *p_this ) demux_t *p_demux = (demux_t*)p_this; demux_sys_t *p_sys; char *psz_name; - char *psz_dvdcss_env; dvd_reader_t *p_dvdread; ifo_handle_t *p_vmg_file; - if( !p_demux->psz_path || !*p_demux->psz_path ) + if( !p_demux->psz_file || !*p_demux->psz_file ) { /* Only when selected */ - if( !p_this->b_force ) return VLC_EGENERIC; + if( !p_demux->psz_access || !*p_demux->psz_access ) + return VLC_EGENERIC; psz_name = var_CreateGetString( p_this, "dvd" ); if( !psz_name ) @@ -215,35 +189,13 @@ static int Open( vlc_object_t *p_this ) } } else - psz_name = ToLocaleDup( p_demux->psz_path ); + psz_name = ToLocaleDup( p_demux->psz_file ); #ifdef WIN32 if( psz_name[0] && psz_name[1] == ':' && psz_name[2] == '\\' && psz_name[3] == '\0' ) psz_name[2] = '\0'; #endif - /* Override environment variable DVDCSS_METHOD with config option */ - psz_dvdcss_env = config_GetPsz( p_demux, "dvdread-css-method" ); - if( psz_dvdcss_env && *psz_dvdcss_env ) -#ifdef HAVE_SETENV - setenv( "DVDCSS_METHOD", psz_dvdcss_env, 1 ); -#else - { - /* FIXME: this create a small memory leak */ - char *psz_env; - psz_env = malloc( strlen("DVDCSS_METHOD=") + - strlen( psz_dvdcss_env ) + 1 ); - if( !psz_env ) - { - free( psz_dvdcss_env ); - return VLC_ENOMEM; - } - sprintf( psz_env, "%s%s", "DVDCSS_METHOD=", psz_dvdcss_env ); - putenv( psz_env ); - } -#endif - free( psz_dvdcss_env ); - /* Open dvdread */ if( !(p_dvdread = DVDOpen( psz_name )) ) { @@ -319,6 +271,11 @@ static void Close( vlc_object_t *p_this ) } } + /* Free the array of titles */ + for( int i = 0; i < p_sys->i_titles; i++ ) + vlc_input_title_Delete( p_sys->titles[i] ); + TAB_CLEAN( p_sys->i_titles, p_sys->titles ); + /* Close libdvdread */ if( p_sys->p_title ) DVDCloseFile( p_sys->p_title ); if( p_sys->p_vts_file ) ifoClose( p_sys->p_vts_file ); @@ -474,7 +431,7 @@ static int Control( demux_t *p_demux, int i_query, va_list args ) case DEMUX_GET_PTS_DELAY: pi64 = (int64_t*)va_arg( args, int64_t * ); - *pi64 = (int64_t)var_GetInteger( p_demux, "dvdread-caching" )*1000; + *pi64 = var_GetInteger( p_demux, "dvdread-caching" )*1000; return VLC_SUCCESS; /* TODO implement others */