summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/dvb/decoder.cpp3
-rw-r--r--lib/dvb/decoder.h2
-rw-r--r--lib/dvb/pmt.cpp32
-rw-r--r--lib/dvb/pmt.h2
4 files changed, 34 insertions, 5 deletions
diff --git a/lib/dvb/decoder.cpp b/lib/dvb/decoder.cpp
index b406b39..6845602 100644
--- a/lib/dvb/decoder.cpp
+++ b/lib/dvb/decoder.cpp
@@ -198,6 +198,9 @@ int eDVBAudio::startPid(int pid, int type)
case aAACHE:
bypass = 9;
break;
+ case aLPCM:
+ bypass = 6;
+ break;
}
eDebugNoNewLine("AUDIO_SET_BYPASS(%d) - ", bypass);
diff --git a/lib/dvb/decoder.h b/lib/dvb/decoder.h
index 3bfc70c..b53638b 100644
--- a/lib/dvb/decoder.h
+++ b/lib/dvb/decoder.h
@@ -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 };
+ enum { aMPEG, aAC3, aDTS, aAAC, aAACHE, aLPCM };
eDVBAudio(eDVBDemux *demux, int dev);
enum { aMonoLeft, aStereo, aMonoRight };
void setChannel(int channel);
diff --git a/lib/dvb/pmt.cpp b/lib/dvb/pmt.cpp
index da45c8e..13ed6b9 100644
--- a/lib/dvb/pmt.cpp
+++ b/lib/dvb/pmt.cpp
@@ -258,8 +258,26 @@ int eDVBServicePMTHandler::getProgramInfo(struct program &program)
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 0x81: // user private
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)
{
- 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;
- 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
diff --git a/lib/dvb/pmt.h b/lib/dvb/pmt.h
index cabc6ac..e27135e 100644
--- a/lib/dvb/pmt.h
+++ b/lib/dvb/pmt.h
@@ -142,7 +142,7 @@ public:
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;