diff --git a/include/vlc_common.h b/include/vlc_common.h index d702dfa2af..e493d9a023 100644 --- a/include/vlc_common.h +++ b/include/vlc_common.h @@ -206,6 +206,7 @@ typedef struct msg_subscription_t msg_subscription_t; */ typedef enum { PLAYLIST_PLAY, /**< No arg. res=can fail*/ + PLAYLIST_AUTOPLAY, /**< No arg. res=cant fail*/ PLAYLIST_VIEWPLAY, /**< arg1= int, arg2= playlist_item_t*,*/ /** arg3 = playlist_item_t* , res=can fail */ PLAYLIST_ITEMPLAY, /** status.i_view = -1; - playlist_Play( p_playlist ); + playlist_Control( p_playlist, PLAYLIST_AUTOPLAY ); vlc_object_release( p_playlist ); } } diff --git a/modules/services_discovery/sap.c b/modules/services_discovery/sap.c index 87f7e2d11f..3c5b8625c0 100644 --- a/modules/services_discovery/sap.c +++ b/modules/services_discovery/sap.c @@ -970,6 +970,7 @@ static sdp_t * ParseSDP( vlc_object_t *p_obj, char* psz_sdp ) { sdp_t *p_sdp; vlc_bool_t b_invalid = VLC_FALSE; + vlc_bool_t b_end = VLC_FALSE; if( psz_sdp == NULL ) { @@ -978,7 +979,8 @@ static sdp_t * ParseSDP( vlc_object_t *p_obj, char* psz_sdp ) if( psz_sdp[0] != 'v' || psz_sdp[1] != '=' ) { - msg_Warn( p_obj, "bad SDP packet" ); + msg_Warn( p_obj, "bad SDP packet, begins with 0x%x(%c) 0x%x(%c)", + psz_sdp[0],psz_sdp[0],psz_sdp[1],psz_sdp[1]); return NULL; } @@ -997,7 +999,7 @@ static sdp_t * ParseSDP( vlc_object_t *p_obj, char* psz_sdp ) p_sdp->i_attributes = 0; p_sdp->pp_attributes = NULL; - while( *psz_sdp != '\0' ) + while( *psz_sdp != '\0' && b_end == VLC_FALSE ) { char *psz_eol; char *psz_eof; @@ -1013,6 +1015,7 @@ static sdp_t * ParseSDP( vlc_object_t *p_obj, char* psz_sdp ) if( ( psz_eol = strchr( psz_sdp, '\n' ) ) == NULL ) { psz_eol = psz_sdp + strlen( psz_sdp ); + b_end = VLC_TRUE; } if( psz_eol > psz_sdp && *( psz_eol - 1 ) == '\r' ) { diff --git a/src/playlist/playlist.c b/src/playlist/playlist.c index 71e3041c74..dcb9e46db3 100644 --- a/src/playlist/playlist.c +++ b/src/playlist/playlist.c @@ -306,6 +306,12 @@ int playlist_vaControl( playlist_t * p_playlist, int i_query, va_list args ) p_playlist->request.i_goto = -1; break; + case PLAYLIST_AUTOPLAY: + p_playlist->status.i_status = PLAYLIST_RUNNING; + + p_playlist->request.b_request = VLC_FALSE; + break; + case PLAYLIST_PAUSE: val.i_int = 0; if( p_playlist->p_input ) @@ -357,6 +363,7 @@ int playlist_vaControl( playlist_t * p_playlist, int i_query, va_list args ) } vlc_mutex_unlock( &p_playlist->object_lock ); + fprintf(stderr,"control done, request is %i\n", p_playlist->request.b_request); return VLC_SUCCESS; } @@ -817,6 +824,10 @@ static playlist_item_t * NextItem( playlist_t *p_playlist ) { p_playlist->i_index++; p_new = p_playlist->pp_items[p_playlist->i_index]; + if( !(p_new->i_flags & PLAYLIST_SKIP_FLAG) ) + { + return NULL; + } } else {