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

midi

开发平台:

Unix_Linux

  1. /*****************************************************************************
  2.  * meta.c : Metadata handling
  3.  *****************************************************************************
  4.  * Copyright (C) 1998-2004 the VideoLAN team
  5.  * $Id: ad97c296753d4eba7885cad125eba49b0c1cb568 $
  6.  *
  7.  * Authors: Antoine Cellerier <dionoea@videolan.org>
  8.  *          Clément Stenac <zorglub@videolan.org
  9.  *
  10.  * This program is free software; you can redistribute it and/or modify
  11.  * it under the terms of the GNU General Public License as published by
  12.  * the Free Software Foundation; either version 2 of the License, or
  13.  * (at your option) any later version.
  14.  *
  15.  * This program is distributed in the hope that it will be useful,
  16.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  17.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  18.  * GNU General Public License for more details.
  19.  *
  20.  * You should have received a copy of the GNU General Public License
  21.  * along with this program; if not, write to the Free Software
  22.  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
  23.  *****************************************************************************/
  24. #ifdef HAVE_CONFIG_H
  25. # include "config.h"
  26. #endif
  27. #include <vlc_common.h>
  28. #include <vlc_playlist.h>
  29. #include "input_internal.h"
  30. #include "../playlist/art.h"
  31. /* FIXME bad name convention */
  32. const char * input_MetaTypeToLocalizedString( vlc_meta_type_t meta_type )
  33. {
  34.     switch( meta_type )
  35.     {
  36.     case vlc_meta_Title:        return _("Title");
  37.     case vlc_meta_Artist:       return _("Artist");
  38.     case vlc_meta_Genre:        return _("Genre");
  39.     case vlc_meta_Copyright:    return _("Copyright");
  40.     case vlc_meta_Album:        return _("Album");
  41.     case vlc_meta_TrackNumber:  return _("Track number");
  42.     case vlc_meta_Description:  return _("Description");
  43.     case vlc_meta_Rating:       return _("Rating");
  44.     case vlc_meta_Date:         return _("Date");
  45.     case vlc_meta_Setting:      return _("Setting");
  46.     case vlc_meta_URL:          return _("URL");
  47.     case vlc_meta_Language:     return _("Language");
  48.     case vlc_meta_NowPlaying:   return _("Now Playing");
  49.     case vlc_meta_Publisher:    return _("Publisher");
  50.     case vlc_meta_EncodedBy:    return _("Encoded by");
  51.     case vlc_meta_ArtworkURL:   return _("Artwork URL");
  52.     case vlc_meta_TrackID:      return _("Track ID");
  53.     default: abort();
  54.     }
  55. };
  56. void input_ExtractAttachmentAndCacheArt( input_thread_t *p_input )
  57. {
  58.     input_item_t *p_item = p_input->p->p_item;
  59.     /* */
  60.     char *psz_arturl = input_item_GetArtURL( p_item );
  61.     if( !psz_arturl || strncmp( psz_arturl, "attachment://", strlen("attachment://") ) )
  62.     {
  63.         msg_Err( p_input, "internal input error with input_ExtractAttachmentAndCacheArt" );
  64.         free( psz_arturl );
  65.         return;
  66.     }
  67.     playlist_t *p_playlist = pl_Hold( p_input );
  68.     if( !p_playlist )
  69.     {
  70.         free( psz_arturl );
  71.         return;
  72.     }
  73.     if( input_item_IsArtFetched( p_item ) )
  74.     {
  75.         /* XXX Weird, we should not have end up with attachment:// art url unless there is a race
  76.          * condition */
  77.         msg_Warn( p_input, "internal input error with input_ExtractAttachmentAndCacheArt" );
  78.         playlist_FindArtInCache( p_item );
  79.         goto exit;
  80.     }
  81.     /* */
  82.     input_attachment_t *p_attachment = NULL;
  83.     vlc_mutex_lock( &p_item->lock );
  84.     for( int i_idx = 0; i_idx < p_input->p->i_attachment; i_idx++ )
  85.     {
  86.         if( !strcmp( p_input->p->attachment[i_idx]->psz_name,
  87.                      &psz_arturl[strlen("attachment://")] ) )
  88.         {
  89.             p_attachment = vlc_input_attachment_Duplicate( p_input->p->attachment[i_idx] );
  90.             break;
  91.         }
  92.     }
  93.     vlc_mutex_unlock( &p_item->lock );
  94.     if( !p_attachment || p_attachment->i_data <= 0 )
  95.     {
  96.         if( p_attachment )
  97.             vlc_input_attachment_Delete( p_attachment );
  98.         msg_Warn( p_input, "internal input error with input_ExtractAttachmentAndCacheArt" );
  99.         goto exit;
  100.     }
  101.     /* */
  102.     const char *psz_type = NULL;
  103.     if( !strcmp( p_attachment->psz_mime, "image/jpeg" ) )
  104.         psz_type = ".jpg";
  105.     else if( !strcmp( p_attachment->psz_mime, "image/png" ) )
  106.         psz_type = ".png";
  107.     /* */
  108.     playlist_SaveArt( p_playlist, p_item,
  109.                       p_attachment->p_data, p_attachment->i_data, psz_type );
  110.     vlc_input_attachment_Delete( p_attachment );
  111. exit:
  112.     pl_Release( p_input );
  113.     free( psz_arturl );
  114. }