/***************************************************************************** * dvd.c : DVD input module for vlc ***************************************************************************** * Copyright (C) 2000 VideoLAN * $Id: dvd.c,v 1.7 2001/04/15 04:19:57 sam Exp $ * * Authors: Samuel Hocevar * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. *****************************************************************************/ /***************************************************************************** * Preamble *****************************************************************************/ #include "defs.h" #ifdef HAVE_CSS #define MODULE_NAME dvd #else /* HAVE_CSS */ #define MODULE_NAME dvdnocss #endif /* HAVE_CSS */ #include "modules_inner.h" #include /* malloc(), free() */ #include /* strdup() */ #include "config.h" #include "common.h" /* boolean_t, byte_t */ #include "threads.h" #include "mtime.h" #include "modules.h" /***************************************************************************** * Build configuration tree. *****************************************************************************/ MODULE_CONFIG_START ADD_WINDOW( "Configuration for DVD module" ) ADD_COMMENT( "foobar !" ) MODULE_CONFIG_END /***************************************************************************** * Capabilities defined in the other files. *****************************************************************************/ void _M( input_getfunctions )( function_list_t * p_function_list ); /***************************************************************************** * InitModule: get the module structure and configuration. ***************************************************************************** * We have to fill psz_name, psz_longname and psz_version. These variables * will be strdup()ed later by the main application because the module can * be unloaded later to save memory, and we want to be able to access this * data even after the module has been unloaded. *****************************************************************************/ MODULE_INIT { p_module->psz_name = MODULE_STRING; #ifdef HAVE_CSS p_module->psz_longname = "full DVD input module with CSS decryption"; #else /* HAVE_CSS */ p_module->psz_longname = "DVD input module, CSS decryption disabled"; #endif /* HAVE_CSS */ p_module->psz_version = VERSION; p_module->i_capabilities = MODULE_CAPABILITY_NULL | MODULE_CAPABILITY_INPUT; return( 0 ); } /***************************************************************************** * ActivateModule: set the module to an usable state. ***************************************************************************** * This function fills the capability functions and the configuration * structure. Once ActivateModule() has been called, the i_usage can * be set to 0 and calls to NeedModule() be made to increment it. To unload * the module, one has to wait until i_usage == 0 and call DeactivateModule(). *****************************************************************************/ MODULE_ACTIVATE { p_module->p_functions = malloc( sizeof( module_functions_t ) ); if( p_module->p_functions == NULL ) { return( -1 ); } _M( input_getfunctions )( &p_module->p_functions->input ); p_module->p_config = p_config; return( 0 ); } /***************************************************************************** * DeactivateModule: make sure the module can be unloaded. ***************************************************************************** * This function must only be called when i_usage == 0. If it successfully * returns, i_usage can be set to -1 and the module unloaded. Be careful to * lock usage_lock during the whole process. *****************************************************************************/ MODULE_DEACTIVATE { free( p_module->p_functions ); return( 0 ); }