Changeset e3c6b242570ec32867138f9bd11414400814431b

Show
Ignore:
Timestamp:
04/06/08 19:42:57 (4 months ago)
Author:
Rémi Denis-Courmont <rdenis@simphalempin.com>
git-committer:
Rémi Denis-Courmont <rdenis@simphalempin.com> 1212601377 +0300
git-parent:

[f2852bcf0d7f6d19df6af364d806a42dfc040677]

git-author:
Rémi Denis-Courmont <rdenis@simphalempin.com> 1212600878 +0300
Message:

Remove sout-keep from the input code

It needs to be done by the parent (VLM or playlist)

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • src/input/input.c

    rf2852bc re3c6b24  
    8787static void InputMetaUser( input_thread_t *p_input, vlc_meta_t *p_meta ); 
    8888static void InputUpdateMeta( input_thread_t *p_input, vlc_meta_t *p_meta ); 
    89  
    90 static sout_instance_t *SoutFind( vlc_object_t *p_parent, input_item_t *p_item, bool * ); 
    91 static void SoutKeep( sout_instance_t * ); 
    9289 
    9390static void DemuxMeta( input_thread_t *p_input, vlc_meta_t *p_meta, demux_t *p_demux ); 
     
    186183    p_input->p->p_es_out = NULL; 
    187184    p_input->p->p_sout  = NULL; 
    188     p_input->p->b_owns_its_sout = true; 
    189     p_input->p->b_sout_keep  = false; 
    190185    p_input->p->b_out_pace_control = false; 
    191186    p_input->i_pts_delay = 0; 
     
    294289    /* */ 
    295290    if( p_sout ) 
    296     { 
    297291        p_input->p->p_sout = p_sout; 
    298         p_input->p->b_owns_its_sout = false; 
    299     } 
    300292 
    301293    memset( &p_input->p->counters, 0, sizeof( p_input->p->counters ) ); 
     
    321313    stats_TimerClean( p_input, STATS_TIMER_INPUT_LAUNCHING ); 
    322314#ifdef ENABLE_SOUT 
    323     if( priv->b_owns_its_sout && priv->p_sout ) 
    324     { 
    325         if( priv->b_sout_keep ) 
    326             SoutKeep( priv->p_sout ); 
    327         else 
    328             sout_DeleteInstance( priv->p_sout ); 
    329     } 
     315    if( priv->p_sout ) 
     316        sout_DeleteInstance( priv->p_sout ); 
    330317#endif 
    331318    vlc_gc_decref( p_input->p->input.p_item ); 
     
    348335                                      input_item_t *p_item ) 
    349336{ 
    350     bool b_sout_keep; 
    351     sout_instance_t *p_sout = SoutFind( p_parent, p_item, &b_sout_keep ); 
    352     input_thread_t *p_input =  __input_CreateThreadExtended( p_parent, p_item, NULL, p_sout ); 
    353  
    354     if( !p_input && p_sout ) 
    355         SoutKeep( p_sout ); 
    356  
    357     p_input->p->b_sout_keep = b_sout_keep; 
    358     return p_input; 
     337    return __input_CreateThreadExtended( p_parent, p_item, NULL, NULL ); 
    359338} 
    360339 
     
    396375                   bool b_block ) 
    397376{ 
    398     bool b_sout_keep; 
    399     sout_instance_t *p_sout = SoutFind( p_parent, p_item, &b_sout_keep ); 
    400377    input_thread_t *p_input; 
    401378 
    402     p_input = Create( p_parent, p_item, NULL, false, p_sout ); 
     379    p_input = Create( p_parent, p_item, NULL, false, NULL ); 
    403380    if( !p_input ) 
    404     { 
    405         if( p_sout ) 
    406             SoutKeep( p_sout ); 
    407381        return VLC_EGENERIC; 
    408     } 
    409     p_input->p->b_sout_keep = b_sout_keep; 
    410382 
    411383    if( b_block ) 
     
    500472sout_instance_t * input_DetachSout( input_thread_t *p_input ) 
    501473{ 
    502     p_input->p->b_owns_its_sout = false; 
    503     return p_input->p->p_sout; 
     474    sout_instance_t *p_sout = p_input->p->p_sout; 
     475    vlc_object_detach( p_sout ); 
     476    p_input->p->p_sout = NULL; 
     477    return p_sout; 
    504478} 
    505479 
     
    13911365} 
    13921366 
    1393 static sout_instance_t *SoutFind( vlc_object_t *p_parent, input_item_t *p_item, bool *pb_sout_keep ) 
    1394 { 
    1395     bool b_keep_sout = var_CreateGetBool( p_parent, "sout-keep" ); 
    1396     sout_instance_t *p_sout = NULL; 
    1397     int i; 
    1398  
    1399     /* Search sout-keep options 
    1400      * XXX it has to be done here, but it is duplicated work :( */ 
    1401     vlc_mutex_lock( &p_item->lock ); 
    1402     for( i = 0; i < p_item->i_options; i++ ) 
    1403     { 
    1404         const char *psz_option = p_item->ppsz_options[i]; 
    1405         if( !psz_option ) 
    1406             continue; 
    1407         if( *psz_option == ':' ) 
    1408             psz_option++; 
    1409  
    1410         if( !strcmp( psz_option, "sout-keep" ) ) 
    1411             b_keep_sout = true; 
    1412         else if( !strcmp( psz_option, "no-sout-keep" ) || !strcmp( psz_option, "nosout-keep" ) ) 
    1413             b_keep_sout = false; 
    1414     } 
    1415     vlc_mutex_unlock( &p_item->lock ); 
    1416  
    1417     /* Find a potential sout to reuse 
    1418      * XXX it might be unusable but this will be checked later */ 
    1419     if( b_keep_sout ) 
    1420     { 
    1421         playlist_t *p_playlist = vlc_object_find( p_parent->p_libvlc, 
    1422                 VLC_OBJECT_PLAYLIST, FIND_CHILD ); 
    1423         if( p_playlist ) 
    1424         { 
    1425             vlc_mutex_lock( &p_playlist->gc_lock ); 
    1426             p_sout = vlc_object_find( p_playlist, VLC_OBJECT_SOUT, FIND_CHILD ); 
    1427             if( p_sout ) 
    1428             { 
    1429                 if( p_sout->p_parent != VLC_OBJECT( p_playlist ) ) 
    1430                 { 
    1431                     vlc_object_release( p_sout ); 
    1432                     p_sout = NULL; 
    1433                 } 
    1434                 else 
    1435                 { 
    1436                     vlc_object_detach( p_sout );    /* Remove it from the GC */ 
    1437                     vlc_object_release( p_sout ); 
    1438                 } 
    1439             } 
    1440             vlc_mutex_unlock( &p_playlist->gc_lock ); 
    1441             vlc_object_release( p_playlist ); 
    1442         } 
    1443     } 
    1444  
    1445     if( pb_sout_keep ) 
    1446         *pb_sout_keep = b_keep_sout; 
    1447  
    1448     return p_sout; 
    1449 } 
    1450  
    1451 static void SoutKeep( sout_instance_t *p_sout ) 
    1452 { 
    1453     playlist_t * p_playlist = vlc_object_find( p_sout, VLC_OBJECT_PLAYLIST, 
    1454                                                 FIND_PARENT ); 
    1455     if( p_playlist ) 
    1456     { 
    1457         msg_Dbg( p_sout, "sout has been kept" ); 
    1458         vlc_object_attach( p_sout, p_playlist ); 
    1459         vlc_object_release( p_playlist ); 
    1460     } 
    1461     else 
    1462         sout_DeleteInstance( p_sout ); 
    1463 } 
    1464  
    14651367/***************************************************************************** 
    14661368 * Control 
  • src/input/input_internal.h

    r7bc28ee re3c6b24  
    105105    es_out_t    *p_es_out; 
    106106    sout_instance_t *p_sout;            /* XXX Move it to es_out ? */ 
    107     bool      b_sout_keep; 
    108107    bool      b_out_pace_control; /*     idem ? */ 
    109     bool      b_owns_its_sout; 
    110108 
    111109    /* Main input properties */