audio: add language display
authorFelix Domke <tmbinc@elitedvb.net>
Mon, 28 Nov 2005 01:53:20 +0000 (01:53 +0000)
committerFelix Domke <tmbinc@elitedvb.net>
Mon, 28 Nov 2005 01:53:20 +0000 (01:53 +0000)
lib/dvb/pmt.cpp
lib/dvb/pmt.h
lib/python/Screens/AudioSelection.py

index c0c65b2..5a1b7c5 100644 (file)
@@ -6,6 +6,8 @@
 #include <lib/dvb_ci/dvbci.h>
 #include <dvbsi++/ca_program_map_section.h>
 #include <dvbsi++/descriptor_tag.h>
+#include <dvbsi++/iso639_language_descriptor.h>
+#include <dvbsi++/component_descriptor.h>
 
 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);
                        }
index a23abf1..5f3d477 100644 (file)
@@ -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
index 6e3a288..a384174 100644 (file)
@@ -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)