Changeset 2d90e869b49fc72111a61ee715aa081fc92d169a

Show
Ignore:
Timestamp:
25/09/06 00:01:28 (2 years ago)
Author:
Antoine Cellerier <dionoea@videolan.org>
git-committer:
Antoine Cellerier <dionoea@videolan.org> 1159135288 +0000
git-parent:

[e398a81bd261feaada934e7b402b5fed57646593]

git-author:
Antoine Cellerier <dionoea@videolan.org> 1159135288 +0000
Message:

Some more (mostly) untested stuff:

  • Secondary queue items now have a b_fetch_art flag
  • You can use the playlist_AskForArtEnqueue function to ask for art from an interface. This will enqueue at the begining of the secondary queue
  • other stuff which i don't remember :)
  • (fix issues with previous (and unrelated) DIR_SEP commit)
Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • include/vlc_common.h

    rf17e985 r2d90e86  
    238238typedef struct playlist_add_t playlist_add_t; 
    239239typedef struct playlist_preparse_t playlist_preparse_t; 
     240typedef struct playlist_secondary_preparse_t playlist_secondary_preparse_t; 
    240241 
    241242/* Modules */ 
     
    12811282 
    12821283#if defined( WIN32 ) || defined( UNDER_CE ) 
     1284#   define DIR_SEP_CHAR '\\' 
    12831285#   define DIR_SEP "\\" 
    12841286#else 
     1287#   define DIR_SEP_CHAR '/' 
    12851288#   define DIR_SEP "/" 
    12861289#endif 
  • include/vlc_input.h

    re398a81 r2d90e86  
    477477#define input_MetaFetch(a,b) __input_MetaFetch(VLC_OBJECT(a),b) 
    478478VLC_EXPORT( int, __input_MetaFetch, ( vlc_object_t *, input_item_t * ) ); 
     479#define input_ArtFetch(a,b) __input_ArtFetch(VLC_OBJECT(a),b) 
     480VLC_EXPORT( int, __input_ArtFetch, ( vlc_object_t *, input_item_t * ) ); 
    479481 
    480482enum input_query_e 
  • include/vlc_playlist.h

    r5601054 r2d90e86  
    146146    mtime_t               i_sout_destroyed_date; 
    147147    playlist_preparse_t  *p_preparse; /**< Preparser object */ 
    148     playlist_preparse_t  *p_secondary_preparse; /**< Preparser object */ 
     148    playlist_secondary_preparse_t *p_secondary_preparse;/**< Preparser object */ 
    149149 
    150150    vlc_mutex_t gc_lock;         /**< Lock to protect the garbage collection */ 
     
    238238VLC_EXPORT( int, playlist_PreparseEnqueue, (playlist_t *, input_item_t *) ); 
    239239VLC_EXPORT( int, playlist_PreparseEnqueueItem, (playlist_t *, playlist_item_t *) ); 
     240VLC_EXPORT( int, playlist_AskForArtEnqueue, (playlist_t *, input_item_t *) ); 
    240241 
    241242/* Services discovery */ 
  • include/vlc_symbols.h

    re398a81 r2d90e86  
    547547    int (*input_DownloadAndCacheArt_inner) (vlc_object_t *p_parent, input_item_t *p_item); 
    548548    uint32_t (*input_GetMetaEngineFlags_inner) (vlc_meta_t *p_meta); 
     549    int (*__input_ArtFetch_inner) (vlc_object_t *, input_item_t *); 
     550    void *input_AskForArt_deprecated; 
     551    int (*playlist_AskForArtEnqueue_inner) (playlist_t *, input_item_t *); 
    549552}; 
    550553# if defined (__PLUGIN__) 
     
    10231026#  define input_DownloadAndCacheArt (p_symbols)->input_DownloadAndCacheArt_inner 
    10241027#  define input_GetMetaEngineFlags (p_symbols)->input_GetMetaEngineFlags_inner 
     1028#  define __input_ArtFetch (p_symbols)->__input_ArtFetch_inner 
     1029#  define playlist_AskForArtEnqueue (p_symbols)->playlist_AskForArtEnqueue_inner 
    10251030# elif defined (HAVE_DYNAMIC_PLUGINS) && !defined (__BUILTIN__) 
    10261031/****************************************************************** 
     
    15021507    ((p_symbols)->input_DownloadAndCacheArt_inner) = input_DownloadAndCacheArt; \ 
    15031508    ((p_symbols)->input_GetMetaEngineFlags_inner) = input_GetMetaEngineFlags; \ 
     1509    ((p_symbols)->__input_ArtFetch_inner) = __input_ArtFetch; \ 
     1510    ((p_symbols)->playlist_AskForArtEnqueue_inner) = playlist_AskForArtEnqueue; \ 
    15041511    (p_symbols)->net_ConvertIPv4_deprecated = NULL; \ 
    15051512    (p_symbols)->vlc_input_item_GetInfo_deprecated = NULL; \ 
     
    15551562    (p_symbols)->streaming_ChainToPsz_deprecated = NULL; \ 
    15561563    (p_symbols)->__input_SecondaryPreparse_deprecated = NULL; \ 
     1564    (p_symbols)->input_AskForArt_deprecated = NULL; \ 
    15571565 
    15581566# endif /* __PLUGIN__ */ 
  • src/input/meta.c

    re398a81 r2d90e86  
    3333#endif 
    3434 
    35 int input_FindArt( vlc_object_t *p_parent, input_item_t *p_item ); 
     35int input_FindArtInCache( vlc_object_t *p_parent, input_item_t *p_item ); 
    3636 
    3737int __input_MetaFetch( vlc_object_t *p_parent, input_item_t *p_item ) 
     
    5656    } 
    5757 
    58     input_FindArt( p_parent, p_item ); 
     58    input_FindArtInCache( p_parent, p_item ); 
    5959 
    6060    i_meta = input_GetMetaEngineFlags( p_item->p_meta ); 
     
    8888} 
    8989 
     90int __input_ArtFetch( vlc_object_t *p_parent, input_item_t *p_item ) 
     91{ 
     92    if( !p_item->p_meta ) 
     93        return VLC_EGENERIC; 
     94 
     95    /* TODO: call art fetcher modules */ 
     96 
     97    if( !p_item->p_meta->psz_arturl || !*p_item->p_meta->psz_arturl ) 
     98        return VLC_EGENERIC; 
     99 
     100    if( strncmp( "file://", p_item->p_meta->psz_arturl, 7 ) ) 
     101    { 
     102        return input_DownloadAndCacheArt( p_parent, p_item ); 
     103    } 
     104    return VLC_SUCCESS; 
     105} 
     106 
    90107#ifndef MAX_PATH 
    91108#   define MAX_PATH 250 
    92109#endif 
    93 int input_FindArt( vlc_object_t *p_parent, input_item_t *p_item ) 
     110int input_FindArtInCache( vlc_object_t *p_parent, input_item_t *p_item ) 
    94111{ 
    95112    char *psz_artist; 
    96113    char *psz_album; 
    97     char *psz_type; 
    98114    char psz_filename[MAX_PATH]; 
    99115    int i; 
    100116    struct stat a; 
    101     const char ppsz_type[] = { ".jpg", ".png", ".gif", ".bmp", "" }; 
     117    const char *ppsz_type[] = { ".jpg", ".png", ".gif", ".bmp", "" }; 
    102118 
    103119    if( !p_item->p_meta ) return VLC_EGENERIC; 
     
    112128                  DIR_SEP "%s" DIR_SEP "%s" DIR_SEP "art%s", 
    113129                  p_parent->p_libvlc->psz_homedir, 
    114                   psz_artist, psz_album, psz_type ); 
     130                  psz_artist, psz_album, ppsz_type[i] ); 
    115131 
    116132        /* Check if file exists */ 
     
    119135            msg_Dbg( p_parent, "album art %s already exists in cache" 
    120136                             , psz_filename ); 
     137            vlc_meta_SetArtURL( p_item->p_meta, psz_filename ); 
    121138            return VLC_SUCCESS; 
    122139        } 
  • src/input/subtitles.c

    re398a81 r2d90e86  
    223223                             psz_subdir, 
    224224                             psz_subdir[strlen(psz_subdir) - 1] == 
    225                               DIR_SEP ? '\0' : DIR_SEP ); 
     225                              DIR_SEP_CHAR ? '\0' : DIR_SEP_CHAR ); 
    226226                    subdirs[i] = psz_temp; 
    227227                    i++; 
     
    278278 
    279279    /* extract filename & dirname from psz_fname */ 
    280     tmp = strrchr( psz_fname, DIR_SEP ); 
     280    tmp = strrchr( psz_fname, DIR_SEP_CHAR ); 
    281281    if( tmp ) 
    282282    { 
     
    305305        dirlen = strlen( f_dir ); 
    306306        f_dir = (char *)realloc(f_dir, dirlen +2 ); 
    307         f_dir[dirlen] = DIR_SEP
     307        f_dir[dirlen] = DIR_SEP_CHAR
    308308        f_dir[dirlen+1] = '\0'; 
    309309        f_fname = FromLocaleDup( psz_fname ); 
  • src/playlist/control.c

    r5601054 r2d90e86  
    215215} 
    216216 
     217int playlist_AskForArtEnqueue( playlist_t *p_playlist, 
     218                              input_item_t *p_item ) 
     219{ 
     220    int i; 
     221    preparse_item_t p; 
     222    p.p_item = p_item; 
     223    p.b_fetch_art = VLC_TRUE; 
     224 
     225    vlc_mutex_lock( &p_playlist->p_secondary_preparse->object_lock ); 
     226    for( i = 0; i < p_playlist->p_secondary_preparse->i_waiting && 
     227         p_playlist->p_secondary_preparse->p_waiting->b_fetch_art == VLC_TRUE; 
     228         i++ ); 
     229    vlc_gc_incref( p_item ); 
     230    INSERT_ELEM( p_playlist->p_secondary_preparse->p_waiting, 
     231                 p_playlist->p_secondary_preparse->i_waiting, 
     232                 i, 
     233                 p ); 
     234    vlc_mutex_unlock( &p_playlist->p_secondary_preparse->object_lock ); 
     235    return VLC_SUCCESS; 
     236} 
     237 
    217238void PreparseEnqueueItemSub( playlist_t *p_playlist, 
    218239                             playlist_item_t *p_item ) 
  • src/playlist/engine.c

    rbd3484b r2d90e86  
    460460        { 
    461461            vlc_bool_t b_preparsed = VLC_FALSE; 
     462            preparse_item_t p; 
    462463            if( strncmp( p_current->psz_uri, "http:", 5 ) && 
    463464                strncmp( p_current->psz_uri, "rtsp:", 5 ) && 
     
    489490             *       - don't do this for things we won't get meta for, like 
    490491             *         videos 
     492             * -> done in input_MetaFetch atm 
    491493             */ 
    492             if( !(p_current->p_meta->psz_title && *p_current->p_meta->psz_title 
     494            /*if( !(p_current->p_meta->psz_title && *p_current->p_meta->psz_title 
    493495                && p_current->p_meta->psz_artist && 
    494496                   *p_current->p_meta->psz_artist) ) 
    495             { 
     497            {*/ 
     498                p.p_item = p_current; 
     499                p.b_fetch_art = VLC_FALSE; 
    496500                vlc_mutex_lock( &p_playlist->p_secondary_preparse->object_lock); 
    497                 INSERT_ELEM( p_playlist->p_secondary_preparse->pp_waiting, 
     501                INSERT_ELEM( p_playlist->p_secondary_preparse->p_waiting, 
    498502                             p_playlist->p_secondary_preparse->i_waiting, 
    499503                             p_playlist->p_secondary_preparse->i_waiting, 
    500                              p_current ); 
     504                             p ); 
    501505                vlc_mutex_unlock( 
    502506                            &p_playlist->p_secondary_preparse->object_lock); 
    503            
     507            /*
    504508            else 
    505                 vlc_gc_decref( p_current ); 
     509                vlc_gc_decref( p_current );*/ 
    506510            PL_UNLOCK; 
    507511        } 
     
    520524 
    521525/** Main loop for secondary preparser queue */ 
    522 void playlist_SecondaryPreparseLoop( playlist_preparse_t *p_obj ) 
     526void playlist_SecondaryPreparseLoop( playlist_secondary_preparse_t *p_obj ) 
    523527{ 
    524528    playlist_t *p_playlist = (playlist_t *)p_obj->p_parent; 
     
    528532    if( p_obj->i_waiting > 0 ) 
    529533    { 
    530         input_item_t *p_current = p_obj->pp_waiting[0]; 
    531         REMOVE_ELEM( p_obj->pp_waiting, p_obj->i_waiting, 0 ); 
     534        vlc_bool_t b_fetch_art = p_obj->p_waiting->b_fetch_art; 
     535        input_item_t *p_item = p_obj->p_waiting->p_item; 
     536        REMOVE_ELEM( p_obj->p_waiting, p_obj->i_waiting, 0 ); 
    532537        vlc_mutex_unlock( &p_obj->object_lock ); 
    533         if( p_current ) 
    534         { 
    535             input_MetaFetch( p_playlist, p_current ); 
    536             p_current->p_meta->i_status |= ITEM_META_FETCHED; 
    537             var_SetInteger( p_playlist, "item-change", p_current->i_id ); 
    538             vlc_gc_decref( p_current ); 
     538        if( p_item ) 
     539        { 
     540            input_MetaFetch( p_playlist, p_item ); 
     541            p_item->p_meta->i_status |= ITEM_META_FETCHED; 
     542            if( b_fetch_art == VLC_TRUE ) 
     543            { 
     544                input_ArtFetch( p_playlist, p_item ); 
     545                p_item->p_meta->i_status |= ITEM_ART_FETCHED; 
     546            } 
     547            var_SetInteger( p_playlist, "item-change", p_item->i_id ); 
     548            vlc_gc_decref( p_item ); 
    539549        } 
    540550        else 
  • src/playlist/playlist_internal.h

    r5601054 r2d90e86  
    4040}; 
    4141 
     42typedef struct preparse_item_t 
     43{ 
     44    input_item_t *p_item; 
     45    vlc_bool_t   b_fetch_art; 
     46} preparse_item_t; 
     47 
     48struct playlist_secondary_preparse_t 
     49{ 
     50    VLC_COMMON_MEMBERS 
     51    vlc_mutex_t     lock; 
     52    int             i_waiting; 
     53    preparse_item_t *p_waiting; 
     54}; 
    4255 
    4356/***************************************************************************** 
     
    5366void playlist_LastLoop( playlist_t * ); 
    5467void playlist_PreparseLoop( playlist_preparse_t * ); 
    55 void playlist_SecondaryPreparseLoop( playlist_preparse_t * ); 
     68void playlist_SecondaryPreparseLoop( playlist_secondary_preparse_t * ); 
    5669 
    5770/* Control */ 
  • src/playlist/thread.c

    r5601054 r2d90e86  
    3434static void RunControlThread ( playlist_t * ); 
    3535static void RunPreparse( playlist_preparse_t * ); 
    36 static void RunSecondaryPreparse( playlist_preparse_t * ); 
     36static void RunSecondaryPreparse( playlist_secondary_preparse_t * ); 
    3737 
    3838static playlist_t * CreatePlaylist( vlc_object_t *p_parent ); 
     
    9797    // Secondary Preparse 
    9898    p_playlist->p_secondary_preparse = vlc_object_create( p_playlist, 
    99                                   sizeof( playlist_preparse_t ) ); 
     99                              sizeof( playlist_secondary_preparse_t ) ); 
    100100    if( !p_playlist->p_secondary_preparse ) 
    101101    { 
     
    105105    } 
    106106    p_playlist->p_secondary_preparse->i_waiting = 0; 
    107     p_playlist->p_secondary_preparse->pp_waiting = NULL; 
     107    p_playlist->p_secondary_preparse->p_waiting = NULL; 
    108108 
    109109    vlc_object_attach( p_playlist->p_secondary_preparse, p_playlist ); 
     
    219219} 
    220220 
    221 static void RunSecondaryPreparse( playlist_preparse_t *p_obj ) 
     221static void RunSecondaryPreparse( playlist_secondary_preparse_t *p_obj ) 
    222222{ 
    223223    playlist_t *p_playlist = (playlist_t *)p_obj->p_parent;