From 05eefccc9e20d520d173156ab5dffbcc90f4351f Mon Sep 17 00:00:00 2001 From: Felix Domke Date: Mon, 28 Nov 2005 01:53:20 +0000 Subject: [PATCH] audio: add language display --- lib/dvb/pmt.cpp | 25 +++++++++++++++++++++++++ lib/dvb/pmt.h | 4 +++- lib/python/Screens/AudioSelection.py | 19 +++++++++++++++---- 3 files changed, 43 insertions(+), 5 deletions(-) diff --git a/lib/dvb/pmt.cpp b/lib/dvb/pmt.cpp index c0c65b27..5a1b7c5c 100644 --- a/lib/dvb/pmt.cpp +++ b/lib/dvb/pmt.cpp @@ -6,6 +6,8 @@ #include #include #include +#include +#include eDVBServicePMTHandler::eDVBServicePMTHandler(int record) :m_ca_servicePtr(0) @@ -175,7 +177,30 @@ int eDVBServicePMTHandler::getProgramInfo(struct program &program) break; } if (isaudio) + { + for (DescriptorConstIterator desc = (*es)->getDescriptors()->begin(); + desc != (*es)->getDescriptors()->end(); ++desc) + { + switch ((*desc)->getTag()) + { + case ISO_639_LANGUAGE_DESCRIPTOR: + { + const Iso639LanguageList *languages = ((Iso639LanguageDescriptor*)*desc)->getIso639Languages(); + + /* use last language code */ + for (Iso639LanguageConstIterator i(languages->begin()); i != languages->end(); ++i) + audio.language_code = (*i)->getIso639LanguageCode(); + + break; + } + case COMPONENT_DESCRIPTOR: + audio.component_tag = ((ComponentDescriptor*)*desc)->getComponentTag(); + break; + } + } + program.audioStreams.push_back(audio); + } if (isvideo) program.videoStreams.push_back(video); } diff --git a/lib/dvb/pmt.h b/lib/dvb/pmt.h index a23abf1e..5f3d4777 100644 --- a/lib/dvb/pmt.h +++ b/lib/dvb/pmt.h @@ -93,7 +93,9 @@ public: int pid; enum { atMPEG, atAC3, atDTS }; int type; // mpeg2, ac3, dts, ... - // language code, ... + + int component_tag; + std::string language_code; /* iso-639, if available. */ }; struct program diff --git a/lib/python/Screens/AudioSelection.py b/lib/python/Screens/AudioSelection.py index 6e3a288e..a3841747 100644 --- a/lib/python/Screens/AudioSelection.py +++ b/lib/python/Screens/AudioSelection.py @@ -2,17 +2,19 @@ from Screen import Screen from Components.ActionMap import ActionMap from Components.MenuList import MenuList from Components.Label import Label +from Tools.ISO639 import LanguageCodes class AudioSelection(Screen): def KeyOk(self): selection = self["tracks"].getCurrent() print "select track " + str(selection[1]) + self.audio.selectTrack(selection[1]) self.close() def __init__(self, session, audio): Screen.__init__(self, session) - self["actions"] = ActionMap(["SetupActions"], + self["actions"] = ActionMap(["OkCancelActions"], { "cancel": self.close, "ok": self.KeyOk, @@ -24,8 +26,17 @@ class AudioSelection(Screen): n = audio.getNumberOfTracks() for x in range(n): i = audio.getTrackInfo(x) - tlist.append((i.getDescription(), x)) + langCode = i.getLanguage() + + description = i.getDescription(); + + if langCode in LanguageCodes: + language = LanguageCodes[langCode][0] + if len(description): + description += " (" + language + ")" + else: + description = language - self["tracks"] = MenuList(tlist) + tlist.append((description, x)) - \ No newline at end of file + self["tracks"] = MenuList(tlist) -- 2.30.2