vlc_interface.h
上传用户:kjfoods
上传日期:2020-07-06
资源大小:29949k
文件大小:9k
源码类别:

midi

开发平台:

Unix_Linux

  1. /*****************************************************************************
  2.  * vlc_interface.h: interface access for other threads
  3.  * This library provides basic functions for threads to interact with user
  4.  * interface, such as message output.
  5.  *****************************************************************************
  6.  * Copyright (C) 1999, 2000 the VideoLAN team
  7.  * $Id: 429adcaca65b9150bfb2c843b0e69c3c7170aaae $
  8.  *
  9.  * Authors: Vincent Seguin <seguin@via.ecp.fr>
  10.  *
  11.  * This program is free software; you can redistribute it and/or modify
  12.  * it under the terms of the GNU General Public License as published by
  13.  * the Free Software Foundation; either version 2 of the License, or
  14.  * (at your option) any later version.
  15.  *
  16.  * This program is distributed in the hope that it will be useful,
  17.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  18.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  19.  * GNU General Public License for more details.
  20.  *
  21.  * You should have received a copy of the GNU General Public License
  22.  * along with this program; if not, write to the Free Software
  23.  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
  24.  *****************************************************************************/
  25. #ifndef VLC_INTF_H_
  26. #define VLC_INTF_H_
  27. # ifdef __cplusplus
  28. extern "C" {
  29. # endif
  30. typedef struct intf_dialog_args_t intf_dialog_args_t;
  31. /**
  32.  * file
  33.  * This file contains structures and function prototypes for
  34.  * interface management in vlc
  35.  */
  36. /**
  37.  * defgroup vlc_interface Interface
  38.  * These functions and structures are for interface management
  39.  * @{
  40.  */
  41. /** Describe all interface-specific data of the interface thread */
  42. struct intf_thread_t
  43. {
  44.     VLC_COMMON_MEMBERS
  45.     /* Thread properties and locks */
  46. #if defined( __APPLE__ ) || defined( WIN32 )
  47.     bool          b_should_run_on_first_thread;
  48. #endif
  49.     /* Specific interfaces */
  50.     intf_sys_t *        p_sys;                          /** system interface */
  51.     char *              psz_intf;                    /** intf name specified */
  52.     /** Interface module */
  53.     module_t *   p_module;
  54.     void      ( *pf_run )    ( intf_thread_t * ); /** Run function */
  55.     /** Specific for dialogs providers */
  56.     void ( *pf_show_dialog ) ( intf_thread_t *, int, int,
  57.                                intf_dialog_args_t * );
  58.     config_chain_t *p_cfg;
  59. };
  60. /** brief Arguments passed to a dialogs provider
  61.  *  This describes the arguments passed to the dialogs provider. They are
  62.  *  mainly used with INTF_DIALOG_FILE_GENERIC.
  63.  */
  64. struct intf_dialog_args_t
  65. {
  66.     intf_thread_t *p_intf;
  67.     char *psz_title;
  68.     char **psz_results;
  69.     int  i_results;
  70.     void (*pf_callback) ( intf_dialog_args_t * );
  71.     void *p_arg;
  72.     /* Specifically for INTF_DIALOG_FILE_GENERIC */
  73.     char *psz_extensions;
  74.     bool b_save;
  75.     bool b_multiple;
  76.     /* Specific to INTF_DIALOG_INTERACTION */
  77.     struct interaction_dialog_t *p_dialog;
  78. };
  79. /*****************************************************************************
  80.  * Prototypes
  81.  *****************************************************************************/
  82. #define intf_Create(a,b) __intf_Create(VLC_OBJECT(a),b)
  83. VLC_EXPORT( intf_thread_t *, __intf_Create,     ( vlc_object_t *, const char * ) );
  84. VLC_EXPORT( int,               intf_RunThread,  ( intf_thread_t * ) );
  85. VLC_EXPORT( void,              intf_StopThread, ( intf_thread_t * ) );
  86. #define intf_Eject(a,b) __intf_Eject(VLC_OBJECT(a),b)
  87. VLC_EXPORT( int, __intf_Eject, ( vlc_object_t *, const char * ) );
  88. VLC_EXPORT( void, libvlc_Quit, ( libvlc_int_t * ) );
  89. /*@}*/
  90. /*****************************************************************************
  91.  * Macros
  92.  *****************************************************************************/
  93. #if defined( WIN32 ) && !defined( UNDER_CE )
  94. #    define CONSOLE_INTRO_MSG 
  95.          if( !getenv( "PWD" ) || !getenv( "PS1" ) ) /* detect cygwin shell */ 
  96.          { 
  97.          AllocConsole(); 
  98.          freopen( "CONOUT$", "w", stdout ); 
  99.          freopen( "CONOUT$", "w", stderr ); 
  100.          freopen( "CONIN$", "r", stdin ); 
  101.          } 
  102.          msg_Info( p_intf, "%s", COPYRIGHT_MESSAGE ); 
  103.          msg_Info( p_intf, _("nWarning: if you can't access the GUI " 
  104.                              "anymore, open a command-line window, go to the " 
  105.                              "directory where you installed VLC and run " 
  106.                              ""vlc -I qt"n") )
  107. #else
  108. #    define CONSOLE_INTRO_MSG
  109. #endif
  110. /* Interface dialog ids for dialog providers */
  111. typedef enum vlc_dialog {
  112.     INTF_DIALOG_FILE_SIMPLE = 1,
  113.     INTF_DIALOG_FILE,
  114.     INTF_DIALOG_DISC,
  115.     INTF_DIALOG_NET,
  116.     INTF_DIALOG_CAPTURE,
  117.     INTF_DIALOG_SAT,
  118.     INTF_DIALOG_DIRECTORY,
  119.     INTF_DIALOG_STREAMWIZARD,
  120.     INTF_DIALOG_WIZARD,
  121.     INTF_DIALOG_PLAYLIST,
  122.     INTF_DIALOG_MESSAGES,
  123.     INTF_DIALOG_FILEINFO,
  124.     INTF_DIALOG_PREFS,
  125.     INTF_DIALOG_BOOKMARKS,
  126.     INTF_DIALOG_EXTENDED,
  127.     INTF_DIALOG_POPUPMENU = 20,
  128.     INTF_DIALOG_AUDIOPOPUPMENU,
  129.     INTF_DIALOG_VIDEOPOPUPMENU,
  130.     INTF_DIALOG_MISCPOPUPMENU,
  131.     INTF_DIALOG_FILE_GENERIC = 30,
  132.     INTF_DIALOG_INTERACTION = 50,
  133.     INTF_DIALOG_UPDATEVLC = 90,
  134.     INTF_DIALOG_VLM,
  135.     INTF_DIALOG_EXIT = 99
  136. } vlc_dialog_t;
  137. /* Useful text messages shared by interfaces */
  138. #define INTF_ABOUT_MSG LICENSE_MSG
  139. #define EXTENSIONS_AUDIO "*.a52;*.aac;*.ac3;*.ape;*.dts;*.flac;*.it;" 
  140.                          "*.m4a;*.m4p;*.mka;*.mlp;*.mod;*.mp1;*.mp2;*.mp3;" 
  141.                          "*.oga;*.ogg;*.oma;*.s3m;*.spx;*.tta;" 
  142.                          "*.wav;*.wma;*.wv;*.xm"
  143. #define EXTENSIONS_VIDEO "*.asf;*.avi;*.divx;*.dv;*.flv;*.gxf;*.iso;*.m1v;*.m2v;" 
  144.                          "*.m2t;*.m2ts;*.m4v;*.mkv;*.mov;*.mp2;*.mp4;*.mpeg;*.mpeg1;" 
  145.                          "*.mpeg2;*.mpeg4;*.mpg;*.mts;*.mxf;*.nuv;" 
  146.                          "*.ogg;*.ogm;*.ogv;*.ogx;*.ps;" 
  147.                          "*.rec;*.rm;*.rmvb;*.tod;*.ts;*.vob;*.wmv"
  148. #define EXTENSIONS_PLAYLIST "*.asx;*.b4s;*.ifo;*.m3u;*.m3u8;*.pls;*.ram;*.vlc;*.xspf"
  149. #define EXTENSIONS_MEDIA EXTENSIONS_VIDEO ";" EXTENSIONS_AUDIO ";" 
  150.                           EXTENSIONS_PLAYLIST
  151. #define EXTENSIONS_SUBTITLE "*.cdg;*.idx;*.srt;*.sub;*.utf;*.ass;*.ssa;*.aqt;" 
  152.                             "*.jss;*.psb;*.rt;*.smi"
  153. /** defgroup vlc_interaction Interaction
  154.  * ingroup vlc_interface
  155.  * Interaction between user and modules
  156.  * @{
  157.  */
  158. /**
  159.  * This structure describes a piece of interaction with the user
  160.  */
  161. typedef struct interaction_dialog_t
  162. {
  163.     int             i_type;             ///< Type identifier
  164.     char           *psz_title;          ///< Title
  165.     char           *psz_description;    ///< Descriptor string
  166.     char           *psz_default_button;  ///< default button title (~OK)
  167.     char           *psz_alternate_button;///< alternate button title (~NO)
  168.     /// other button title (optional,~Cancel)
  169.     char           *psz_other_button;
  170.     char           *psz_returned[1];    ///< returned responses from the user
  171.     vlc_value_t     val;                ///< value coming from core for dialogue
  172.     int             i_timeToGo;         ///< time (in sec) until shown progress is finished
  173.     bool      b_cancelled;        ///< was the dialogue cancelled ?
  174.     void *          p_private;          ///< Private interface data
  175.     int             i_status;           ///< Dialog status;
  176.     int             i_action;           ///< Action to perform;
  177.     int             i_flags;            ///< Misc flags
  178.     int             i_return;           ///< Return status
  179.     vlc_object_t   *p_parent;           ///< The vlc object that asked
  180.                                         //for interaction
  181.     intf_thread_t  *p_interface;
  182.     vlc_mutex_t    *p_lock;
  183. } interaction_dialog_t;
  184. /**
  185.  * Possible flags . Dialog types
  186.  */
  187. #define DIALOG_GOT_ANSWER           0x01
  188. #define DIALOG_YES_NO_CANCEL        0x02
  189. #define DIALOG_LOGIN_PW_OK_CANCEL   0x04
  190. #define DIALOG_PSZ_INPUT_OK_CANCEL  0x08
  191. #define DIALOG_BLOCKING_ERROR       0x10
  192. #define DIALOG_NONBLOCKING_ERROR    0x20
  193. #define DIALOG_USER_PROGRESS        0x80
  194. #define DIALOG_INTF_PROGRESS        0x100
  195. /** Possible return codes */
  196. enum
  197. {
  198.     DIALOG_OK_YES,
  199.     DIALOG_NO,
  200.     DIALOG_CANCELLED
  201. };
  202. /** Possible status  */
  203. enum
  204. {
  205.     ANSWERED_DIALOG,            ///< Got "answer"
  206.     DESTROYED_DIALOG,           ///< Interface has destroyed it
  207. };
  208. /** Possible actions */
  209. enum
  210. {
  211.     INTERACT_NEW,
  212.     INTERACT_UPDATE,
  213.     INTERACT_HIDE,
  214.     INTERACT_DESTROY
  215. };
  216. #define intf_UserStringInput( a, b, c, d ) (VLC_OBJECT(a),b,c,d, VLC_EGENERIC)
  217. #define interaction_Register( t ) (t, VLC_EGENERIC)
  218. #define interaction_Unregister( t ) (t, VLC_EGENERIC)
  219. /** @} */
  220. /** @} */
  221. # ifdef __cplusplus
  222. }
  223. # endif
  224. #endif