add support for DDP
authorschon <schon@dev03-server>
Wed, 25 May 2011 08:02:19 +0000 (17:02 +0900)
committerschon <schon@dev03-server>
Wed, 25 May 2011 08:02:19 +0000 (17:02 +0900)
lib/dvb/decoder.cpp
lib/dvb/decoder.h
lib/dvb/pmt.cpp
lib/dvb/pmt.h
lib/service/servicedvb.cpp

index a89f72b..97cb99d 100644 (file)
@@ -206,6 +206,10 @@ int eDVBAudio::startPid(int pid, int type)
        case aDTSHD:
                bypass = 0x10;
                break;
+        case aDDP:
+                bypass = 0x22;
+                break;
+
        }
 
        eDebugNoNewLine("AUDIO_SET_BYPASS(%d) - ", bypass);
index 7610b65..ed8b6c7 100644 (file)
@@ -13,7 +13,7 @@ private:
        ePtr<eDVBDemux> m_demux;
        int m_fd, m_fd_demux, m_dev, m_is_freezed;
 public:
-       enum { aMPEG, aAC3, aDTS, aAAC, aAACHE, aLPCM, aDTSHD };
+       enum { aMPEG, aAC3, aDTS, aAAC, aAACHE, aLPCM, aDTSHD, aDDP  };
        eDVBAudio(eDVBDemux *demux, int dev);
        enum { aMonoLeft, aStereo, aMonoRight };
        void setChannel(int channel);
index e5e6331..f49035e 100644 (file)
@@ -470,10 +470,32 @@ int eDVBServicePMTHandler::getProgramInfo(program &program)
                                                                        isaudio = 1;
                                                                        audio.type = audioStream::atAACHE; // MPEG4-AAC
                                                                        break;
-                                                               case AC3_DESCRIPTOR:
-                                                                       isaudio = 1;
-                                                                       audio.type = audioStream::atAC3;
-                                                                       break;
+                                                                case AC3_DESCRIPTOR:
+                                                                {    
+                                                                        Ac3Descriptor *ac = (Ac3Descriptor*)(*desc);
+                                                                        eDebug("ac->getAc3TypeFlag() : 0x%x", ac->getAc3TypeFlag());
+     
+                                                                        isaudio = 1; 
+                                                                        audio.type = audioStream::atAC3;
+
+                                                                        if(ac->getAc3TypeFlag())
+                                                                        {    
+     
+                                                                                uint8_t ac3type = ac->getAc3Type();
+                                                                                eDebug("ac->getAc3Type() : 0x%x", ac->getAc3Type());
+                                                                                if( ( ac3type & 0x80 ) && ( (ac3type<<5) == 0xA0 || (ac3type<<5) == 0xC0) ) // From EN-300 468 v1.7.1 Table D.1
+                                                                                        audio.type = audioStream::atDDP;
+                                                                        }    
+     
+                                                                        break;
+                                                                }     
+                                                                case ENHANCED_AC3_DESCRIPTOR:
+                                                                        eDebug("ENHANCED_AC3_DESCRIPTOR");
+                                                                        isaudio = 1; 
+                                                                        audio.type = audioStream::atDDP;
+                                                                        break;
+     
+
                                                                case REGISTRATION_DESCRIPTOR: /* some services don't have a separate AC3 descriptor */
                                                                {
                                                                        RegistrationDescriptor *d = (RegistrationDescriptor*)(*desc);
index 0c44f35..4be8000 100644 (file)
@@ -145,7 +145,7 @@ public:
        {
                int pid,
                    rdsPid; // hack for some radio services which transmit radiotext on different pid (i.e. harmony fm, HIT RADIO FFH, ...)
-               enum { atMPEG, atAC3, atDTS, atAAC, atAACHE, atLPCM, atDTSHD };
+               enum { atMPEG, atAC3, atDTS, atAAC, atAACHE, atLPCM, atDTSHD, atDDP  };
                int type; // mpeg2, ac3, dts, ...
                
                int component_tag;
index 52eefa7..383b38e 100644 (file)
@@ -1795,6 +1795,8 @@ RESULT eDVBServicePlay::getTrackInfo(struct iAudioTrackInfo &info, unsigned int
                info.m_description = "MPEG";
        else if (program.audioStreams[i].type == eDVBServicePMTHandler::audioStream::atAC3)
                info.m_description = "Dolby Digital";
+        else if (program.audioStreams[i].type == eDVBServicePMTHandler::audioStream::atDDP)
+                info.m_description = "Dolby Digital+";
        else if (program.audioStreams[i].type == eDVBServicePMTHandler::audioStream::atAAC)
                info.m_description = "AAC";
        else if (program.audioStreams[i].type == eDVBServicePMTHandler::audioStream::atAACHE)