Author: stippi Date: 2010-09-17 10:33:25 +0200 (Fri, 17 Sep 2010) New Revision: 38688 Changeset: http://dev.haiku-os.org/changeset/38688 Modified: haiku/trunk/src/apps/mediaplayer/Controller.cpp haiku/trunk/src/apps/mediaplayer/Controller.h haiku/trunk/src/apps/mediaplayer/Jamfile haiku/trunk/src/apps/mediaplayer/MainWin.cpp Log: Make use of the new meta-data API and display the audio track menu item label as the language of the track. Modified: haiku/trunk/src/apps/mediaplayer/Controller.cpp =================================================================== --- haiku/trunk/src/apps/mediaplayer/Controller.cpp 2010-09-17 08:32:27 UTC (rev 38687) +++ haiku/trunk/src/apps/mediaplayer/Controller.cpp 2010-09-17 08:33:25 UTC (rev 38688) @@ -852,6 +852,41 @@ } +status_t +Controller::GetMetaData(BMessage* metaData) +{ + // TODO: Move API into supplier classes + if (fMediaFile == NULL) + return B_NO_INIT; + + return fMediaFile->GetMetaData(metaData); +} + + +status_t +Controller::GetVideoMetaData(int32 index, BMessage* metaData) +{ + // TODO: Move API into supplier classes + BMediaTrack* track = (BMediaTrack*)fVideoTrackList.ItemAt(index); + if (track == NULL) + return B_BAD_INDEX; + + return track->GetMetaData(metaData); +} + + +status_t +Controller::GetAudioMetaData(int32 index, BMessage* metaData) +{ + // TODO: Move API into supplier classes + BMediaTrack* track = (BMediaTrack*)fAudioTrackList.ItemAt(index); + if (track == NULL) + return B_BAD_INDEX; + + return track->GetMetaData(metaData); +} + + // #pragma mark - Modified: haiku/trunk/src/apps/mediaplayer/Controller.h =================================================================== --- haiku/trunk/src/apps/mediaplayer/Controller.h 2010-09-17 08:32:27 UTC (rev 38687) +++ haiku/trunk/src/apps/mediaplayer/Controller.h 2010-09-17 08:33:25 UTC (rev 38688) @@ -134,6 +134,12 @@ status_t GetEncodedAudioFormat(media_format* format); status_t GetAudioCodecInfo(media_codec_info* info); + status_t GetMetaData(BMessage* metaData); + status_t GetVideoMetaData(int32 track, + BMessage* metaData); + status_t GetAudioMetaData(int32 track, + BMessage* metaData); + // video view void SetVideoView(VideoView *view); Modified: haiku/trunk/src/apps/mediaplayer/Jamfile =================================================================== --- haiku/trunk/src/apps/mediaplayer/Jamfile 2010-09-17 08:32:27 UTC (rev 38687) +++ haiku/trunk/src/apps/mediaplayer/Jamfile 2010-09-17 08:33:25 UTC (rev 38688) @@ -108,7 +108,7 @@ MainWin.cpp VideoView.cpp - : be game media tracker translation textencoding $(TARGET_LIBSTDC++) + : be game locale media tracker translation textencoding $(TARGET_LIBSTDC++) : MediaPlayer.rdef ; Modified: haiku/trunk/src/apps/mediaplayer/MainWin.cpp =================================================================== --- haiku/trunk/src/apps/mediaplayer/MainWin.cpp 2010-09-17 08:32:27 UTC (rev 38687) +++ haiku/trunk/src/apps/mediaplayer/MainWin.cpp 2010-09-17 08:33:25 UTC (rev 38688) @@ -32,6 +32,7 @@ #include <Autolock.h> #include <Debug.h> #include <fs_attr.h> +#include <Language.h> #include <Menu.h> #include <MenuBar.h> #include <MenuItem.h> @@ -1548,7 +1549,18 @@ int count = fController->AudioTrackCount(); int current = fController->CurrentAudioTrack(); for (int i = 0; i < count; i++) { - sprintf(s, "Track %d", i + 1); + BMessage metaData; + const char* languageString = NULL; + if (fController->GetAudioMetaData(i, &metaData) == B_OK) + metaData.FindString("language", &languageString); + if (languageString != NULL) { + BLanguage language(languageString); + BString languageName; + if (language.GetTranslatedName(languageName) == B_OK) + languageString = languageName.String(); + snprintf(s, sizeof(s), "%s", languageString); + } else + snprintf(s, sizeof(s), "Track %d", i + 1); BMenuItem* item = new BMenuItem(s, new BMessage(M_SELECT_AUDIO_TRACK + i)); item->SetMarked(i == current); @@ -1563,7 +1575,7 @@ count = fController->VideoTrackCount(); current = fController->CurrentVideoTrack(); for (int i = 0; i < count; i++) { - sprintf(s, "Track %d", i + 1); + snprintf(s, sizeof(s), "Track %d", i + 1); BMenuItem* item = new BMenuItem(s, new BMessage(M_SELECT_VIDEO_TRACK + i)); item->SetMarked(i == current);