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

midi

开发平台:

Unix_Linux

  1. /*******************************************************************************
  2.  * itml.c : iTunes Music Library import functions
  3.  *******************************************************************************
  4.  * Copyright (C) 2007 the VideoLAN team
  5.  * $Id: c29fef3660306a11117010c303400893204c5267 $
  6.  *
  7.  * Authors: Yoann Peronneau <yoann@videolan.org>
  8.  *
  9.  * This program is free software; you can redistribute it and/or modify
  10.  * it under the terms of the GNU General Public License as published by
  11.  * the Free Software Foundation; either version 2 of the License, or
  12.  * (at your option) any later version.
  13.  *
  14.  * This program is distributed in the hope that it will be useful,
  15.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  16.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  17.  * GNU General Public License for more details.
  18.  *
  19.  * You should have received a copy of the GNU General Public License
  20.  * along with this program; if not, write to the Free Software
  21.  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
  22.  *******************************************************************************/
  23. /**
  24.  * file modules/demux/playlist/itml.h
  25.  * brief iTunes Music Library import: prototypes, datatypes, defines
  26.  */
  27. /* defines */
  28. #define FREE(v)        free(v);v=NULL;
  29. #define FREE_NAME()    free(psz_name);psz_name=NULL;
  30. #define FREE_VALUE()   free(psz_value);psz_value=NULL;
  31. #define FREE_KEY()     free(psz_key);psz_key=NULL;
  32. #define FREE_ATT()     FREE_NAME();FREE_VALUE()
  33. #define FREE_ATT_KEY() FREE_NAME();FREE_VALUE();FREE_KEY()
  34. #define UNKNOWN_CONTENT 0
  35. #define SIMPLE_CONTENT 1
  36. #define COMPLEX_CONTENT 2
  37. #define SIMPLE_INTERFACE  (track_elem_t    *p_track,
  38.                            const char      *psz_name,
  39.                            char            *psz_value)
  40. #define COMPLEX_INTERFACE (demux_t         *p_demux,
  41.                            input_item_t    *p_input_item,
  42.                            track_elem_t    *p_track,
  43.                            xml_reader_t    *p_xml_reader,
  44.                            const char      *psz_element,
  45.                            struct xml_elem_hnd  *p_handlers)
  46. /* datatypes */
  47. typedef struct
  48. {
  49.     char *name, *artist, *album, *genre, *trackNum, *location;
  50.     mtime_t duration;
  51. } track_elem_t;
  52. struct xml_elem_hnd
  53. {
  54.     const char *name;
  55.     int type;
  56.     union
  57.     {
  58.         bool (*smpl) SIMPLE_INTERFACE;
  59.         bool (*cmplx) COMPLEX_INTERFACE;
  60.     } pf_handler;
  61. };
  62. typedef struct xml_elem_hnd xml_elem_hnd_t;
  63. /* prototypes */
  64. static bool parse_plist_node COMPLEX_INTERFACE;
  65. static bool skip_element COMPLEX_INTERFACE;
  66. static bool parse_dict COMPLEX_INTERFACE;
  67. static bool parse_plist_dict COMPLEX_INTERFACE;
  68. static bool parse_tracks_dict COMPLEX_INTERFACE;
  69. static bool parse_track_dict COMPLEX_INTERFACE;
  70. static bool save_data SIMPLE_INTERFACE;
  71. static bool add_meta( input_item_t*, track_elem_t* );
  72. static track_elem_t *new_track( void );
  73. static void free_track( track_elem_t* );