add support for blueray PMT streamtypes for LPCM, AC3, DTS, add more registration...
authorghost <andreas.monzner@multimedia-labs.de>
Mon, 25 May 2009 13:53:17 +0000 (15:53 +0200)
committerghost <andreas.monzner@multimedia-labs.de>
Mon, 25 May 2009 13:53:17 +0000 (15:53 +0200)
lib/dvb/decoder.cpp
lib/dvb/decoder.h
lib/dvb/pmt.cpp
lib/dvb/pmt.h

index 82ade40d40c036a0fffdc5ca91a7f1447d65fe39..114e383553febddfb8584b4993e049e72e2ffcb9 100644 (file)
@@ -198,6 +198,9 @@ int eDVBAudio::startPid(int pid, int type)
        case aAACHE:
                bypass = 9;
                break;
        case aAACHE:
                bypass = 9;
                break;
+       case aLPCM:
+               bypass = 6;
+               break;
        }
 
        eDebugNoNewLine("AUDIO_SET_BYPASS(%d) - ", bypass);
        }
 
        eDebugNoNewLine("AUDIO_SET_BYPASS(%d) - ", bypass);
index 3bfc70cb87c92988fba8831880a782f5d9559ad3..b53638b59ab0ffb757063f3f7533cdf621c5d974 100644 (file)
@@ -13,7 +13,7 @@ private:
        ePtr<eDVBDemux> m_demux;
        int m_fd, m_fd_demux, m_dev, m_is_freezed;
 public:
        ePtr<eDVBDemux> m_demux;
        int m_fd, m_fd_demux, m_dev, m_is_freezed;
 public:
-       enum { aMPEG, aAC3, aDTS, aAAC, aAACHE };
+       enum { aMPEG, aAC3, aDTS, aAAC, aAACHE, aLPCM };
        eDVBAudio(eDVBDemux *demux, int dev);
        enum { aMonoLeft, aStereo, aMonoRight };
        void setChannel(int channel);
        eDVBAudio(eDVBDemux *demux, int dev);
        enum { aMonoLeft, aStereo, aMonoRight };
        void setChannel(int channel);
index da45c8eb4733f95e290d3876424f384172308b13..13ed6b984ffc9659d9f35be07f104907220f7471 100644 (file)
@@ -258,8 +258,26 @@ int eDVBServicePMTHandler::getProgramInfo(struct program &program)
                                                        isaudio = 1;
                                                        audio.type = audioStream::atAACHE;
                                                }
                                                        isaudio = 1;
                                                        audio.type = audioStream::atAACHE;
                                                }
+                                       case 0x80: // user private ... but blueray LPCM
+                                               if (!isvideo && !isaudio)
+                                               {
+                                                       isaudio = 1;
+                                                       audio.type = audioStream::atLPCM;
+                                               }
+                                       case 0x81: // user private ... but blueray AC3
+                                               if (!isvideo && !isaudio)
+                                               {
+                                                       isaudio = 1;
+                                                       audio.type = audioStream::atAC3;
+                                               }
+                                       case 0x82: // Blueray DTS (dvb user private...)
+                                       case 0xA2: // Blueray secondary DTS
+                                               if (!isvideo && !isaudio)
+                                               {
+                                                       isaudio = 1;
+                                                       audio.type = audioStream::atDTS;
+                                               }
                                        case 0x06: // PES Private
                                        case 0x06: // PES Private
-                                       case 0x81: // user private
                                        case 0xEA: // TS_PSI_ST_SMPTE_VC1
                                                for (DescriptorConstIterator desc = (*es)->getDescriptors()->begin();
                                                                desc != (*es)->getDescriptors()->end(); ++desc)
                                        case 0xEA: // TS_PSI_ST_SMPTE_VC1
                                                for (DescriptorConstIterator desc = (*es)->getDescriptors()->begin();
                                                                desc != (*es)->getDescriptors()->end(); ++desc)
@@ -363,11 +381,19 @@ int eDVBServicePMTHandler::getProgramInfo(struct program &program)
                                                                        int format_identifier = (descr[2] << 24) | (descr[3] << 16) | (descr[4] << 8) | (descr[5]);
                                                                        switch (format_identifier)
                                                                        {
                                                                        int format_identifier = (descr[2] << 24) | (descr[3] << 16) | (descr[4] << 8) | (descr[5]);
                                                                        switch (format_identifier)
                                                                        {
-                                                                       case 0x41432d33:
+                                                                       case 0x44545331 ... 0x44545333: // DTS1/DTS2/DTS3
+                                                                               isaudio = 1;
+                                                                               audio.type = audioStream::atDTS;
+                                                                               break;
+                                                                       case 0x41432d33: // == 'AC-3'
                                                                                isaudio = 1;
                                                                                audio.type = audioStream::atAC3;
                                                                                break;
                                                                                isaudio = 1;
                                                                                audio.type = audioStream::atAC3;
                                                                                break;
-                                                                       case 0x56432d31:
+                                                                       case 0x42535344: // == 'BSSD' (LPCM)
+                                                                               isaudio = 1;
+                                                                               audio.type = audioStream::atLPCM;
+                                                                               break;
+                                                                       case 0x56432d31: // == 'VC-1'
                                                                                if (descr[6] == 0x01) // subdescriptor tag
                                                                                {
                                                                                        if (descr[7] >= 0x90) // profile_level
                                                                                if (descr[6] == 0x01) // subdescriptor tag
                                                                                {
                                                                                        if (descr[7] >= 0x90) // profile_level
index cabc6aceb6e88781699b0baddc91a5e7944ba8bb..e27135e3c9968bd73cf1cb048485d1684bf034e6 100644 (file)
@@ -142,7 +142,7 @@ public:
        struct audioStream
        {
                int pid;
        struct audioStream
        {
                int pid;
-               enum { atMPEG, atAC3, atDTS, atAAC, atAACHE };
+               enum { atMPEG, atAC3, atDTS, atAAC, atAACHE, atLPCM };
                int type; // mpeg2, ac3, dts, ...
                
                int component_tag;
                int type; // mpeg2, ac3, dts, ...
                
                int component_tag;