vlc_messages.h
上传用户:riyaled888
上传日期:2009-03-27
资源大小:7338k
文件大小:6k
源码类别:

多媒体

开发平台:

MultiPlatform

  1. /*****************************************************************************
  2.  * messages.h: messages interface
  3.  * This library provides basic functions for threads to interact with user
  4.  * interface, such as message output.
  5.  *****************************************************************************
  6.  * Copyright (C) 1999, 2000, 2001, 2002 VideoLAN
  7.  * $Id: vlc_messages.h 6961 2004-03-05 17:34:23Z sam $
  8.  *
  9.  * Authors: Vincent Seguin <seguin@via.ecp.fr>
  10.  *          Samuel Hocevar <sam@zoy.org>
  11.  *
  12.  * This program is free software; you can redistribute it and/or modify
  13.  * it under the terms of the GNU General Public License as published by
  14.  * the Free Software Foundation; either version 2 of the License, or
  15.  * (at your option) any later version.
  16.  *
  17.  * This program is distributed in the hope that it will be useful,
  18.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  19.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  20.  * GNU General Public License for more details.
  21.  *
  22.  * You should have received a copy of the GNU General Public License
  23.  * along with this program; if not, write to the Free Software
  24.  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA.
  25.  *****************************************************************************/
  26. #include <stdarg.h>
  27. /**
  28.  * defgroup messages Messages
  29.  * This library provides basic functions for threads to interact with user
  30.  * interface, such as message output.
  31.  *
  32.  * @{
  33.  */
  34. /**
  35.  * Store a single message.
  36.  */
  37. typedef struct
  38. {
  39.     int     i_type;                             /**< message type, see below */
  40.     int     i_object_id;
  41.     int     i_object_type;
  42.     char *  psz_module;
  43.     char *  psz_msg;                                 /**< the message itself */
  44. #if 0
  45.     mtime_t date;                                     /* date of the message */
  46.     char *  psz_file;               /* file in which the function was called */
  47.     char *  psz_function;     /* function from which the function was called */
  48.     int     i_line;                 /* line at which the function was called */
  49. #endif
  50. } msg_item_t;
  51. /* Message types */
  52. /** standard messages */
  53. #define VLC_MSG_INFO  0
  54. /** error messages */
  55. #define VLC_MSG_ERR   1
  56. /** warning messages */
  57. #define VLC_MSG_WARN  2
  58. /** debug messages */
  59. #define VLC_MSG_DBG   3
  60. /**
  61.  * Store all data requiered by messages interfaces.
  62.  */
  63. struct msg_bank_t
  64. {
  65.     /** Message queue lock */
  66.     vlc_mutex_t             lock;
  67.     vlc_bool_t              b_configured;
  68.     vlc_bool_t              b_overflow;
  69.     /* Message queue */
  70.     msg_item_t              msg[VLC_MSG_QSIZE];           /**< message queue */
  71.     int i_start;
  72.     int i_stop;
  73.     /* Subscribers */
  74.     int i_sub;
  75.     msg_subscription_t **pp_sub;
  76.     /* Logfile for WinCE */
  77. #ifdef UNDER_CE
  78.     FILE *logfile;
  79. #endif
  80. };
  81. /**
  82.  * Used by interface plugins which subscribe to the message bank.
  83.  */
  84. struct msg_subscription_t
  85. {
  86.     int   i_start;
  87.     int*  pi_stop;
  88.     msg_item_t*  p_msg;
  89.     vlc_mutex_t* p_lock;
  90. };
  91. /*****************************************************************************
  92.  * Prototypes
  93.  *****************************************************************************/
  94. VLC_EXPORT( void, __msg_Generic, ( vlc_object_t *, int, const char *, const char *, ... ) ATTRIBUTE_FORMAT( 4, 5 ) );
  95. VLC_EXPORT( void, __msg_GenericVa, ( vlc_object_t *, int, const char *, const char *, va_list args ) );
  96. VLC_EXPORT( void, __msg_Info,    ( vlc_object_t *, const char *, ... ) ATTRIBUTE_FORMAT( 2, 3 ) );
  97. VLC_EXPORT( void, __msg_Err,     ( vlc_object_t *, const char *, ... ) ATTRIBUTE_FORMAT( 2, 3 ) );
  98. VLC_EXPORT( void, __msg_Warn,    ( vlc_object_t *, const char *, ... ) ATTRIBUTE_FORMAT( 2, 3 ) );
  99. VLC_EXPORT( void, __msg_Dbg,    ( vlc_object_t *, const char *, ... ) ATTRIBUTE_FORMAT( 2, 3 ) );
  100. #ifdef HAVE_VARIADIC_MACROS
  101. #   define msg_Info( p_this, psz_format, args... ) 
  102.       __msg_Generic( VLC_OBJECT(p_this), VLC_MSG_INFO, MODULE_STRING, 
  103.                      psz_format, ## args )
  104. #   define msg_Err( p_this, psz_format, args... ) 
  105.       __msg_Generic( VLC_OBJECT(p_this), VLC_MSG_ERR, MODULE_STRING, 
  106.                      psz_format, ## args )
  107. #   define msg_Warn( p_this, psz_format, args... ) 
  108.       __msg_Generic( VLC_OBJECT(p_this), VLC_MSG_WARN, MODULE_STRING, 
  109.                      psz_format, ## args )
  110. #   define msg_Dbg( p_this, psz_format, args... ) 
  111.       __msg_Generic( VLC_OBJECT(p_this), VLC_MSG_DBG, MODULE_STRING, 
  112.                      psz_format, ## args )
  113. #elif defined(_MSC_VER) /* To avoid warnings and even errors with c++ files */
  114. inline void msg_Info( void *p_this, const char *psz_format, ... )
  115. {
  116.   va_list ap;
  117.   va_start( ap, psz_format );
  118.   __msg_GenericVa( ( vlc_object_t *)p_this, VLC_MSG_INFO, MODULE_STRING,
  119.                    psz_format, ap );
  120.   va_end(ap);
  121. }
  122. inline void msg_Err( void *p_this, const char *psz_format, ... )
  123. {
  124.   va_list ap;
  125.   va_start( ap, psz_format );
  126.   __msg_GenericVa( ( vlc_object_t *)p_this, VLC_MSG_ERR, MODULE_STRING,
  127.                    psz_format, ap );
  128.   va_end(ap);
  129. }
  130. inline void msg_Warn( void *p_this, const char *psz_format, ... )
  131. {
  132.   va_list ap;
  133.   va_start( ap, psz_format );
  134.   __msg_GenericVa( ( vlc_object_t *)p_this, VLC_MSG_WARN, MODULE_STRING,
  135.                    psz_format, ap );
  136.   va_end(ap);
  137. }
  138. inline void msg_Dbg( void *p_this, const char *psz_format, ... )
  139. {
  140.   va_list ap;
  141.   va_start( ap, psz_format );
  142.   __msg_GenericVa( ( vlc_object_t *)p_this, VLC_MSG_DBG, MODULE_STRING,
  143.                    psz_format, ap );
  144.   va_end(ap);
  145. }
  146. #else /* _MSC_VER */
  147. #   define msg_Info __msg_Info
  148. #   define msg_Err __msg_Err
  149. #   define msg_Warn __msg_Warn
  150. #   define msg_Dbg __msg_Dbg
  151. #endif /* HAVE_VARIADIC_MACROS */
  152. #define msg_Create(a) __msg_Create(VLC_OBJECT(a))
  153. #define msg_Flush(a) __msg_Flush(VLC_OBJECT(a))
  154. #define msg_Destroy(a) __msg_Destroy(VLC_OBJECT(a))
  155. void __msg_Create  ( vlc_object_t * );
  156. void __msg_Flush   ( vlc_object_t * );
  157. void __msg_Destroy ( vlc_object_t * );
  158. #define msg_Subscribe(a) __msg_Subscribe(VLC_OBJECT(a))
  159. #define msg_Unsubscribe(a,b) __msg_Unsubscribe(VLC_OBJECT(a),b)
  160. VLC_EXPORT( msg_subscription_t*, __msg_Subscribe, ( vlc_object_t * ) );
  161. VLC_EXPORT( void, __msg_Unsubscribe, ( vlc_object_t *, msg_subscription_t * ) );
  162. /**
  163.  * @}
  164.  */