@ -963,14 +963,33 @@ static int read_data(void *opaque, uint8_t *buf, int buf_size)
int ret , i ;
int ret , i ;
int just_opened = 0 ;
int just_opened = 0 ;
restart :
if ( ! v - > needed )
if ( ! v - > needed )
return AVERROR_EOF ;
return AVERROR_EOF ;
restart :
if ( ! v - > input ) {
if ( ! v - > input ) {
int64_t reload_interval ;
/* Check that the playlist is still needed before opening a new
* segment . */
if ( v - > ctx & & v - > ctx - > nb_streams & &
v - > parent - > nb_streams > = v - > stream_offset + v - > ctx - > nb_streams ) {
v - > needed = 0 ;
for ( i = v - > stream_offset ; i < v - > stream_offset + v - > ctx - > nb_streams ;
i + + ) {
if ( v - > parent - > streams [ i ] - > discard < AVDISCARD_ALL )
v - > needed = 1 ;
}
}
if ( ! v - > needed ) {
av_log ( v - > parent , AV_LOG_INFO , " No longer receiving playlist %d \n " ,
v - > index ) ;
return AVERROR_EOF ;
}
/* If this is a live stream and the reload interval has elapsed since
/* If this is a live stream and the reload interval has elapsed since
* the last playlist reload , reload the playlists now . */
* the last playlist reload , reload the playlists now . */
int64_t reload_interval = default_reload_interval ( v ) ;
reload_interval = default_reload_interval ( v ) ;
reload :
reload :
if ( ! v - > finished & &
if ( ! v - > finished & &
@ -1029,20 +1048,6 @@ reload:
c - > end_of_segment = 1 ;
c - > end_of_segment = 1 ;
c - > cur_seq_no = v - > cur_seq_no ;
c - > cur_seq_no = v - > cur_seq_no ;
if ( v - > ctx & & v - > ctx - > nb_streams & &
v - > parent - > nb_streams > = v - > stream_offset + v - > ctx - > nb_streams ) {
v - > needed = 0 ;
for ( i = v - > stream_offset ; i < v - > stream_offset + v - > ctx - > nb_streams ;
i + + ) {
if ( v - > parent - > streams [ i ] - > discard < AVDISCARD_ALL )
v - > needed = 1 ;
}
}
if ( ! v - > needed ) {
av_log ( v - > parent , AV_LOG_INFO , " No longer receiving playlist %d \n " ,
v - > index ) ;
return AVERROR_EOF ;
}
goto restart ;
goto restart ;
}
}