void media_global_hold(int on, int flag) { int i; int count; media_pipe_t *mp; hts_mutex_lock(&media_mutex); count = num_media_pipelines; media_pipe_t **mpv = alloca(count * sizeof(media_pipe_t *)); i = 0; LIST_FOREACH(mp, &media_pipelines, mp_global_link) mpv[i++] = mp_retain(mp); hts_mutex_unlock(&media_mutex); for(i = 0; i < count; i++) { mp = mpv[i]; if(!(mp->mp_flags & MP_VIDEO)) continue; if(on) mp_hold(mp, flag, NULL); else mp_unhold(mp, flag); mp_release(mp); } }
void mp_reset(media_pipe_t *mp) { mp_unhold(mp, MP_HOLD_PRE_BUFFERING | MP_HOLD_STREAM | MP_HOLD_SYNC); cancellable_reset(mp->mp_cancellable); prop_set(mp->mp_prop_io, "bitrate", PROP_SET_VOID); prop_set(mp->mp_prop_io, "bitrateValid", PROP_SET_VOID); prop_t *p = prop_create(mp->mp_prop_io, "infoNodes"); prop_destroy_childs(p); prop_destroy_childs(mp->mp_prop_audio_tracks); prop_destroy_childs(mp->mp_prop_subtitle_tracks); prop_set_void(mp->mp_prop_audio_track_current); mp_add_track_off(mp->mp_prop_subtitle_tracks, "sub:off"); prop_set_string(mp->mp_prop_subtitle_track_current, "sub:off"); }