void VlcProc::reset_input() { SET_BOOL( m_cVarSeekable, false ); SET_BOOL( m_cVarRecordable, false ); SET_BOOL( m_cVarRecording, false ); SET_BOOL( m_cVarDvdActive, false ); SET_BOOL( m_cVarHasAudio, false ); SET_BOOL( m_cVarHasVout, false ); SET_BOOL( m_cVarStopped, true ); SET_BOOL( m_cVarPlaying, false ); SET_BOOL( m_cVarPaused, false ); SET_STREAMTIME( m_cVarTime, 0, false ); SET_TEXT( m_cVarStreamName, UString( getIntf(), "") ); SET_TEXT( m_cVarStreamURI, UString( getIntf(), "") ); SET_TEXT( m_cVarStreamBitRate, UString( getIntf(), "") ); SET_TEXT( m_cVarStreamSampleRate, UString( getIntf(), "") ); getPlaytreeVar().onUpdateCurrent( false ); }
void VlcProc::on_intf_event_changed( vlc_object_t* p_obj, vlc_value_t newVal ) { input_thread_t* pInput = (input_thread_t*) p_obj; assert( getIntf()->p_sys->p_input == NULL || getIntf()->p_sys->p_input == pInput ); if( !getIntf()->p_sys->p_input ) { msg_Dbg( getIntf(), "new input %p detected", pInput ); getIntf()->p_sys->p_input = pInput; vlc_object_hold( pInput ); } switch( newVal.i_int ) { case INPUT_EVENT_STATE: { int state = var_GetInteger( pInput, "state" ); SET_BOOL( m_cVarStopped, false ); SET_BOOL( m_cVarPlaying, state != PAUSE_S ); SET_BOOL( m_cVarPaused, state == PAUSE_S ); break; } case INPUT_EVENT_POSITION: { float pos = var_GetFloat( pInput, "position" ); SET_STREAMTIME( m_cVarTime, pos, false ); SET_BOOL( m_cVarSeekable, pos != 0.0 ); break; } case INPUT_EVENT_RATE: { float rate = var_GetFloat( pInput, "rate" ); char* buffer; if( asprintf( &buffer, "%.3g", rate ) != -1 ) { SET_TEXT( m_cVarSpeed, UString( getIntf(), buffer ) ); free( buffer ); } break; } case INPUT_EVENT_ES: { // Do we have audio vlc_value_t audio_es; var_Change( pInput, "audio-es", VLC_VAR_CHOICESCOUNT, &audio_es, NULL ); SET_BOOL( m_cVarHasAudio, audio_es.i_int > 0 ); break; } case INPUT_EVENT_VOUT: { vout_thread_t* pVout = input_GetVout( pInput ); SET_BOOL( m_cVarHasVout, pVout != NULL ); if( !pVout || pVout == m_pVout ) { // end of input or vout reuse (nothing to do) if( pVout ) vlc_object_release( pVout ); break; } if( m_pVout ) { // remove previous Vout callbacks var_DelCallback( m_pVout, "mouse-moved", onGenericCallback, this ); vlc_object_release( m_pVout ); m_pVout = NULL; } // add new Vout callbackx var_AddCallback( pVout, "mouse-moved", onGenericCallback, this ); m_pVout = pVout; break; } case INPUT_EVENT_AOUT: { audio_output_t* pAout = input_GetAout( pInput ); // end of input or aout reuse (nothing to do) if( !pAout || pAout == m_pAout ) { if( pAout ) vlc_object_release( pAout ); break; } // remove previous Aout if any if( m_pAout ) { var_DelCallback( m_pAout, "audio-filter", onGenericCallback, this ); if( m_bEqualizer_started ) { var_DelCallback( m_pAout, "equalizer-bands", onEqBandsChange, this ); var_DelCallback( m_pAout, "equalizer-preamp", onEqPreampChange, this ); } vlc_object_release( m_pAout ); m_pAout = NULL; m_bEqualizer_started = false; } // New Aout (addCallbacks) var_AddCallback( pAout, "audio-filter", onGenericCallback, this ); char *pFilters = var_GetNonEmptyString( pAout, "audio-filter" ); bool b_equalizer = pFilters && strstr( pFilters, "equalizer" ); free( pFilters ); SET_BOOL( m_cVarEqualizer, b_equalizer ); if( b_equalizer ) { var_AddCallback( pAout, "equalizer-bands", onEqBandsChange, this ); var_AddCallback( pAout, "equalizer-preamp", onEqPreampChange, this ); m_bEqualizer_started = true; } m_pAout = pAout; break; } case INPUT_EVENT_CHAPTER: { vlc_value_t chapters_count; var_Change( pInput, "chapter", VLC_VAR_CHOICESCOUNT, &chapters_count, NULL ); SET_BOOL( m_cVarDvdActive, chapters_count.i_int > 0 ); break; } case INPUT_EVENT_RECORD: SET_BOOL( m_cVarRecording, var_GetBool( pInput, "record" ) ); break; case INPUT_EVENT_DEAD: msg_Dbg( getIntf(), "end of input detected for %p", pInput ); var_DelCallback( pInput, "intf-event", onGenericCallback2, this ); var_DelCallback( pInput, "bit-rate", onGenericCallback, this ); var_DelCallback( pInput, "sample-rate", onGenericCallback, this ); var_DelCallback( pInput, "can-record" , onGenericCallback, this ); vlc_object_release( pInput ); getIntf()->p_sys->p_input = NULL; reset_input(); break; default: break; } }
void VlcProc::on_intf_event_changed( vlc_object_t* p_obj, vlc_value_t newVal ) { input_thread_t* pInput = (input_thread_t*) p_obj; assert( getIntf()->p_sys->p_input == NULL || getIntf()->p_sys->p_input == pInput ); if( !getIntf()->p_sys->p_input ) { msg_Dbg( getIntf(), "new input %p detected", pInput ); getIntf()->p_sys->p_input = pInput; vlc_object_hold( pInput ); // update global variables pertaining to this input update_current_input(); // ensure the playtree is also updated // (highlights the new item to be played back) getPlaytreeVar().onUpdateCurrent( true ); } switch( newVal.i_int ) { case INPUT_EVENT_STATE: { int state = var_GetInteger( pInput, "state" ); SET_BOOL( m_cVarStopped, false ); SET_BOOL( m_cVarPlaying, state != PAUSE_S ); SET_BOOL( m_cVarPaused, state == PAUSE_S ); break; } case INPUT_EVENT_POSITION: { float pos = var_GetFloat( pInput, "position" ); SET_STREAMTIME( m_cVarTime, pos, false ); SET_BOOL( m_cVarSeekable, pos != 0.0 ); break; } case INPUT_EVENT_RATE: { float rate = var_GetFloat( pInput, "rate" ); char* buffer; if( asprintf( &buffer, "%.3g", rate ) != -1 ) { SET_TEXT( m_cVarSpeed, UString( getIntf(), buffer ) ); free( buffer ); } break; } case INPUT_EVENT_ES: { // Do we have audio vlc_value_t audio_es; var_Change( pInput, "audio-es", VLC_VAR_CHOICESCOUNT, &audio_es, NULL ); SET_BOOL( m_cVarHasAudio, audio_es.i_int > 0 ); break; } case INPUT_EVENT_VOUT: { vout_thread_t* pVout = input_GetVout( pInput ); SET_BOOL( m_cVarHasVout, pVout != NULL ); if( !pVout || pVout == m_pVout ) { // end of input or vout reuse (nothing to do) if( pVout ) vlc_object_release( pVout ); break; } if( m_pVout ) { // remove previous Vout callbacks var_DelCallback( m_pVout, "mouse-moved", onGenericCallback, this ); vlc_object_release( m_pVout ); m_pVout = NULL; } // add new Vout callbackx var_AddCallback( pVout, "mouse-moved", onGenericCallback, this ); m_pVout = pVout; break; } case INPUT_EVENT_CHAPTER: { vlc_value_t chapters_count; var_Change( pInput, "chapter", VLC_VAR_CHOICESCOUNT, &chapters_count, NULL ); SET_BOOL( m_cVarDvdActive, chapters_count.i_int > 0 ); break; } case INPUT_EVENT_RECORD: SET_BOOL( m_cVarRecording, var_GetBool( pInput, "record" ) ); break; case INPUT_EVENT_DEAD: msg_Dbg( getIntf(), "end of input detected for %p", pInput ); var_DelCallback( pInput, "intf-event", onGenericCallback2, this ); var_DelCallback( pInput, "bit-rate", onGenericCallback, this ); var_DelCallback( pInput, "sample-rate", onGenericCallback, this ); var_DelCallback( pInput, "can-record" , onGenericCallback, this ); vlc_object_release( pInput ); getIntf()->p_sys->p_input = NULL; reset_input(); break; default: break; } }