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

midi

开发平台:

Unix_Linux

  1. /*****************************************************************************
  2.  * common.h: common definitions
  3.  * Collection of useful common types and macros definitions
  4.  *****************************************************************************
  5.  * Copyright (C) 1998-2005 the VideoLAN team
  6.  * $Id: 6f4677bb7935bfc8294c242c82c7d75d2e7fe21f $
  7.  *
  8.  * Authors: Samuel Hocevar <sam@via.ecp.fr>
  9.  *          Vincent Seguin <seguin@via.ecp.fr>
  10.  *          Gildas Bazin <gbazin@videolan.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., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
  25.  *****************************************************************************/
  26. /**
  27.  * file
  28.  * This file is a collection of common definitions and types
  29.  */
  30. #ifndef VLC_COMMON_H
  31. # define VLC_COMMON_H 1
  32. /*****************************************************************************
  33.  * Required vlc headers
  34.  *****************************************************************************/
  35. #if defined( _MSC_VER )
  36. #   pragma warning( disable : 4244 )
  37. #endif
  38. #include "vlc_config.h"
  39. /*****************************************************************************
  40.  * Required system headers
  41.  *****************************************************************************/
  42. #include <stdlib.h>
  43. #include <stdarg.h>
  44. #include <string.h>
  45. #include <stdio.h>
  46. #include <inttypes.h>
  47. #include <stddef.h>
  48. #ifndef __cplusplus
  49. # include <stdbool.h>
  50. #endif
  51. /* Try to fix format strings for all versions of mingw and mingw64 */
  52. #if defined( _WIN32 ) && defined( __USE_MINGW_ANSI_STDIO )
  53.  #undef PRId64
  54.  #define PRId64 "lld"
  55.  #undef PRIi64
  56.  #define PRIi64 "lli"
  57.  #undef PRIu64
  58.  #define PRIu64 "llu"
  59.  #undef PRIo64
  60.  #define PRIo64 "llo"
  61.  #undef PRIx64
  62.  #define PRIx64 "llx"
  63.  #define snprintf        __mingw_snprintf
  64.  #define vsnprintf       __mingw_vsnprintf
  65. #endif
  66. /* Format string sanity checks */
  67. #ifdef __GNUC__
  68. #   if defined( _WIN32 ) && (__GNUC__ > 4 || ( __GNUC__ == 4 && __GNUC_MINOR__ >= 4 ) )
  69. #     define LIBVLC_FORMAT(x,y) __attribute__ ((format(gnu_printf,x,y)))
  70. #   else
  71. #     define LIBVLC_FORMAT(x,y) __attribute__ ((format(printf,x,y)))
  72. #   endif
  73. #   define LIBVLC_USED __attribute__ ((warn_unused_result))
  74. #else
  75. #   define LIBVLC_FORMAT(x,y)
  76. #   define LIBVLC_USED
  77. #endif
  78. /*****************************************************************************
  79.  * Basic types definitions
  80.  *****************************************************************************/
  81. #if defined( WIN32 ) || defined( UNDER_CE )
  82. #   include <malloc.h>
  83. #   ifndef PATH_MAX
  84. #       define PATH_MAX MAX_PATH
  85. #   endif
  86. #endif
  87. /* Counter for statistics and profiling */
  88. typedef unsigned long       count_t;
  89. /* Audio volume */
  90. typedef uint16_t            audio_volume_t;
  91. /**
  92.  * High precision date or time interval
  93.  *
  94.  * Store a high precision date or time interval. The maximum precision is the
  95.  * microsecond, and a 64 bits integer is used to avoid overflows (maximum
  96.  * time interval is then 292271 years, which should be long enough for any
  97.  * video). Dates are stored as microseconds since a common date (usually the
  98.  * epoch). Note that date and time intervals can be manipulated using regular
  99.  * arithmetic operators, and that no special functions are required.
  100.  */
  101. typedef int64_t mtime_t;
  102. /**
  103.  * The vlc_fourcc_t type.
  104.  *
  105.  * See http://www.webartz.com/fourcc/ for a very detailed list.
  106.  */
  107. typedef uint32_t vlc_fourcc_t;
  108. #ifdef WORDS_BIGENDIAN
  109. #   define VLC_FOURCC( a, b, c, d ) 
  110.         ( ((uint32_t)d) | ( ((uint32_t)c) << 8 ) 
  111.            | ( ((uint32_t)b) << 16 ) | ( ((uint32_t)a) << 24 ) )
  112. #   define VLC_TWOCC( a, b ) 
  113.         ( (uint16_t)(b) | ( (uint16_t)(a) << 8 ) )
  114. #else
  115. #   define VLC_FOURCC( a, b, c, d ) 
  116.         ( ((uint32_t)a) | ( ((uint32_t)b) << 8 ) 
  117.            | ( ((uint32_t)c) << 16 ) | ( ((uint32_t)d) << 24 ) )
  118. #   define VLC_TWOCC( a, b ) 
  119.         ( (uint16_t)(a) | ( (uint16_t)(b) << 8 ) )
  120. #endif
  121. /**
  122.  * Translate a vlc_fourcc into its string representation. This function
  123.  * assumes there is enough room in psz_fourcc to store 4 characters in.
  124.  *
  125.  * param fcc a vlc_fourcc_t
  126.  * param psz_fourcc string to store string representation of vlc_fourcc in
  127.  */
  128. static inline void __vlc_fourcc_to_char( vlc_fourcc_t fcc, char *psz_fourcc )
  129. {
  130.     memcpy( psz_fourcc, &fcc, 4 );
  131. }
  132. #define vlc_fourcc_to_char( a, b ) 
  133.     __vlc_fourcc_to_char( (vlc_fourcc_t)(a), (char *)(b) )
  134. /*****************************************************************************
  135.  * Classes declaration
  136.  *****************************************************************************/
  137. /* Internal types */
  138. typedef struct vlc_list_t vlc_list_t;
  139. typedef struct vlc_object_t vlc_object_t;
  140. typedef struct libvlc_int_t libvlc_int_t;
  141. typedef struct date_t date_t;
  142. typedef struct dict_entry_t dict_entry_t;
  143. typedef struct dict_t dict_t;
  144. /* Playlist */
  145. /* FIXME */
  146. /**
  147.  * Playlist commands
  148.  */
  149. typedef enum {
  150.     PLAYLIST_PLAY,      /**< No arg.                            res=can fail*/
  151.     PLAYLIST_VIEWPLAY,  /**< arg1= playlist_item_t*,*/
  152.                         /**  arg2 = playlist_item_t*          , res=can fail */
  153.     PLAYLIST_PAUSE,     /**< No arg                             res=can fail*/
  154.     PLAYLIST_STOP,      /**< No arg                             res=can fail*/
  155.     PLAYLIST_SKIP,      /**< arg1=int,                          res=can fail*/
  156. } playlist_command_t;
  157. typedef struct playlist_t playlist_t;
  158. typedef struct playlist_item_t playlist_item_t;
  159. typedef struct playlist_view_t playlist_view_t;
  160. typedef struct playlist_export_t playlist_export_t;
  161. typedef struct services_discovery_t services_discovery_t;
  162. typedef struct services_discovery_sys_t services_discovery_sys_t;
  163. typedef struct playlist_add_t playlist_add_t;
  164. /* Modules */
  165. typedef struct module_bank_t module_bank_t;
  166. typedef struct module_t module_t;
  167. typedef struct module_config_t module_config_t;
  168. typedef struct module_symbols_t module_symbols_t;
  169. typedef struct module_cache_t module_cache_t;
  170. typedef struct config_category_t config_category_t;
  171. /* Interface */
  172. typedef struct intf_thread_t intf_thread_t;
  173. typedef struct intf_sys_t intf_sys_t;
  174. typedef struct intf_msg_t intf_msg_t;
  175. typedef struct user_widget_t user_widget_t;
  176. /* Input */
  177. typedef struct input_thread_t input_thread_t;
  178. typedef struct input_thread_sys_t input_thread_sys_t;
  179. typedef struct input_item_t input_item_t;
  180. typedef struct access_t access_t;
  181. typedef struct access_sys_t access_sys_t;
  182. typedef struct stream_t     stream_t;
  183. typedef struct stream_sys_t stream_sys_t;
  184. typedef struct demux_t  demux_t;
  185. typedef struct demux_meta_t demux_meta_t;
  186. typedef struct demux_sys_t demux_sys_t;
  187. typedef struct es_out_t     es_out_t;
  188. typedef struct es_out_id_t  es_out_id_t;
  189. typedef struct es_out_sys_t es_out_sys_t;
  190. typedef struct es_descriptor_t es_descriptor_t;
  191. typedef struct seekpoint_t seekpoint_t;
  192. typedef struct info_t info_t;
  193. typedef struct info_category_t info_category_t;
  194. typedef struct input_attachment_t input_attachment_t;
  195. /* Format */
  196. typedef struct audio_format_t audio_format_t;
  197. typedef struct video_format_t video_format_t;
  198. typedef struct subs_format_t subs_format_t;
  199. typedef struct es_format_t es_format_t;
  200. typedef struct video_palette_t video_palette_t;
  201. /* Audio */
  202. typedef struct aout_instance_t aout_instance_t;
  203. typedef struct aout_sys_t aout_sys_t;
  204. typedef struct aout_fifo_t aout_fifo_t;
  205. typedef struct aout_input_t aout_input_t;
  206. typedef struct aout_buffer_t aout_buffer_t;
  207. typedef audio_format_t audio_sample_format_t;
  208. typedef struct audio_date_t audio_date_t;
  209. typedef struct aout_filter_t aout_filter_t;
  210. /* Video */
  211. typedef struct vout_thread_t vout_thread_t;
  212. typedef struct vout_sys_t vout_sys_t;
  213. typedef video_format_t video_frame_format_t;
  214. typedef struct picture_t picture_t;
  215. typedef struct picture_sys_t picture_sys_t;
  216. typedef struct picture_heap_t picture_heap_t;
  217. /* Subpictures */
  218. typedef struct spu_t spu_t;
  219. typedef struct subpicture_t subpicture_t;
  220. typedef struct subpicture_sys_t subpicture_sys_t;
  221. typedef struct subpicture_region_t subpicture_region_t;
  222. typedef struct text_style_t text_style_t;
  223. typedef struct image_handler_t image_handler_t;
  224. /* Stream output */
  225. typedef struct sout_instance_t sout_instance_t;
  226. typedef struct sout_instance_sys_t sout_instance_sys_t;
  227. typedef struct sout_input_t sout_input_t;
  228. typedef struct sout_packetizer_input_t sout_packetizer_input_t;
  229. typedef struct sout_access_out_t sout_access_out_t;
  230. typedef struct sout_access_out_sys_t   sout_access_out_sys_t;
  231. typedef struct sout_mux_t sout_mux_t;
  232. typedef struct sout_mux_sys_t sout_mux_sys_t;
  233. typedef struct sout_stream_t    sout_stream_t;
  234. typedef struct sout_stream_sys_t sout_stream_sys_t;
  235. typedef struct config_chain_t       config_chain_t;
  236. typedef struct session_descriptor_t session_descriptor_t;
  237. typedef struct announce_method_t announce_method_t;
  238. typedef struct sout_param_t sout_param_t;
  239. typedef struct sout_pcat_t sout_pcat_t;
  240. typedef struct sout_std_t sout_std_t;
  241. typedef struct sout_display_t sout_display_t;
  242. typedef struct sout_duplicate_t sout_duplicate_t;
  243. typedef struct sout_transcode_t sout_transcode_t;
  244. typedef struct sout_chain_t sout_chain_t;
  245. typedef struct streaming_profile_t streaming_profile_t;
  246. typedef struct sout_module_t sout_module_t;
  247. typedef struct sout_gui_descr_t sout_gui_descr_t;
  248. typedef struct profile_parser_t profile_parser_t;
  249. /* Decoders */
  250. typedef struct decoder_t         decoder_t;
  251. typedef struct decoder_sys_t     decoder_sys_t;
  252. typedef struct decoder_synchro_t decoder_synchro_t;
  253. /* Encoders */
  254. typedef struct encoder_t      encoder_t;
  255. typedef struct encoder_sys_t  encoder_sys_t;
  256. /* Filters */
  257. typedef struct filter_t filter_t;
  258. typedef struct filter_sys_t filter_sys_t;
  259. /* Network */
  260. typedef struct network_socket_t network_socket_t;
  261. typedef struct virtual_socket_t v_socket_t;
  262. typedef struct sockaddr sockaddr;
  263. typedef struct addrinfo addrinfo;
  264. typedef struct vlc_acl_t vlc_acl_t;
  265. typedef struct vlc_url_t vlc_url_t;
  266. /* Misc */
  267. typedef struct iso639_lang_t iso639_lang_t;
  268. typedef struct device_t device_t;
  269. typedef struct device_probe_t device_probe_t;
  270. typedef struct probe_sys_t probe_sys_t;
  271. /* block */
  272. typedef struct block_t      block_t;
  273. typedef struct block_fifo_t block_fifo_t;
  274. /* httpd */
  275. typedef struct httpd_t          httpd_t;
  276. typedef struct httpd_host_t     httpd_host_t;
  277. typedef struct httpd_url_t      httpd_url_t;
  278. typedef struct httpd_client_t   httpd_client_t;
  279. typedef struct httpd_callback_sys_t httpd_callback_sys_t;
  280. typedef struct httpd_message_t  httpd_message_t;
  281. typedef int    (*httpd_callback_t)( httpd_callback_sys_t *, httpd_client_t *, httpd_message_t *answer, const httpd_message_t *query );
  282. typedef struct httpd_file_t     httpd_file_t;
  283. typedef struct httpd_file_sys_t httpd_file_sys_t;
  284. typedef int (*httpd_file_callback_t)( httpd_file_sys_t *, httpd_file_t *, uint8_t *psz_request, uint8_t **pp_data, int *pi_data );
  285. typedef struct httpd_handler_t  httpd_handler_t;
  286. typedef struct httpd_handler_sys_t httpd_handler_sys_t;
  287. typedef int (*httpd_handler_callback_t)( httpd_handler_sys_t *, httpd_handler_t *, char *psz_url, uint8_t *psz_request, int i_type, uint8_t *p_in, int i_in, char *psz_remote_addr, char *psz_remote_host, uint8_t **pp_data, int *pi_data );
  288. typedef struct httpd_redirect_t httpd_redirect_t;
  289. typedef struct httpd_stream_t httpd_stream_t;
  290. /* TLS support */
  291. typedef struct tls_server_t tls_server_t;
  292. typedef struct tls_session_t tls_session_t;
  293. /* Hashing */
  294. typedef struct md5_s md5_t;
  295. /* XML */
  296. typedef struct xml_t xml_t;
  297. typedef struct xml_sys_t xml_sys_t;
  298. typedef struct xml_reader_t xml_reader_t;
  299. typedef struct xml_reader_sys_t xml_reader_sys_t;
  300. /* vod server */
  301. typedef struct vod_t     vod_t;
  302. typedef struct vod_sys_t vod_sys_t;
  303. typedef struct vod_media_t vod_media_t;
  304. /* opengl */
  305. typedef struct opengl_t     opengl_t;
  306. typedef struct opengl_sys_t opengl_sys_t;
  307. /* osdmenu */
  308. typedef struct osd_menu_t   osd_menu_t;
  309. typedef struct osd_state_t  osd_state_t;
  310. typedef struct osd_event_t  osd_event_t;
  311. typedef struct osd_button_t osd_button_t;
  312. typedef struct osd_menu_state_t osd_menu_state_t;
  313. /* VLM */
  314. typedef struct vlm_t         vlm_t;
  315. typedef struct vlm_message_t vlm_message_t;
  316. /* divers */
  317. typedef struct vlc_meta_t    vlc_meta_t;
  318. typedef struct meta_export_t meta_export_t;
  319. /* Stats */
  320. typedef struct counter_t     counter_t;
  321. typedef struct counter_sample_t counter_sample_t;
  322. typedef struct stats_handler_t stats_handler_t;
  323. typedef struct input_stats_t input_stats_t;
  324. /* Update */
  325. typedef struct update_t update_t;
  326. typedef struct update_iterator_t update_iterator_t;
  327. /* Meta engine */
  328. typedef struct meta_engine_t meta_engine_t;
  329. /* stat/lstat/fstat */
  330. #ifdef WIN32
  331. #include <sys/stat.h>
  332. # ifndef UNDER_CE
  333. struct _stati64;
  334. #define stat _stati64
  335. #define fstat _fstati64
  336. #endif
  337. /* You should otherwise use utf8_stat and utf8_lstat. */
  338. #else
  339. struct stat;
  340. #endif
  341. /**
  342.  * VLC value structure
  343.  */
  344. typedef union
  345. {
  346.     int             i_int;
  347.     bool            b_bool;
  348.     float           f_float;
  349.     char *          psz_string;
  350.     void *          p_address;
  351.     vlc_object_t *  p_object;
  352.     vlc_list_t *    p_list;
  353.     mtime_t         i_time;
  354.     struct { char *psz_name; int i_object_id; } var;
  355.    /* Make sure the structure is at least 64bits */
  356.     struct { char a, b, c, d, e, f, g, h; } padding;
  357. } vlc_value_t;
  358. /**
  359.  * VLC list structure
  360.  */
  361. struct vlc_list_t
  362. {
  363.     int             i_count;
  364.     vlc_value_t *   p_values;
  365.     int *           pi_types;
  366. };
  367. /**
  368.  * defgroup var_type Variable types
  369.  * These are the different types a vlc variable can have.
  370.  * @{
  371.  */
  372. #define VLC_VAR_VOID      0x0010
  373. #define VLC_VAR_BOOL      0x0020
  374. #define VLC_VAR_INTEGER   0x0030
  375. #define VLC_VAR_HOTKEY    0x0031
  376. #define VLC_VAR_STRING    0x0040
  377. #define VLC_VAR_MODULE    0x0041
  378. #define VLC_VAR_FILE      0x0042
  379. #define VLC_VAR_DIRECTORY 0x0043
  380. #define VLC_VAR_VARIABLE  0x0044
  381. #define VLC_VAR_FLOAT     0x0050
  382. #define VLC_VAR_TIME      0x0060
  383. #define VLC_VAR_ADDRESS   0x0070
  384. #define VLC_VAR_MUTEX     0x0080
  385. #define VLC_VAR_LIST      0x0090
  386. /**@}*/
  387. /*****************************************************************************
  388.  * Error values (shouldn't be exposed)
  389.  *****************************************************************************/
  390. #define VLC_SUCCESS         -0                                   /* No error */
  391. #define VLC_ENOMEM          -1                          /* Not enough memory */
  392. #define VLC_ETHREAD         -2                               /* Thread error */
  393. #define VLC_ETIMEOUT        -3                                    /* Timeout */
  394. #define VLC_ENOMOD         -10                           /* Module not found */
  395. #define VLC_ENOOBJ         -20                           /* Object not found */
  396. #define VLC_ENOVAR         -30                         /* Variable not found */
  397. #define VLC_EBADVAR        -31                         /* Bad variable value */
  398. #define VLC_ENOITEM        -40                           /**< Item not found */
  399. #define VLC_EEXIT         -255                             /* Program exited */
  400. #define VLC_EEXITSUCCESS  -999                /* Program exited successfully */
  401. #define VLC_EGENERIC      -666                              /* Generic error */
  402. /*****************************************************************************
  403.  * Variable callbacks
  404.  *****************************************************************************/
  405. typedef int ( * vlc_callback_t ) ( vlc_object_t *,      /* variable's object */
  406.                                    char const *,            /* variable name */
  407.                                    vlc_value_t,                 /* old value */
  408.                                    vlc_value_t,                 /* new value */
  409.                                    void * );                /* callback data */
  410. /*****************************************************************************
  411.  * Plug-in stuff
  412.  *****************************************************************************/
  413. #ifdef __cplusplus
  414. # define LIBVLC_EXTERN extern "C"
  415. #else
  416. # define LIBVLC_EXTERN extern
  417. #endif
  418. #if defined (WIN32) && defined (DLL_EXPORT)
  419. #if defined (UNDER_CE)
  420. # include <windef.h>
  421. #endif
  422. # define LIBVLC_EXPORT __declspec(dllexport)
  423. #else
  424. # define LIBVLC_EXPORT
  425. #endif
  426. #define VLC_EXPORT( type, name, args ) 
  427.                         LIBVLC_EXTERN LIBVLC_EXPORT type name args
  428. /*****************************************************************************
  429.  * OS-specific headers and thread types
  430.  *****************************************************************************/
  431. #if defined( WIN32 ) || defined( UNDER_CE )
  432. #   define WIN32_LEAN_AND_MEAN
  433. #   include <windows.h>
  434. #endif
  435. #include "vlc_mtime.h"
  436. #include "vlc_threads.h"
  437. /*****************************************************************************
  438.  * Common structure members
  439.  *****************************************************************************/
  440. /* VLC_COMMON_MEMBERS : members common to all basic vlc objects */
  441. #define VLC_COMMON_MEMBERS                                                  
  442. /** name VLC_COMMON_MEMBERS                                                
  443.  * these members are common for all vlc objects                             
  444.  */                                                                         
  445. /**@{*/                                                                     
  446.     const char *psz_object_type;                                            
  447.     char *psz_object_name;                                                  
  448.                                                                             
  449.     /* Messages header */                                                   
  450.     char *psz_header;                                                       
  451.     int  i_flags;                                                           
  452.                                                                             
  453.     /* Object properties */                                                 
  454.     volatile bool b_error;                  /**< set by the object */ 
  455.     volatile bool b_die;                   /**< set by the outside */ 
  456.     bool b_force;      /**< set by the outside (eg. module_need()) */ 
  457.                                                                             
  458.     /** Just a reminder so that people don't cast garbage */                
  459.     bool be_sure_to_add_VLC_COMMON_MEMBERS_to_struct;                       
  460.                                                                             
  461.     /* Stuff related to the libvlc structure */                             
  462.     libvlc_int_t *p_libvlc;                  /**< (root of all evil) - 1 */ 
  463.                                                                             
  464.     vlc_object_t *  p_parent;                            /**< our parent */ 
  465.                                                                             
  466.     /* Private data */                                                      
  467.     void *          p_private;                                              
  468.                                                                             
  469. /**@}*/                                                                     
  470. /* VLC_OBJECT: attempt at doing a clever cast */
  471. #ifdef __GNUC__
  472. # define VLC_OBJECT( x ) 
  473.     (((vlc_object_t *)(x))+0*(((typeof(x))0)->be_sure_to_add_VLC_COMMON_MEMBERS_to_struct))
  474. #else
  475. # define VLC_OBJECT( x ) ((vlc_object_t *)(x))
  476. #endif
  477. typedef struct gc_object_t
  478. {
  479.     vlc_spinlock_t spin;
  480.     uintptr_t      refs;
  481.     void          (*pf_destructor) (struct gc_object_t *);
  482. } gc_object_t;
  483. /**
  484.  * These members are common to all objects that wish to be garbage-collected.
  485.  */
  486. #define VLC_GC_MEMBERS gc_object_t vlc_gc_data;
  487. VLC_EXPORT(void *, vlc_gc_init, (gc_object_t *, void (*)(gc_object_t *)));
  488. VLC_EXPORT(void *, vlc_hold, (gc_object_t *));
  489. VLC_EXPORT(void, vlc_release, (gc_object_t *));
  490. #define vlc_gc_init( a,b ) vlc_gc_init( &(a)->vlc_gc_data, (b) )
  491. #define vlc_gc_incref( a ) vlc_hold( &(a)->vlc_gc_data )
  492. #define vlc_gc_decref( a ) vlc_release( &(a)->vlc_gc_data )
  493. #define vlc_priv( gc, t ) ((t *)(((char *)(gc)) - offsetof(t, vlc_gc_data)))
  494. /*****************************************************************************
  495.  * Macros and inline functions
  496.  *****************************************************************************/
  497. /* CEIL: division with round to nearest greater integer */
  498. #define CEIL(n, d)  ( ((n) / (d)) + ( ((n) % (d)) ? 1 : 0) )
  499. /* PAD: PAD(n, d) = CEIL(n ,d) * d */
  500. #define PAD(n, d)   ( ((n) % (d)) ? ((((n) / (d)) + 1) * (d)) : (n) )
  501. /* __MAX and __MIN: self explanatory */
  502. #ifndef __MAX
  503. #   define __MAX(a, b)   ( ((a) > (b)) ? (a) : (b) )
  504. #endif
  505. #ifndef __MIN
  506. #   define __MIN(a, b)   ( ((a) < (b)) ? (a) : (b) )
  507. #endif
  508. LIBVLC_USED
  509. static inline int64_t GCD ( int64_t a, int64_t b )
  510. {
  511.     while( b )
  512.     {
  513.         int64_t c = a % b;
  514.         a = b;
  515.         b = c;
  516.     }
  517.     return a;
  518. }
  519. /* function imported from libavutil/common.h */
  520. LIBVLC_USED
  521. static inline uint8_t clip_uint8_vlc( int32_t a )
  522. {
  523.     if( a&(~255) ) return (-a)>>31;
  524.     else           return a;
  525. }
  526. /* Free and set set the variable to NULL */
  527. #define FREENULL(a) do { free( a ); a = NULL; } while(0)
  528. #define EMPTY_STR(str) (!str || !*str)
  529. VLC_EXPORT( char const *, vlc_error, ( int ) LIBVLC_USED );
  530. #include <vlc_arrays.h>
  531. /* MSB (big endian)/LSB (little endian) conversions - network order is always
  532.  * MSB, and should be used for both network communications and files. */
  533. LIBVLC_USED
  534. static inline uint16_t U16_AT( const void * _p )
  535. {
  536.     const uint8_t * p = (const uint8_t *)_p;
  537.     return ( ((uint16_t)p[0] << 8) | p[1] );
  538. }
  539. LIBVLC_USED
  540. static inline uint32_t U32_AT( const void * _p )
  541. {
  542.     const uint8_t * p = (const uint8_t *)_p;
  543.     return ( ((uint32_t)p[0] << 24) | ((uint32_t)p[1] << 16)
  544.               | ((uint32_t)p[2] << 8) | p[3] );
  545. }
  546. LIBVLC_USED
  547. static inline uint64_t U64_AT( const void * _p )
  548. {
  549.     const uint8_t * p = (const uint8_t *)_p;
  550.     return ( ((uint64_t)p[0] << 56) | ((uint64_t)p[1] << 48)
  551.               | ((uint64_t)p[2] << 40) | ((uint64_t)p[3] << 32)
  552.               | ((uint64_t)p[4] << 24) | ((uint64_t)p[5] << 16)
  553.               | ((uint64_t)p[6] << 8) | p[7] );
  554. }
  555. LIBVLC_USED
  556. static inline uint16_t GetWLE( const void * _p )
  557. {
  558.     const uint8_t * p = (const uint8_t *)_p;
  559.     return ( ((uint16_t)p[1] << 8) | p[0] );
  560. }
  561. LIBVLC_USED
  562. static inline uint32_t GetDWLE( const void * _p )
  563. {
  564.     const uint8_t * p = (const uint8_t *)_p;
  565.     return ( ((uint32_t)p[3] << 24) | ((uint32_t)p[2] << 16)
  566.               | ((uint32_t)p[1] << 8) | p[0] );
  567. }
  568. LIBVLC_USED
  569. static inline uint64_t GetQWLE( const void * _p )
  570. {
  571.     const uint8_t * p = (const uint8_t *)_p;
  572.     return ( ((uint64_t)p[7] << 56) | ((uint64_t)p[6] << 48)
  573.               | ((uint64_t)p[5] << 40) | ((uint64_t)p[4] << 32)
  574.               | ((uint64_t)p[3] << 24) | ((uint64_t)p[2] << 16)
  575.               | ((uint64_t)p[1] << 8) | p[0] );
  576. }
  577. #define GetWBE( p )     U16_AT( p )
  578. #define GetDWBE( p )    U32_AT( p )
  579. #define GetQWBE( p )    U64_AT( p )
  580. /* Helper writer functions */
  581. #define SetWLE( p, v ) _SetWLE( (uint8_t*)(p), v)
  582. static inline void _SetWLE( uint8_t *p, uint16_t i_dw )
  583. {
  584.     p[1] = ( i_dw >>  8 )&0xff;
  585.     p[0] = ( i_dw       )&0xff;
  586. }
  587. #define SetDWLE( p, v ) _SetDWLE( (uint8_t*)(p), v)
  588. static inline void _SetDWLE( uint8_t *p, uint32_t i_dw )
  589. {
  590.     p[3] = ( i_dw >> 24 )&0xff;
  591.     p[2] = ( i_dw >> 16 )&0xff;
  592.     p[1] = ( i_dw >>  8 )&0xff;
  593.     p[0] = ( i_dw       )&0xff;
  594. }
  595. #define SetQWLE( p, v ) _SetQWLE( (uint8_t*)(p), v)
  596. static inline void _SetQWLE( uint8_t *p, uint64_t i_qw )
  597. {
  598.     SetDWLE( p,   i_qw&0xffffffff );
  599.     SetDWLE( p+4, ( i_qw >> 32)&0xffffffff );
  600. }
  601. #define SetWBE( p, v ) _SetWBE( (uint8_t*)(p), v)
  602. static inline void _SetWBE( uint8_t *p, uint16_t i_dw )
  603. {
  604.     p[0] = ( i_dw >>  8 )&0xff;
  605.     p[1] = ( i_dw       )&0xff;
  606. }
  607. #define SetDWBE( p, v ) _SetDWBE( (uint8_t*)(p), v)
  608. static inline void _SetDWBE( uint8_t *p, uint32_t i_dw )
  609. {
  610.     p[0] = ( i_dw >> 24 )&0xff;
  611.     p[1] = ( i_dw >> 16 )&0xff;
  612.     p[2] = ( i_dw >>  8 )&0xff;
  613.     p[3] = ( i_dw       )&0xff;
  614. }
  615. #define SetQWBE( p, v ) _SetQWBE( (uint8_t*)(p), v)
  616. static inline void _SetQWBE( uint8_t *p, uint64_t i_qw )
  617. {
  618.     SetDWBE( p+4,   i_qw&0xffffffff );
  619.     SetDWBE( p, ( i_qw >> 32)&0xffffffff );
  620. }
  621. #define hton16(i) htons(i)
  622. #define hton32(i) htonl(i)
  623. #define ntoh16(i) ntohs(i)
  624. #define ntoh32(i) ntohl(i)
  625. LIBVLC_USED
  626. static inline uint64_t ntoh64 (uint64_t ll)
  627. {
  628.     union { uint64_t qw; uint8_t b[16]; } v = { ll };
  629.     return ((uint64_t)v.b[0] << 56)
  630.          | ((uint64_t)v.b[1] << 48)
  631.          | ((uint64_t)v.b[2] << 40)
  632.          | ((uint64_t)v.b[3] << 32)
  633.          | ((uint64_t)v.b[4] << 24)
  634.          | ((uint64_t)v.b[5] << 16)
  635.          | ((uint64_t)v.b[6] <<  8)
  636.          | ((uint64_t)v.b[7] <<  0);
  637. }
  638. #define hton64(i) ntoh64(i)
  639. /* */
  640. #define VLC_UNUSED(x) (void)(x)
  641. /* Stuff defined in src/extras/libc.c */
  642. #if defined(WIN32) || defined(UNDER_CE)
  643. /* win32, cl and icl support */
  644. #   if defined( _MSC_VER ) || !defined( __MINGW32__ )
  645. #       define __attribute__(x)
  646. #       define __inline__      __inline
  647. #       define S_IFBLK         0x3000  /* Block */
  648. #       define S_ISBLK(m)      (0)
  649. #       define S_ISCHR(m)      (0)
  650. #       define S_ISFIFO(m)     (((m)&_S_IFMT) == _S_IFIFO)
  651. #       define S_ISREG(m)      (((m)&_S_IFMT) == _S_IFREG)
  652. #   endif
  653. /* several type definitions */
  654. #   if defined( __MINGW32__ )
  655. #       if !defined( _OFF_T_ )
  656.             typedef long long _off_t;
  657.             typedef _off_t off_t;
  658. #           define _OFF_T_
  659. #       else
  660. #           ifdef off_t
  661. #               undef off_t
  662. #           endif
  663. #           define off_t long long
  664. #       endif
  665. #   endif
  666. #   if defined( _MSC_VER ) && !defined( __WXMSW__ )
  667. #       if !defined( _OFF_T_DEFINED )
  668.             typedef __int64 off_t;
  669. #           define _OFF_T_DEFINED
  670. #       else
  671.             /* for wx compatibility typedef long off_t; */
  672. #           define off_t __int64
  673. #       endif
  674. #   endif
  675. #   if defined( __BORLANDC__ )
  676. #       undef off_t
  677. #       define off_t unsigned __int64
  678. #   endif
  679. #   ifndef O_NONBLOCK
  680. #       define O_NONBLOCK 0
  681. #   endif
  682. #   ifndef alloca
  683. #       define alloca _alloca
  684. #   endif
  685. #   include <tchar.h>
  686. #endif
  687. VLC_EXPORT( bool, vlc_ureduce, ( unsigned *, unsigned *, uint64_t, uint64_t, uint64_t ) );
  688. /* iconv wrappers (defined in src/extras/libc.c) */
  689. typedef void *vlc_iconv_t;
  690. VLC_EXPORT( vlc_iconv_t, vlc_iconv_open, ( const char *, const char * ) LIBVLC_USED );
  691. VLC_EXPORT( size_t, vlc_iconv, ( vlc_iconv_t, const char **, size_t *, char **, size_t * ) LIBVLC_USED );
  692. VLC_EXPORT( int, vlc_iconv_close, ( vlc_iconv_t ) );
  693. /* execve wrapper (defined in src/extras/libc.c) */
  694. VLC_EXPORT( int, __vlc_execve, ( vlc_object_t *p_object, int i_argc, char *const *pp_argv, char *const *pp_env, const char *psz_cwd, const char *p_in, size_t i_in, char **pp_data, size_t *pi_data ) LIBVLC_USED );
  695. #define vlc_execve(a,b,c,d,e,f,g,h,i) __vlc_execve(VLC_OBJECT(a),b,c,d,e,f,g,h,i)
  696. /* dir wrappers (defined in src/extras/libc.c) */
  697. VLC_EXPORT(int, vlc_wclosedir, ( void *_p_dir ));
  698. /*****************************************************************************
  699.  * CPU capabilities
  700.  *****************************************************************************/
  701. #define CPU_CAPABILITY_NONE    0
  702. #define CPU_CAPABILITY_486     (1<<0)
  703. #define CPU_CAPABILITY_586     (1<<1)
  704. #define CPU_CAPABILITY_PPRO    (1<<2)
  705. #define CPU_CAPABILITY_MMX     (1<<3)
  706. #define CPU_CAPABILITY_3DNOW   (1<<4)
  707. #define CPU_CAPABILITY_MMXEXT  (1<<5)
  708. #define CPU_CAPABILITY_SSE     (1<<6)
  709. #define CPU_CAPABILITY_SSE2    (1<<7)
  710. #define CPU_CAPABILITY_ALTIVEC (1<<16)
  711. #define CPU_CAPABILITY_FPU     (1<<31)
  712. VLC_EXPORT( unsigned, vlc_CPU, ( void ) );
  713. typedef void *(*vlc_memcpy_t) (void *tgt, const void *src, size_t n);
  714. typedef void *(*vlc_memset_t) (void *tgt, int c, size_t n);
  715. VLC_EXPORT( void, vlc_fastmem_register, (vlc_memcpy_t cpy, vlc_memset_t set) );
  716. VLC_EXPORT( void *, vlc_memcpy, ( void *, const void *, size_t ) );
  717. VLC_EXPORT( void *, vlc_memset, ( void *, int, size_t ) );
  718. /*****************************************************************************
  719.  * I18n stuff
  720.  *****************************************************************************/
  721. VLC_EXPORT( char *, vlc_gettext, ( const char *msgid ) LIBVLC_USED );
  722. static inline const char *vlc_pgettext( const char *ctx, const char *id )
  723. {
  724.     const char *tr = vlc_gettext( id );
  725.     return (tr == ctx) ? id : tr;
  726. }
  727. /*****************************************************************************
  728.  * libvlc features
  729.  *****************************************************************************/
  730. VLC_EXPORT( const char *, VLC_Version, ( void ) LIBVLC_USED );
  731. VLC_EXPORT( const char *, VLC_CompileBy, ( void ) LIBVLC_USED );
  732. VLC_EXPORT( const char *, VLC_CompileHost, ( void ) LIBVLC_USED );
  733. VLC_EXPORT( const char *, VLC_CompileDomain, ( void ) LIBVLC_USED );
  734. VLC_EXPORT( const char *, VLC_Compiler, ( void ) LIBVLC_USED );
  735. VLC_EXPORT( const char *, VLC_Error, ( int ) LIBVLC_USED );
  736. /*****************************************************************************
  737.  * Additional vlc stuff
  738.  *****************************************************************************/
  739. #include "vlc_messages.h"
  740. #include "vlc_variables.h"
  741. #include "vlc_objects.h"
  742. #include "vlc_modules.h"
  743. #include "vlc_main.h"
  744. #include "vlc_configuration.h"
  745. #if defined( WIN32 ) || defined( UNDER_CE )
  746. #   define DIR_SEP_CHAR '\'
  747. #   define DIR_SEP "\"
  748. #   define PATH_SEP_CHAR ';'
  749. #   define PATH_SEP ";"
  750. #else
  751. #   define DIR_SEP_CHAR '/'
  752. #   define DIR_SEP "/"
  753. #   define PATH_SEP_CHAR ':'
  754. #   define PATH_SEP ":"
  755. #endif
  756. #define LICENSE_MSG 
  757.   _("This program comes with NO WARRANTY, to the extent permitted by " 
  758.     "law.nYou may redistribute it under the terms of the GNU General " 
  759.     "Public License;nsee the file named COPYING for details.n" 
  760.     "Written by the VideoLAN team; see the AUTHORS file.n")
  761. #endif /* !VLC_COMMON_H */