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

多媒体

开发平台:

MultiPlatform

  1. /*****************************************************************************
  2.  * old.c : Old playlist format import
  3.  *****************************************************************************
  4.  * Copyright (C) 2004 VideoLAN
  5.  * $Id: old.c 8030 2004-06-22 21:22:13Z gbazin $
  6.  *
  7.  * Authors: Cl閙ent Stenac <zorglub@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., 59 Temple Place - Suite 330, Boston, MA  02111, USA.
  22.  *****************************************************************************/
  23. /*****************************************************************************
  24.  * Preamble
  25.  *****************************************************************************/
  26. #include <stdlib.h>                                      /* malloc(), free() */
  27. #include <vlc/vlc.h>
  28. #include <vlc/input.h>
  29. #include <vlc/intf.h>
  30. #include <errno.h>                                                 /* ENOMEM */
  31. #define PLAYLIST_FILE_HEADER "# vlc playlist file version 0.5"
  32. /*****************************************************************************
  33.  * Local prototypes
  34.  *****************************************************************************/
  35. int Import_Old ( vlc_object_t * );
  36. static int Demux( demux_t *p_demux);
  37. static int Control( demux_t *p_demux, int i_query, va_list args );
  38. /*****************************************************************************
  39.  * Import_Old : main import function
  40.  *****************************************************************************/
  41. int Import_Old( vlc_object_t *p_this )
  42. {
  43.     demux_t *p_demux = (demux_t *)p_this;
  44.     uint8_t *p_peek;
  45.     if( stream_Peek( p_demux->s, &p_peek, 31 ) < 31 )
  46.     {
  47.         msg_Err( p_demux, "cannot peek" );
  48.         return VLC_EGENERIC;
  49.     }
  50.     if( strncmp( p_peek, PLAYLIST_FILE_HEADER , 31 ) )
  51.     {
  52.         msg_Warn(p_demux, "old import module discarded: invalid file");
  53.         return VLC_EGENERIC;
  54.     }
  55.     msg_Dbg( p_demux, "found valid old playlist file");
  56.     p_demux->pf_control = Control;
  57.     p_demux->pf_demux = Demux;
  58.     return VLC_SUCCESS;
  59. }
  60. static int Demux( demux_t *p_demux)
  61. {
  62.     char *psz_line;
  63.     /* Attach playlist and start reading data */
  64.     playlist_t *p_playlist;
  65.     p_playlist = (playlist_t*)vlc_object_find( p_demux,
  66.                          VLC_OBJECT_PLAYLIST, FIND_PARENT );
  67.     if( !p_playlist )
  68.     {
  69.         msg_Err( p_demux, "cannot attach playlist" );
  70.         return VLC_EGENERIC;
  71.     }
  72.     p_playlist->pp_items[p_playlist->i_index]->b_autodeletion = VLC_TRUE;
  73.     while( ( psz_line = stream_ReadLine( p_demux->s) ) != NULL )
  74.     {
  75.         if( ( psz_line[0] == '#' ) || (psz_line[0] == 'r') ||
  76.             ( psz_line[0] == 'n') || (psz_line[0] == (char)0) )
  77.         {
  78.             continue;
  79.         }
  80.         /* Remove end of line */
  81.         if( psz_line[strlen(psz_line) -1 ] == 'n' ||
  82.             psz_line[strlen(psz_line) -1 ] == 'r' )
  83.         {
  84.             psz_line[ strlen(psz_line) -1 ] = (char)0;
  85.             if( psz_line[strlen(psz_line) - 1 ] == 'r' )
  86.                 psz_line[strlen(psz_line) - 1 ] = (char)0;
  87.         }
  88.         playlist_Add( p_playlist, psz_line, psz_line, PLAYLIST_APPEND,
  89.                       PLAYLIST_END );
  90.         free( psz_line );
  91.     }
  92.     p_demux->b_die = VLC_TRUE;
  93.     vlc_object_release( p_playlist );
  94.     return VLC_SUCCESS;
  95. }
  96. static int Control( demux_t *p_demux, int i_query, va_list args )
  97. {
  98.     return VLC_EGENERIC;
  99. }