X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Finput%2Fes_out.c;h=271dd59d88e283a7ab50cc6e36115f851b754f63;hb=8e787d7f2bbc87ce29881559f0665fc352326460;hp=5276412d924dd7018cfce5d5600a3d75209de7f4;hpb=4c8f79f7bed40cf05497d44fc05563d76e67438b;p=vlc diff --git a/src/input/es_out.c b/src/input/es_out.c index 5276412d92..271dd59d88 100644 --- a/src/input/es_out.c +++ b/src/input/es_out.c @@ -670,7 +670,7 @@ static void EsOutDecodersStopBuffering( es_out_t *out, bool b_forced ) (int)(mdate() - i_decoder_buffering_start)/1000 ); /* Here is a good place to destroy unused vout with every demuxer */ - input_ressource_TerminateVout( p_sys->p_input->p->p_ressource ); + input_resource_TerminateVout( p_sys->p_input->p->p_resource ); /* */ const mtime_t i_wakeup_delay = 10*1000; /* FIXME CLEANUP thread wake up time*/ @@ -1093,6 +1093,20 @@ static int EsOutProgramDel( es_out_t *out, int i_group ) return VLC_SUCCESS; } +/* EsOutProgramFind + */ +static es_out_pgrm_t *EsOutProgramFind( es_out_t *p_out, int i_group ) +{ + es_out_sys_t *p_sys = p_out->p_sys; + + for( int i = 0; i < p_sys->i_pgrm; i++ ) + { + if( p_sys->pgrm[i]->i_id == i_group ) + return p_sys->pgrm[i]; + } + return EsOutProgramAdd( p_out, i_group ); +} + /* EsOutProgramMeta: */ static char *EsOutProgramGetMetaName( es_out_pgrm_t *p_pgrm ) @@ -1114,7 +1128,7 @@ static char *EsOutProgramGetMetaName( es_out_pgrm_t *p_pgrm ) static void EsOutProgramMeta( es_out_t *out, int i_group, vlc_meta_t *p_meta ) { es_out_sys_t *p_sys = out->p_sys; - es_out_pgrm_t *p_pgrm = NULL; + es_out_pgrm_t *p_pgrm; input_thread_t *p_input = p_sys->p_input; char *psz_cat; const char *psz_title = NULL; @@ -1132,16 +1146,9 @@ static void EsOutProgramMeta( es_out_t *out, int i_group, vlc_meta_t *p_meta ) return; } /* Find program */ - for( i = 0; i < p_sys->i_pgrm; i++ ) - { - if( p_sys->pgrm[i]->i_id == i_group ) - { - p_pgrm = p_sys->pgrm[i]; - break; - } - } - if( p_pgrm == NULL ) - p_pgrm = EsOutProgramAdd( out, i_group ); /* Create it */ + p_pgrm = EsOutProgramFind( out, i_group ); + if( !p_pgrm ) + return; /* */ psz_title = vlc_meta_Get( p_meta, vlc_meta_Title); @@ -1240,7 +1247,8 @@ static void vlc_epg_Merge( vlc_epg_t *p_dst, const vlc_epg_t *p_src ) } } /* Update current */ - vlc_epg_SetCurrent( p_dst, p_src->p_current ? p_src->p_current->i_start : -1 ); + if( p_src->p_current ) + vlc_epg_SetCurrent( p_dst, p_src->p_current->i_start ); /* Keep only 1 old event */ if( p_dst->p_current ) @@ -1254,21 +1262,14 @@ static void EsOutProgramEpg( es_out_t *out, int i_group, vlc_epg_t *p_epg ) { es_out_sys_t *p_sys = out->p_sys; input_thread_t *p_input = p_sys->p_input; - es_out_pgrm_t *p_pgrm = NULL; + es_out_pgrm_t *p_pgrm; char *psz_cat; int i; /* Find program */ - for( i = 0; i < p_sys->i_pgrm; i++ ) - { - if( p_sys->pgrm[i]->i_id == i_group ) - { - p_pgrm = p_sys->pgrm[i]; - break; - } - } - if( p_pgrm == NULL ) - p_pgrm = EsOutProgramAdd( out, i_group ); /* Create it */ + p_pgrm = EsOutProgramFind( out, i_group ); + if( !p_pgrm ) + return; /* Merge EPG */ if( !p_pgrm->p_epg ) @@ -1292,7 +1293,9 @@ static void EsOutProgramEpg( es_out_t *out, int i_group, vlc_epg_t *p_epg ) localtime_r( &t_start, &tm_start ); - snprintf( psz_start, sizeof(psz_start), "%2.2d:%2.2d:%2.2d", tm_start.tm_hour, tm_start.tm_min, tm_start.tm_sec ); + snprintf( psz_start, sizeof(psz_start), "%4.4d-%2.2d-%2.2d %2.2d:%2.2d:%2.2d", + 1900 + tm_start.tm_year, 1 + tm_start.tm_mon, tm_start.tm_mday, + tm_start.tm_hour, tm_start.tm_min, tm_start.tm_sec ); if( p_evt->psz_short_description || p_evt->psz_description ) input_Control( p_input, INPUT_ADD_INFO, psz_epg, psz_start, "%s (%2.2d:%2.2d) - %s", p_evt->psz_name, @@ -1308,8 +1311,8 @@ static void EsOutProgramEpg( es_out_t *out, int i_group, vlc_epg_t *p_epg ) /* Update now playing */ free( p_pgrm->psz_now_playing ); p_pgrm->psz_now_playing = NULL; - if( p_epg->p_current && p_epg->p_current->psz_name && *p_epg->p_current->psz_name ) - p_pgrm->psz_now_playing = strdup( p_epg->p_current->psz_name ); + if( p_pgrm->p_epg->p_current && p_pgrm->p_epg->p_current->psz_name && *p_pgrm->p_epg->p_current->psz_name ) + p_pgrm->psz_now_playing = strdup( p_pgrm->p_epg->p_current->psz_name ); if( p_pgrm == p_sys->p_pgrm ) { @@ -1346,8 +1349,8 @@ static es_out_id_t *EsOutAdd( es_out_t *out, const es_format_t *fmt ) return NULL; } - es_out_id_t *es = malloc( sizeof( *es ) ); - es_out_pgrm_t *p_pgrm = NULL; + es_out_id_t *es = malloc( sizeof( *es ) ); + es_out_pgrm_t *p_pgrm; int i; if( !es ) @@ -1356,18 +1359,12 @@ static es_out_id_t *EsOutAdd( es_out_t *out, const es_format_t *fmt ) vlc_mutex_lock( &p_sys->lock ); /* Search the program */ - for( i = 0; i < p_sys->i_pgrm; i++ ) - { - if( fmt->i_group == p_sys->pgrm[i]->i_id ) - { - p_pgrm = p_sys->pgrm[i]; - break; - } - } - if( p_pgrm == NULL ) + p_pgrm = EsOutProgramFind( out, fmt->i_group ); + if( !p_pgrm ) { - /* Create a new one */ - p_pgrm = EsOutProgramAdd( out, fmt->i_group ); + vlc_mutex_unlock( &p_sys->lock ); + free( es ); + return NULL; } /* Increase ref count for program */ @@ -2040,7 +2037,7 @@ static int EsOutControlLocked( es_out_t *out, int i_query, va_list args ) break; } if( i >= p_sys->i_es ) - input_ressource_TerminateVout( p_sys->p_input->p->p_ressource ); + input_resource_TerminateVout( p_sys->p_input->p->p_resource ); } p_sys->b_active = b; return VLC_SUCCESS; @@ -2170,22 +2167,16 @@ static int EsOutControlLocked( es_out_t *out, int i_query, va_list args ) if( i_query == ES_OUT_SET_PCR ) { p_pgrm = p_sys->p_pgrm; + if( !p_pgrm ) + p_pgrm = EsOutProgramAdd( out, i_group ); /* Create it */ } else { - int i; i_group = (int)va_arg( args, int ); - for( i = 0; i < p_sys->i_pgrm; i++ ) - { - if( p_sys->pgrm[i]->i_id == i_group ) - { - p_pgrm = p_sys->pgrm[i]; - break; - } - } + p_pgrm = EsOutProgramFind( out, i_group ); } - if( p_pgrm == NULL ) - p_pgrm = EsOutProgramAdd( out, i_group ); /* Create it */ + if( !p_pgrm ) + return VLC_EGENERIC; i_pcr = (int64_t)va_arg( args, int64_t ); /* search program @@ -2317,7 +2308,7 @@ static int EsOutControlLocked( es_out_t *out, int i_query, va_list args ) /* Clean up vout after user action (in active mode only). * FIXME it does not work well with multiple video windows */ if( p_sys->b_active ) - input_ressource_TerminateVout( p_sys->p_input->p->p_ressource ); + input_resource_TerminateVout( p_sys->p_input->p->p_resource ); return i_ret; }