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

多媒体

开发平台:

MultiPlatform

  1. /*****************************************************************************
  2.  * loadsave.c : Playlist loading / saving functions
  3.  *****************************************************************************
  4.  * Copyright (C) 1999-2004 VideoLAN
  5.  * $Id: loadsave.c 8905 2004-10-04 13:34:42Z gbazin $
  6.  *
  7.  * Authors: Samuel Hocevar <sam@zoy.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., 59 Temple Place - Suite 330, Boston, MA  02111, USA.
  22.  *****************************************************************************/
  23. #include <stdlib.h>                                      /* free(), strtol() */
  24. #include <stdio.h>                                              /* sprintf() */
  25. #include <string.h>                                            /* strerror() */
  26. #include <errno.h>
  27. #include <vlc/vlc.h>
  28. #include <vlc/vout.h>
  29. #include <vlc/sout.h>
  30. #include <vlc/input.h>
  31. #include "vlc_playlist.h"
  32. #define PLAYLIST_FILE_HEADER  "# vlc playlist file version 0.5"
  33. /**
  34.  * Import a certain playlist file into the playlist
  35.  *
  36.  * param p_playlist the playlist to which the new items will be added
  37.  * param psz_filename the name of the playlistfile to import
  38.  * return VLC_SUCCESS on success
  39.  */
  40. int playlist_Import( playlist_t * p_playlist, const char *psz_filename )
  41. {
  42.     playlist_item_t *p_item;
  43.     char *psz_uri;
  44.     int i_id;
  45.     msg_Dbg( p_playlist, "clearing playlist");
  46.     playlist_Clear( p_playlist );
  47.     psz_uri = (char *)malloc(sizeof(char)*strlen(psz_filename) + 17 );
  48.     sprintf( psz_uri, "file/playlist://%s", psz_filename);
  49.     i_id = playlist_Add( p_playlist, psz_uri, psz_uri,
  50.                   PLAYLIST_INSERT  , PLAYLIST_END);
  51.     vlc_mutex_lock( &p_playlist->object_lock );
  52.     p_item = playlist_ItemGetById( p_playlist, i_id );
  53.     p_item->b_autodeletion = VLC_TRUE;
  54.     vlc_mutex_unlock( &p_playlist->object_lock );
  55.     playlist_Play(p_playlist);
  56.     return VLC_SUCCESS;
  57. }
  58. /**
  59.  * Export a playlist to a certain type of playlistfile
  60.  *
  61.  * param p_playlist the playlist to export
  62.  * param psz_filename the location where the exported file will be saved
  63.  * param psz_type the type of playlist file to create.
  64.  * return VLC_SUCCESS on success
  65.  */
  66. int playlist_Export( playlist_t * p_playlist, const char *psz_filename ,
  67.                      const char *psz_type)
  68. {
  69.     module_t *p_module;
  70.     playlist_export_t *p_export;
  71.     msg_Info( p_playlist, "saving playlist to file %s", psz_filename );
  72.     /* Prepare the playlist_export_t structure */
  73.     p_export = (playlist_export_t *)malloc( sizeof(playlist_export_t) );
  74.     if( !p_export)
  75.     {
  76.         msg_Err( p_playlist, "out of memory");
  77.         return VLC_ENOMEM;
  78.     }
  79.     p_export->p_file = fopen( psz_filename, "wt" );
  80.     if( !p_export->p_file )
  81.     {
  82.         msg_Err( p_playlist , "could not create playlist file %s"
  83.                  " (%s)", psz_filename, strerror(errno) );
  84.         return VLC_EGENERIC;
  85.     }
  86.     p_playlist->p_private = (void *)p_export;
  87.     /* Lock the playlist */
  88.     vlc_mutex_lock( &p_playlist->object_lock );
  89.     /* And call the module ! All work is done now */
  90.     p_module = module_Need( p_playlist, "playlist export", psz_type, VLC_TRUE);
  91.     if( !p_module )
  92.     {
  93.         msg_Warn( p_playlist, "failed to export playlist" );
  94.         vlc_mutex_unlock( &p_playlist->object_lock );
  95.         return VLC_ENOOBJ;
  96.     }
  97.     module_Unneed( p_playlist , p_module );
  98.     fclose( p_export->p_file );
  99.     vlc_mutex_unlock( &p_playlist->object_lock );
  100.     return VLC_SUCCESS;
  101. }