void VlcMediaWidget::updateAudioStreams() { audioStreams.clear(); libvlc_track_description_t *track = libvlc_audio_get_track_description(vlcMediaPlayer); if (track != NULL) { // skip the 'deactivate' audio channel track = track->p_next; } while (track != NULL) { QString audioStream = QString::fromUtf8(track->psz_name); int cutBegin = (audioStream.indexOf(QLatin1Char('[')) + 1); if (cutBegin > 0) { int cutEnd = audioStream.lastIndexOf(QLatin1Char(']')); if (cutEnd >= 0) { // remove unnecessary text audioStream = audioStream.mid(cutBegin, cutEnd - cutBegin); } } if (audioStream.isEmpty()) { audioStream = QString::number(audioStreams.size() + 1); } audioStreams.append(audioStream); track = track->p_next; } // skip the 'deactivate' audio channel currentAudioStream = (libvlc_audio_get_track(vlcMediaPlayer) - 1); }
static void _send_all_track_info(struct _App *app) { int track_count, current; libvlc_track_description_t *desc; current = libvlc_audio_get_track(app->mp); track_count = libvlc_audio_get_track_count(app->mp); desc = libvlc_audio_get_track_description(app->mp); _send_track_info(app, EM_RESULT_AUDIO_TRACK_INFO, current, track_count, desc); current = libvlc_video_get_track(app->mp); track_count = libvlc_video_get_track_count(app->mp); desc = libvlc_video_get_track_description(app->mp); _send_track_info(app, EM_RESULT_VIDEO_TRACK_INFO, current, track_count, desc); current = libvlc_video_get_spu(app->mp); track_count = libvlc_video_get_spu_count(app->mp); desc = libvlc_video_get_spu_description(app->mp); _send_track_info(app, EM_RESULT_SPU_TRACK_INFO, current, track_count, desc); }
std::string FBVLCAudioAPI::description(unsigned int trackID) { FBVLCPtr plg = getPlugin(); vlc_player& p = plg->get_player(); std::string track_name; libvlc_track_description_t* root_track_desc = libvlc_audio_get_track_description(p.get_mp()); if( !root_track_desc ) return track_name; unsigned int tc = p.audio().track_count(); if( tc && trackID < tc ) { libvlc_track_description_t* track_desc = root_track_desc; for(; trackID && track_desc ; --trackID ){ track_desc = track_desc->p_next; } if ( track_desc && track_desc->psz_name ) { track_name = track_desc->psz_name; } } libvlc_track_description_list_release(root_track_desc); return track_name; }
jobject Java_org_videolan_libvlc_MediaPlayer_nativeGetAudioTracks(JNIEnv *env, jobject thiz) { vlcjni_object *p_obj = VLCJniObject_getInstance(env, thiz); if (!p_obj) return NULL; return mediaplayer_tracklist_to_object(env, libvlc_audio_get_track_description(p_obj->u.p_mp)); }
void VLCMediaController::refreshAudioChannels() { current_audio_channel = Phonon::AudioChannelDescription(); available_audio_channels.clear(); libvlc_track_description_t * p_info = libvlc_audio_get_track_description( p_vlc_media_player, p_vlc_exception ); checkException(); while( p_info ) { audioChannelAdded( p_info->i_id, p_info->psz_name ); p_info = p_info->p_next; } libvlc_track_description_release( p_info ); }
STDMETHODIMP VLCAudio::description(long trackID, BSTR* name) { if( NULL == name ) return E_POINTER; libvlc_media_player_t* p_md; HRESULT hr = getMD(&p_md); if( SUCCEEDED(hr) ) { int i, i_limit; const char *psz_name; libvlc_track_description_t *p_trackDesc; // get tracks description p_trackDesc = libvlc_audio_get_track_description(p_md); if( !p_trackDesc ) return E_FAIL; //get the number of available track i_limit = libvlc_audio_get_track_count(p_md); if( i_limit < 0 ) return E_FAIL; // check if the number given is a good one if ( ( trackID > ( i_limit -1 ) ) || ( trackID < 0 ) ) return E_FAIL; // get the good trackDesc for( i = 0 ; i < trackID ; i++ ) { p_trackDesc = p_trackDesc->p_next; } // get the track name psz_name = p_trackDesc->psz_name; // return it if( psz_name != NULL ) { *name = BSTRFromCStr(CP_UTF8, psz_name); return (NULL == *name) ? E_OUTOFMEMORY : NOERROR; } *name = NULL; return E_FAIL; } return hr; };
jobject Java_org_videolan_libvlc_LibVLC_getAudioTrackDescription(JNIEnv *env, jobject thiz) { libvlc_media_player_t *mp = getMediaPlayer(env, thiz); if (!mp) return NULL; int i_nbTracks = libvlc_audio_get_track_count(mp) - 1; if (i_nbTracks < 0) i_nbTracks = 0; jclass mapClass = (*env)->FindClass(env, "java/util/Map"); jclass hashMapClass = (*env)->FindClass(env, "java/util/HashMap"); jmethodID mapPut = (*env)->GetMethodID(env, mapClass, "put", "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;"); /* * "What are you building? Lay your hand on it. Where is it?" * We need a concrete map to start */ jmethodID mapInit = (*env)->GetMethodID(env, hashMapClass, "<init>", "()V"); jclass integerCls = (*env)->FindClass(env, "java/lang/Integer"); jmethodID integerConstructor = (*env)->GetMethodID(env, integerCls, "<init>", "(I)V"); jobject audioTrackMap = (*env)->NewObject(env, hashMapClass, mapInit); libvlc_track_description_t *first = libvlc_audio_get_track_description(mp); libvlc_track_description_t *desc = first != NULL ? first->p_next : NULL; unsigned i; for (i = 0; i < i_nbTracks; ++i) { // store audio track ID and name in a map as <ID, Track Name> jobject track_id = (*env)->NewObject(env, integerCls, integerConstructor, desc->i_id); jstring name = (*env)->NewStringUTF(env, desc->psz_name); (*env)->CallObjectMethod(env, audioTrackMap, mapPut, track_id, name); desc = desc->p_next; } libvlc_track_description_list_release(first); // Clean up local references (*env)->DeleteLocalRef(env, mapClass); (*env)->DeleteLocalRef(env, hashMapClass); (*env)->DeleteLocalRef(env, integerCls); return audioTrackMap; }
QList<int> VlcAudio::trackIds() const { QList<int> ids; if (_vlcMediaPlayer) { libvlc_track_description_t *desc; desc = libvlc_audio_get_track_description(_vlcMediaPlayer); VlcError::showErrmsg(); ids << desc->i_id; if (trackCount() > 1) { for(int i = 1; i < trackCount(); i++) { desc = desc->p_next; ids << desc->i_id; } } } return ids; }
QStringList VlcAudio::trackDescription() const { QStringList descriptions; if (_vlcMediaPlayer) { libvlc_track_description_t *desc; desc = libvlc_audio_get_track_description(_vlcMediaPlayer); VlcError::showErrmsg(); descriptions << QString().fromUtf8(desc->psz_name); if (trackCount() > 1) { for (int i = 1; i < trackCount(); i++) { desc = desc->p_next; descriptions << QString().fromUtf8(desc->psz_name); } } } return descriptions; }
void LiveWidget::setupAudioTrackMenu() { if (!libvlc_media_player_is_playing(this->vlcMediaPlayer)) return; foreach (QAction* action, this->audioTrackMenu->actions()) this->audioTrackMenu->removeAction(action); int currentTrack = libvlc_audio_get_track(this->vlcMediaPlayer); libvlc_track_description_t* trackDescription = libvlc_audio_get_track_description(this->vlcMediaPlayer); while (trackDescription != NULL) { this->audioTrackAction = this->audioTrackMenu->addAction(/*QIcon(":/Graphics/Images/RenameRundown.png"),*/ trackDescription->psz_name); this->audioTrackAction->setCheckable(true); this->audioTrackAction->setData(trackDescription->i_id); if (trackDescription->i_id == currentTrack) this->audioTrackAction->setChecked(true); trackDescription = trackDescription->p_next; } }
QString QmlVlcAudio::description( unsigned int trackID ) { QString track_name; libvlc_track_description_t* root_track_desc = libvlc_audio_get_track_description( m_player.get_mp() ); if( !root_track_desc ) return track_name; unsigned int tc = m_player.audio().track_count(); if( tc && trackID < tc ) { libvlc_track_description_t* track_desc = root_track_desc; for( ; trackID && track_desc ; --trackID ){ track_desc = track_desc->p_next; } if ( track_desc && track_desc->psz_name ) { track_name = track_desc->psz_name; } } libvlc_track_description_list_release( root_track_desc ); return track_name; }
RuntimeNPObject::InvokeResult LibvlcAudioNPObject::invoke(int index, const NPVariant *args, uint32_t argCount, NPVariant &result) { /* is plugin still running */ if( isPluginRunning() ) { VlcPlugin* p_plugin = getPrivate<VlcPlugin>(); libvlc_exception_t ex; libvlc_exception_init(&ex); switch( index ) { case ID_audio_togglemute: if( argCount == 0 ) { libvlc_audio_toggle_mute(p_plugin->getVLC(), &ex); RETURN_ON_EXCEPTION(this,ex); VOID_TO_NPVARIANT(result); return INVOKERESULT_NO_ERROR; } return INVOKERESULT_NO_SUCH_METHOD; case ID_audio_description: { if( argCount == 1) { char *psz_name; int i_trackID, i_limit, i; libvlc_track_description_t *p_trackDesc; libvlc_media_player_t *p_md = p_plugin->getMD(&ex); RETURN_ON_EXCEPTION(this,ex); /* get tracks description */ p_trackDesc = libvlc_audio_get_track_description(p_md, &ex); RETURN_ON_EXCEPTION(this,ex); if( !p_trackDesc ) return INVOKERESULT_GENERIC_ERROR; /* get the number of track available */ i_limit = libvlc_audio_get_track_count(p_md, &ex); RETURN_ON_EXCEPTION(this,ex); /* check if a number is given by the user * and get the track number */ if( isNumberValue(args[0]) ) i_trackID = numberValue(args[0]); else return INVOKERESULT_INVALID_VALUE; /* if bad number is given return invalid value */ if ( ( i_trackID > ( i_limit - 1 ) ) || ( i_trackID < 0 ) ) return INVOKERESULT_INVALID_VALUE; /* get the good trackDesc */ for( i = 0 ; i < i_trackID ; i++ ) { p_trackDesc = p_trackDesc->p_next; } psz_name = p_trackDesc->psz_name; /* display the name of the track chosen */ return invokeResultString( psz_name, result ); } return INVOKERESULT_NO_SUCH_METHOD; } default: ; } } return INVOKERESULT_GENERIC_ERROR; }