summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--HISTORY3
-rw-r--r--TROUBLESHOOTING1
-rw-r--r--dxr3.c11
-rw-r--r--dxr3.h19
-rw-r--r--dxr3configdata.c1
-rw-r--r--dxr3configdata.h9
-rw-r--r--dxr3demuxdevice.c12
-rw-r--r--dxr3device.c22
-rw-r--r--dxr3device.h1
-rw-r--r--dxr3i18n.c46
-rw-r--r--dxr3interface.c42
-rw-r--r--dxr3interface.h13
-rw-r--r--patches/vdr-dxr3-ac3.patch424
13 files changed, 55 insertions, 549 deletions
diff --git a/HISTORY b/HISTORY
index 614cde9..533123b 100644
--- a/HISTORY
+++ b/HISTORY
@@ -320,7 +320,7 @@ NOTE: I havent found time to include all of the languages, will be done in pre2
- add work-in-progress AC3 patch to patches/ (Agneau Egare, Ville Skyttä)
- use VDR's thread activity control features instead of our own (Luca Olivetti)
-200x-xx-xx: Version x.x.x
+200x-xx-xx: Version 0.2.7
- add Polish translation (Mikolaj Tutak)
- sync "make install" with VDR 1.4.2-2 (Ville Skyttä)
@@ -328,4 +328,5 @@ NOTE: I havent found time to include all of the languages, will be done in pre2
- avoid deprecation warnings with newish libavcodec (Ville Skyttä)
- add brightness/contrast/saturation settings to setup (Ville Skyttä)
- apply more settings immediately from setup menu (Ville Skyttä)
+- apply AC3 patch which was in patches/ in previous releases
- various minor tweaks
diff --git a/TROUBLESHOOTING b/TROUBLESHOOTING
index 7bce59d..472202f 100644
--- a/TROUBLESHOOTING
+++ b/TROUBLESHOOTING
@@ -20,7 +20,6 @@ Troubleshooting, known problems, bugs, and workarounds related to this driver:
* No sound with the DVD plugin with VDR >= 1.3.18.
Workaround: use the MPlayer plugin to play DVDs.
Workaround 2: use VDR < 1.3.18.
- Workaround 3: patches/vdr-dxr3-ac3.patch may work for you.
* When cutting old recordings (made with VDR < 1.3.28 or something, newer
ones should not be affected) from some channels, the still picture is
diff --git a/dxr3.c b/dxr3.c
index e821b36..d020f77 100644
--- a/dxr3.c
+++ b/dxr3.c
@@ -3,7 +3,7 @@
*
* See the README file for copyright information and how to reach the author.
*
- * $Id: dxr3.c,v 1.1.2.28 2007/04/03 15:37:14 scop Exp $
+ * $Id: dxr3.c,v 1.1.2.29 2007/04/05 20:34:23 scop Exp $
*
*/
@@ -46,21 +46,12 @@ eOSState cDxr3OsdItem::ProcessKey(eKeys Key)
case DXR3_ANALOG_OUT:
cDxr3ConfigData::Instance().SetUseDigitalOut(0);
- cDxr3ConfigData::Instance().SetAc3OutPut(0);
if (cDxr3Device::InstanceP())
cDxr3Device::InstanceP()->Reset();
break;
case DXR3_DIGITAL_OUT:
cDxr3ConfigData::Instance().SetUseDigitalOut(1);
- cDxr3ConfigData::Instance().SetAc3OutPut(0);
- if (cDxr3Device::InstanceP())
- cDxr3Device::InstanceP()->Reset();
- break;
-
- case DXR3_AC3_OUT:
- cDxr3ConfigData::Instance().SetAc3OutPut(
- !cDxr3ConfigData::Instance().GetAc3OutPut());
if (cDxr3Device::InstanceP())
cDxr3Device::InstanceP()->Reset();
break;
diff --git a/dxr3.h b/dxr3.h
index 000c3ec..5d877b5 100644
--- a/dxr3.h
+++ b/dxr3.h
@@ -32,8 +32,7 @@ enum eDxr3OsdItem
DXR3_RESET_HARDWARE,
DXR3_FORCE_LETTER_BOX,
DXR3_DIGITAL_OUT,
- DXR3_ANALOG_OUT,
- DXR3_AC3_OUT
+ DXR3_ANALOG_OUT
};
// ==================================
@@ -71,22 +70,6 @@ public:
else
Add(new cDxr3OsdItem(hk(tr("Switch to digital audio output")),
DXR3_DIGITAL_OUT));
- /*
- if (cDxr3ConfigData::Instance().GetUseDigitalOut())
- {
- Add(new cDxr3OsdItem(hk("Analog output"), DXR3_ANALOG_OUT));
-
- if (cDxr3ConfigData::Instance().GetAc3OutPut())
- Add(new cDxr3OsdItem(hk(tr("AC3 output off")), DXR3_AC3_OUT));
- else if (cDxr3Interface::Instance().IsAc3Present())
- Add(new cDxr3OsdItem(hk(tr("AC3 output on")), DXR3_AC3_OUT));
- }
- else
- {
- Add(new cDxr3OsdItem(hk(tr("Switch to digital audio output")),
- DXR3_DIGITAL_OUT));
- }
- */
}
};
diff --git a/dxr3configdata.c b/dxr3configdata.c
index 5b65ea4..585c546 100644
--- a/dxr3configdata.c
+++ b/dxr3configdata.c
@@ -27,7 +27,6 @@
cDxr3ConfigData::cDxr3ConfigData()
{
m_digitaloutput = 0;
- m_ac3output = 0;
m_card = 0;
m_forceletterbox = 0;
m_videomode = PAL;
diff --git a/dxr3configdata.h b/dxr3configdata.h
index 07660e5..00e5b02 100644
--- a/dxr3configdata.h
+++ b/dxr3configdata.h
@@ -78,14 +78,6 @@ public:
{
return m_forceletterbox = value;
}
- int GetAc3OutPut() const
- {
- return m_ac3output;
- }
- int SetAc3OutPut(int value)
- {
- return m_ac3output = value;
- }
eVideoMode GetVideoMode() const
{
@@ -152,7 +144,6 @@ protected:
eMenuMode m_menumode;
int m_digitaloutput;
- int m_ac3output;
int m_card;
int m_forceletterbox;
int m_brightness;
diff --git a/dxr3demuxdevice.c b/dxr3demuxdevice.c
index bed1a11..5c21af2 100644
--- a/dxr3demuxdevice.c
+++ b/dxr3demuxdevice.c
@@ -271,7 +271,7 @@ int cDxr3DemuxDevice::DemuxPes(const uint8_t* buf, int length, bool bAc3Dts)
//printf("vBuf size = %d\n", m_vBuf.Available());
//printf("aBuf size = %d\n", m_aBuf.Available());
/*
- if (cDxr3ConfigData::Instance().GetAc3OutPut())
+ if (cDxr3Interface::Instance().IsAudioModeAC3())
cDxr3Interface::Instance().SetAudioDigitalAC3(); // !!! FIXME
*/
@@ -302,10 +302,6 @@ int cDxr3DemuxDevice::DemuxPes(const uint8_t* buf, int length, bool bAc3Dts)
aPts = 0;
vPts = 0;
bPlaySuc = false;
- /*
- if (cDxr3ConfigData::Instance().GetAc3OutPut())
- cDxr3Interface::Instance().SetAudioDigitalAC3(); // !!! FIXME
- */
}
// find start code
@@ -450,7 +446,7 @@ int cDxr3DemuxDevice::DemuxPes(const uint8_t* buf, int length, bool bAc3Dts)
}
else if (pesFrame.GetPesDataType() == cDxr3PesFrame::PES_AUDIO_DATA
&& m_demuxMode != DXR3_DEMUX_VIDEO_ONLY_MODE
- && !cDxr3ConfigData::Instance().GetAc3OutPut())
+ && !cDxr3Interface::Instance().IsAudioModeAC3())
{
if (m_synchState == DXR3_DEMUX_AUDIO_SYNCHED ||
m_synchState == DXR3_DEMUX_SYNCHED)
@@ -513,7 +509,7 @@ int cDxr3DemuxDevice::DemuxPes(const uint8_t* buf, int length, bool bAc3Dts)
}
else if (pesFrame.GetPesDataType() == cDxr3PesFrame::PES_PRIVATE_DATA
&& m_demuxMode != DXR3_DEMUX_VIDEO_ONLY_MODE
- && !cDxr3ConfigData::Instance().GetAc3OutPut()
+ && !cDxr3Interface::Instance().IsAudioModeAC3()
&& !bAc3Dts)
{
if (m_synchState == DXR3_DEMUX_AUDIO_SYNCHED ||
@@ -562,7 +558,7 @@ int cDxr3DemuxDevice::DemuxPes(const uint8_t* buf, int length, bool bAc3Dts)
}
else if (pesFrame.GetPesDataType() == cDxr3PesFrame::PES_PRIVATE_DATA
&& m_demuxMode != DXR3_DEMUX_VIDEO_ONLY_MODE
- && cDxr3ConfigData::Instance().GetAc3OutPut()
+ && cDxr3Interface::Instance().IsAudioModeAC3()
&& bAc3Dts)
{
if (m_synchState == DXR3_DEMUX_AUDIO_SYNCHED ||
diff --git a/dxr3device.c b/dxr3device.c
index ae7390d..c7ad807 100644
--- a/dxr3device.c
+++ b/dxr3device.c
@@ -35,7 +35,6 @@ cDxr3Device::cDxr3Device() : m_DemuxDevice(cDxr3Interface::Instance())
m_Offset = 0;
m_strBuf.erase(m_strBuf.begin(), m_strBuf.end());
m_spuDecoder = NULL;
- m_AC3Present = false;
m_CalledBySet = false;
}
@@ -86,7 +85,6 @@ bool cDxr3Device::SetPlayMode(ePlayMode PlayMode)
// should this really be here?
m_Offset = 0;
- m_AC3Present = false;
m_strBuf.erase(m_strBuf.begin(), m_strBuf.end());
if (PlayMode == pmAudioOnlyBlack)
@@ -108,17 +106,10 @@ bool cDxr3Device::SetPlayMode(ePlayMode PlayMode)
m_DemuxDevice.Stop();
}
+ // TODO: what about AC3???
if (cDxr3ConfigData::Instance().GetUseDigitalOut())
{
- if (cDxr3ConfigData::Instance().GetAc3OutPut() && m_CalledBySet)
- {
- cDxr3Interface::Instance().SetAudioDigitalAC3(); // !!! FIXME
- }
- else
- {
- cDxr3Interface::Instance().SetAudioDigitalPCM();
- cDxr3ConfigData::Instance().SetAc3OutPut(0);
- }
+ cDxr3Interface::Instance().SetAudioDigitalPCM();
}
else
{
@@ -282,7 +273,10 @@ int cDxr3Device::PlayAudio(const uchar *Data, int Length, uchar Id)
int retLength = 0;
int origLength = Length;
- m_AC3Present = true;
+ bool isAc3 = ((Id & 0xF0) == 0x80) || Id == 0xbd;
+
+ if (isAc3 && !cDxr3Interface::Instance().IsAudioModeAC3())
+ cDxr3Interface::Instance().SetAudioDigitalAC3();
if ((m_DemuxDevice.GetDemuxMode() == DXR3_DEMUX_TRICK_MODE &&
m_DemuxDevice.GetTrickState() == DXR3_FREEZE) ||
@@ -298,7 +292,7 @@ int cDxr3Device::PlayAudio(const uchar *Data, int Length, uchar Id)
{
retLength = m_DemuxDevice.DemuxAudioPes((const uint8_t*)m_strBuf.data(), m_strBuf.length());
} else {
- retLength = m_DemuxDevice.DemuxPes((const uint8_t*)m_strBuf.data(), m_strBuf.length(), true);
+ retLength = m_DemuxDevice.DemuxPes((const uint8_t*)m_strBuf.data(), m_strBuf.length(), isAc3);
}
}
else if (m_PlayMode == pmAudioOnly)
@@ -307,7 +301,7 @@ int cDxr3Device::PlayAudio(const uchar *Data, int Length, uchar Id)
}
else
{
- retLength = m_DemuxDevice.DemuxPes((const uint8_t*)Data, Length, true);
+ retLength = m_DemuxDevice.DemuxPes((const uint8_t*)Data, Length, isAc3);
}
Length -= retLength;
diff --git a/dxr3device.h b/dxr3device.h
index 29f41b7..667da91 100644
--- a/dxr3device.h
+++ b/dxr3device.h
@@ -78,7 +78,6 @@ public:
protected:
ePlayMode m_PlayMode;
cDxr3DemuxDevice m_DemuxDevice;
- bool m_AC3Present;
bool m_CalledBySet;
std::string m_strBuf;
int m_Offset;
diff --git a/dxr3i18n.c b/dxr3i18n.c
index 919d27c..57c6707 100644
--- a/dxr3i18n.c
+++ b/dxr3i18n.c
@@ -301,52 +301,6 @@ const tI18nPhrase Phrases[] = {
"", // Czech
},
{
- "AC3 output on",
- "AC3 Ausgabe Ein",
- "", // Slovenski
- "Attiva uscita AC3",
- "", // Nederlands
- "", // Português
- "", // Français
- "", // Norsk
- "AC3-ulostulo päälle",
- "W³±cz wyj¶cie AC3",
- "Activa salida AC3",
- "", // ÅëëçíéêÜ (Greek)
- "", // Svenska
- "", // Românã
- "", // Magyar
- "Activa sortida AC3",
- "", // ÀãááÚØÙ (Russian)
- "", // Hrvatski
- "", // Eesti
- "", // Dansk
- "", // Czech
- },
- {
- "AC3 output off",
- "AC3 Ausgabe Aus",
- "", // Slovenski
- "Disattiva uscita AC3",
- "", // Nederlands
- "", // Português
- "", // Français
- "", // Norsk
- "AC3-ulostulo pois",
- "Wy³±cz wyj¶cie AC3",
- "Desactiva salida AC3",
- "", // ÅëëçíéêÜ (Greek)
- "", // Svenska
- "", // Românã
- "", // Magyar
- "Desactiva sortida AC3",
- "", // ÀãááÚØÙ (Russian)
- "", // Hrvatski
- "", // Eesti
- "", // Dansk
- "", // Czech
- },
- {
"Switch to digital audio output",
"Digitaler Ausgang",
"", // Slovenski
diff --git a/dxr3interface.c b/dxr3interface.c
index 951dac7..5122925 100644
--- a/dxr3interface.c
+++ b/dxr3interface.c
@@ -139,26 +139,36 @@ void cDxr3Interface::SetAudioDigitalPCM()
//! set audio output to digital ac3
void cDxr3Interface::SetAudioDigitalAC3()
{
- if (m_audioMode != EM8300_AUDIOMODE_DIGITALAC3)
- {
- int ioval = 0;
- Lock();
+ int ioval = 0;
+ Lock();
- if (!m_ExternalReleased && m_audioMode != EM8300_AUDIOMODE_DIGITALAC3)
+ if (!m_ExternalReleased && m_audioMode != EM8300_AUDIOMODE_DIGITALAC3)
+ {
+ m_audioMode = ioval = EM8300_AUDIOMODE_DIGITALAC3;
+ isyslog("dxr3: setting digital AC3 audio mode");
+ if (ioctl(m_fdControl, EM8300_IOCTL_SET_AUDIOMODE, &ioval) < 0)
{
- m_audioMode = ioval = EM8300_AUDIOMODE_DIGITALAC3;
- isyslog("dxr3: setting digital AC3 audio mode");
- if (ioctl(m_fdControl, EM8300_IOCTL_SET_AUDIOMODE, &ioval) < 0)
- {
- esyslog("dxr3: unable to set AC3 audio mode: %m");
- }
- ReOpenAudio();
+ esyslog("dxr3: unable to set AC3 audio mode: %m");
}
-
- Unlock();
+ ReOpenAudio();
}
+
+ Unlock();
+}
+
+
+// =================================
+//! get current audio mode
+int cDxr3Interface::GetAudioMode()
+{
+ int audioMode;
+ Lock();
+ ioctl(m_fdControl, EM8300_IOCTL_GET_AUDIOMODE, &audioMode);
+ Unlock();
+ return audioMode;
}
+
// ==================================
//! set audio speed
void cDxr3Interface::SetAudioSpeed(uint32_t speed)
@@ -591,7 +601,7 @@ void cDxr3Interface::PlayAudioFrame(cFixedLengthFrame* pFrame)
if (!m_ExternalReleased)
{
- if (!cDxr3ConfigData::Instance().GetAc3OutPut())
+ if (!cDxr3Interface::Instance().IsAudioModeAC3())
ResampleVolume((short*)pFrame->GetData(), pFrame->GetCount());
written = write(m_fdAudio, pFrame->GetData(), pFrame->GetCount());
@@ -619,7 +629,7 @@ void cDxr3Interface::PlayAudioFrame(uint8_t* pBuf, int length)
if (!m_ExternalReleased)
{
- if (!cDxr3ConfigData::Instance().GetAc3OutPut())
+ if (!cDxr3Interface::Instance().IsAudioModeAC3())
ResampleVolume((short*)pBuf, length);
if ((written = write(m_fdAudio, pBuf, length)) < 0)
diff --git a/dxr3interface.h b/dxr3interface.h
index 29c32d4..6b432c8 100644
--- a/dxr3interface.h
+++ b/dxr3interface.h
@@ -56,6 +56,19 @@ public:
void SetAudioAnalog();
void SetAudioDigitalPCM();
void SetAudioDigitalAC3();
+ int GetAudioMode();
+ int IsAudioModeAnalog()
+ {
+ return GetAudioMode() == EM8300_AUDIOMODE_ANALOG;
+ }
+ int IsAudioModePCM()
+ {
+ return GetAudioMode() == EM8300_AUDIOMODE_DIGITALPCM;
+ }
+ int IsAudioModeAC3()
+ {
+ return GetAudioMode() == EM8300_AUDIOMODE_DIGITALAC3;
+ }
void SetVolume(int volume)
{
m_volume = volume;
diff --git a/patches/vdr-dxr3-ac3.patch b/patches/vdr-dxr3-ac3.patch
deleted file mode 100644
index 0a6310c..0000000
--- a/patches/vdr-dxr3-ac3.patch
+++ /dev/null
@@ -1,424 +0,0 @@
-AC3 patch for vdr-dxr3 by Agneau Egare and Ville Skyttä.
-Apply to: vdr-dxr3 plugin sources.
-Not part of the plugin yet because of some reported problems,
-especially in fast scenes.
-
-Index: dxr3.c
-===================================================================
-RCS file: /cvsroot/dxr3plugin/dxr3/dxr3.c,v
-retrieving revision 1.1.2.28
-diff -u -r1.1.2.28 dxr3.c
---- dxr3.c 3 Apr 2007 15:37:14 -0000 1.1.2.28
-+++ dxr3.c 3 Apr 2007 16:00:57 -0000
-@@ -46,21 +46,12 @@
-
- case DXR3_ANALOG_OUT:
- cDxr3ConfigData::Instance().SetUseDigitalOut(0);
-- cDxr3ConfigData::Instance().SetAc3OutPut(0);
- if (cDxr3Device::InstanceP())
- cDxr3Device::InstanceP()->Reset();
- break;
-
- case DXR3_DIGITAL_OUT:
- cDxr3ConfigData::Instance().SetUseDigitalOut(1);
-- cDxr3ConfigData::Instance().SetAc3OutPut(0);
-- if (cDxr3Device::InstanceP())
-- cDxr3Device::InstanceP()->Reset();
-- break;
--
-- case DXR3_AC3_OUT:
-- cDxr3ConfigData::Instance().SetAc3OutPut(
-- !cDxr3ConfigData::Instance().GetAc3OutPut());
- if (cDxr3Device::InstanceP())
- cDxr3Device::InstanceP()->Reset();
- break;
-Index: dxr3.h
-===================================================================
-RCS file: /cvsroot/dxr3plugin/dxr3/dxr3.h,v
-retrieving revision 1.1.2.10
-diff -u -r1.1.2.10 dxr3.h
---- dxr3.h 3 Apr 2007 15:37:14 -0000 1.1.2.10
-+++ dxr3.h 3 Apr 2007 16:00:57 -0000
-@@ -32,8 +32,7 @@
- DXR3_RESET_HARDWARE,
- DXR3_FORCE_LETTER_BOX,
- DXR3_DIGITAL_OUT,
-- DXR3_ANALOG_OUT,
-- DXR3_AC3_OUT
-+ DXR3_ANALOG_OUT
- };
-
- // ==================================
-@@ -71,22 +70,6 @@
- else
- Add(new cDxr3OsdItem(hk(tr("Switch to digital audio output")),
- DXR3_DIGITAL_OUT));
-- /*
-- if (cDxr3ConfigData::Instance().GetUseDigitalOut())
-- {
-- Add(new cDxr3OsdItem(hk("Analog output"), DXR3_ANALOG_OUT));
--
-- if (cDxr3ConfigData::Instance().GetAc3OutPut())
-- Add(new cDxr3OsdItem(hk(tr("AC3 output off")), DXR3_AC3_OUT));
-- else if (cDxr3Interface::Instance().IsAc3Present())
-- Add(new cDxr3OsdItem(hk(tr("AC3 output on")), DXR3_AC3_OUT));
-- }
-- else
-- {
-- Add(new cDxr3OsdItem(hk(tr("Switch to digital audio output")),
-- DXR3_DIGITAL_OUT));
-- }
-- */
- }
- };
-
-Index: dxr3configdata.c
-===================================================================
-RCS file: /cvsroot/dxr3plugin/dxr3/dxr3configdata.c,v
-retrieving revision 1.4.2.10
-diff -u -r1.4.2.10 dxr3configdata.c
---- dxr3configdata.c 2 Aug 2005 11:22:08 -0000 1.4.2.10
-+++ dxr3configdata.c 3 Apr 2007 16:00:57 -0000
-@@ -27,7 +27,6 @@
- cDxr3ConfigData::cDxr3ConfigData()
- {
- m_digitaloutput = 0;
-- m_ac3output = 0;
- m_card = 0;
- m_forceletterbox = 0;
- m_videomode = PAL;
-Index: dxr3configdata.h
-===================================================================
-RCS file: /cvsroot/dxr3plugin/dxr3/dxr3configdata.h,v
-retrieving revision 1.5.2.10
-diff -u -r1.5.2.10 dxr3configdata.h
---- dxr3configdata.h 2 Aug 2005 11:22:08 -0000 1.5.2.10
-+++ dxr3configdata.h 3 Apr 2007 16:00:57 -0000
-@@ -78,14 +78,6 @@
- {
- return m_forceletterbox = value;
- }
-- int GetAc3OutPut() const
-- {
-- return m_ac3output;
-- }
-- int SetAc3OutPut(int value)
-- {
-- return m_ac3output = value;
-- }
-
- eVideoMode GetVideoMode() const
- {
-@@ -152,7 +144,6 @@
- eMenuMode m_menumode;
-
- int m_digitaloutput;
-- int m_ac3output;
- int m_card;
- int m_forceletterbox;
- int m_brightness;
-Index: dxr3demuxdevice.c
-===================================================================
-RCS file: /cvsroot/dxr3plugin/dxr3/dxr3demuxdevice.c,v
-retrieving revision 1.1.2.15
-diff -u -r1.1.2.15 dxr3demuxdevice.c
---- dxr3demuxdevice.c 28 Jan 2007 16:51:15 -0000 1.1.2.15
-+++ dxr3demuxdevice.c 3 Apr 2007 16:00:58 -0000
-@@ -271,7 +271,7 @@
- //printf("vBuf size = %d\n", m_vBuf.Available());
- //printf("aBuf size = %d\n", m_aBuf.Available());
- /*
-- if (cDxr3ConfigData::Instance().GetAc3OutPut())
-+ if (cDxr3Interface::Instance().IsAudioModeAC3())
- cDxr3Interface::Instance().SetAudioDigitalAC3(); // !!! FIXME
- */
-
-@@ -302,10 +302,6 @@
- aPts = 0;
- vPts = 0;
- bPlaySuc = false;
-- /*
-- if (cDxr3ConfigData::Instance().GetAc3OutPut())
-- cDxr3Interface::Instance().SetAudioDigitalAC3(); // !!! FIXME
-- */
- }
-
- // find start code
-@@ -450,7 +446,7 @@
- }
- else if (pesFrame.GetPesDataType() == cDxr3PesFrame::PES_AUDIO_DATA
- && m_demuxMode != DXR3_DEMUX_VIDEO_ONLY_MODE
-- && !cDxr3ConfigData::Instance().GetAc3OutPut())
-+ && !cDxr3Interface::Instance().IsAudioModeAC3())
- {
- if (m_synchState == DXR3_DEMUX_AUDIO_SYNCHED ||
- m_synchState == DXR3_DEMUX_SYNCHED)
-@@ -513,7 +509,7 @@
- }
- else if (pesFrame.GetPesDataType() == cDxr3PesFrame::PES_PRIVATE_DATA
- && m_demuxMode != DXR3_DEMUX_VIDEO_ONLY_MODE
-- && !cDxr3ConfigData::Instance().GetAc3OutPut()
-+ && !cDxr3Interface::Instance().IsAudioModeAC3()
- && !bAc3Dts)
- {
- if (m_synchState == DXR3_DEMUX_AUDIO_SYNCHED ||
-@@ -562,7 +558,7 @@
- }
- else if (pesFrame.GetPesDataType() == cDxr3PesFrame::PES_PRIVATE_DATA
- && m_demuxMode != DXR3_DEMUX_VIDEO_ONLY_MODE
-- && cDxr3ConfigData::Instance().GetAc3OutPut()
-+ && cDxr3Interface::Instance().IsAudioModeAC3()
- && bAc3Dts)
- {
- if (m_synchState == DXR3_DEMUX_AUDIO_SYNCHED ||
-Index: dxr3device.c
-===================================================================
-RCS file: /cvsroot/dxr3plugin/dxr3/dxr3device.c,v
-retrieving revision 1.2.2.36
-diff -u -r1.2.2.36 dxr3device.c
---- dxr3device.c 28 Jan 2007 18:08:11 -0000 1.2.2.36
-+++ dxr3device.c 3 Apr 2007 16:00:58 -0000
-@@ -35,7 +35,6 @@
- m_Offset = 0;
- m_strBuf.erase(m_strBuf.begin(), m_strBuf.end());
- m_spuDecoder = NULL;
-- m_AC3Present = false;
- m_CalledBySet = false;
- }
-
-@@ -86,7 +85,6 @@
-
- // should this really be here?
- m_Offset = 0;
-- m_AC3Present = false;
- m_strBuf.erase(m_strBuf.begin(), m_strBuf.end());
-
- if (PlayMode == pmAudioOnlyBlack)
-@@ -108,17 +106,10 @@
- m_DemuxDevice.Stop();
- }
-
-+ // TODO: what about AC3???
- if (cDxr3ConfigData::Instance().GetUseDigitalOut())
- {
-- if (cDxr3ConfigData::Instance().GetAc3OutPut() && m_CalledBySet)
-- {
-- cDxr3Interface::Instance().SetAudioDigitalAC3(); // !!! FIXME
-- }
-- else
-- {
-- cDxr3Interface::Instance().SetAudioDigitalPCM();
-- cDxr3ConfigData::Instance().SetAc3OutPut(0);
-- }
-+ cDxr3Interface::Instance().SetAudioDigitalPCM();
- }
- else
- {
-@@ -282,7 +273,10 @@
- int retLength = 0;
- int origLength = Length;
-
-- m_AC3Present = true;
-+ bool isAc3 = ((Id & 0xF0) == 0x80) || Id == 0xbd;
-+
-+ if (isAc3 && !cDxr3Interface::Instance().IsAudioModeAC3())
-+ cDxr3Interface::Instance().SetAudioDigitalAC3();
-
- if ((m_DemuxDevice.GetDemuxMode() == DXR3_DEMUX_TRICK_MODE &&
- m_DemuxDevice.GetTrickState() == DXR3_FREEZE) ||
-@@ -298,7 +292,7 @@
- {
- retLength = m_DemuxDevice.DemuxAudioPes((const uint8_t*)m_strBuf.data(), m_strBuf.length());
- } else {
-- retLength = m_DemuxDevice.DemuxPes((const uint8_t*)m_strBuf.data(), m_strBuf.length(), true);
-+ retLength = m_DemuxDevice.DemuxPes((const uint8_t*)m_strBuf.data(), m_strBuf.length(), isAc3);
- }
- }
- else if (m_PlayMode == pmAudioOnly)
-@@ -307,7 +301,7 @@
- }
- else
- {
-- retLength = m_DemuxDevice.DemuxPes((const uint8_t*)Data, Length, true);
-+ retLength = m_DemuxDevice.DemuxPes((const uint8_t*)Data, Length, isAc3);
- }
-
- Length -= retLength;
-Index: dxr3device.h
-===================================================================
-RCS file: /cvsroot/dxr3plugin/dxr3/dxr3device.h,v
-retrieving revision 1.1.2.18
-diff -u -r1.1.2.18 dxr3device.h
---- dxr3device.h 7 Jan 2007 21:59:01 -0000 1.1.2.18
-+++ dxr3device.h 3 Apr 2007 16:00:58 -0000
-@@ -78,7 +78,6 @@
- protected:
- ePlayMode m_PlayMode;
- cDxr3DemuxDevice m_DemuxDevice;
-- bool m_AC3Present;
- bool m_CalledBySet;
- std::string m_strBuf;
- int m_Offset;
-Index: dxr3i18n.c
-===================================================================
-RCS file: /cvsroot/dxr3plugin/dxr3/dxr3i18n.c,v
-retrieving revision 1.4.2.16
-diff -u -r1.4.2.16 dxr3i18n.c
---- dxr3i18n.c 8 Jun 2006 15:13:20 -0000 1.4.2.16
-+++ dxr3i18n.c 3 Apr 2007 16:00:58 -0000
-@@ -301,52 +301,6 @@
- "", // Czech
- },
- {
-- "AC3 output on",
-- "AC3 Ausgabe Ein",
-- "", // Slovenski
-- "Attiva uscita AC3",
-- "", // Nederlands
-- "", // Português
-- "", // Français
-- "", // Norsk
-- "AC3-ulostulo päälle",
-- "W³±cz wyj¶cie AC3",
-- "Activa salida AC3",
-- "", // ÅëëçíéêÜ (Greek)
-- "", // Svenska
-- "", // Românã
-- "", // Magyar
-- "Activa sortida AC3",
-- "", // ÀãááÚØÙ (Russian)
-- "", // Hrvatski
-- "", // Eesti
-- "", // Dansk
-- "", // Czech
-- },
-- {
-- "AC3 output off",
-- "AC3 Ausgabe Aus",
-- "", // Slovenski
-- "Disattiva uscita AC3",
-- "", // Nederlands
-- "", // Português
-- "", // Français
-- "", // Norsk
-- "AC3-ulostulo pois",
-- "Wy³±cz wyj¶cie AC3",
-- "Desactiva salida AC3",
-- "", // ÅëëçíéêÜ (Greek)
-- "", // Svenska
-- "", // Românã
-- "", // Magyar
-- "Desactiva sortida AC3",
-- "", // ÀãááÚØÙ (Russian)
-- "", // Hrvatski
-- "", // Eesti
-- "", // Dansk
-- "", // Czech
-- },
-- {
- "Switch to digital audio output",
- "Digitaler Ausgang",
- "", // Slovenski
-Index: dxr3interface.c
-===================================================================
-RCS file: /cvsroot/dxr3plugin/dxr3/dxr3interface.c,v
-retrieving revision 1.4.2.31
-diff -u -r1.4.2.31 dxr3interface.c
---- dxr3interface.c 28 Jan 2007 16:51:15 -0000 1.4.2.31
-+++ dxr3interface.c 3 Apr 2007 16:00:58 -0000
-@@ -139,26 +139,36 @@
- //! set audio output to digital ac3
- void cDxr3Interface::SetAudioDigitalAC3()
- {
-- if (m_audioMode != EM8300_AUDIOMODE_DIGITALAC3)
-- {
-- int ioval = 0;
-- Lock();
-+ int ioval = 0;
-+ Lock();
-
-- if (!m_ExternalReleased && m_audioMode != EM8300_AUDIOMODE_DIGITALAC3)
-+ if (!m_ExternalReleased && m_audioMode != EM8300_AUDIOMODE_DIGITALAC3)
-+ {
-+ m_audioMode = ioval = EM8300_AUDIOMODE_DIGITALAC3;
-+ isyslog("dxr3: setting digital AC3 audio mode");
-+ if (ioctl(m_fdControl, EM8300_IOCTL_SET_AUDIOMODE, &ioval) < 0)
- {
-- m_audioMode = ioval = EM8300_AUDIOMODE_DIGITALAC3;
-- isyslog("dxr3: setting digital AC3 audio mode");
-- if (ioctl(m_fdControl, EM8300_IOCTL_SET_AUDIOMODE, &ioval) < 0)
-- {
-- esyslog("dxr3: unable to set AC3 audio mode: %m");
-- }
-- ReOpenAudio();
-+ esyslog("dxr3: unable to set AC3 audio mode: %m");
- }
--
-- Unlock();
-+ ReOpenAudio();
- }
-+
-+ Unlock();
- }
-
-+
-+// =================================
-+//! get current audio mode
-+int cDxr3Interface::GetAudioMode()
-+{
-+ int audioMode;
-+ Lock();
-+ ioctl(m_fdControl, EM8300_IOCTL_GET_AUDIOMODE, &audioMode);
-+ Unlock();
-+ return audioMode;
-+}
-+
-+
- // ==================================
- //! set audio speed
- void cDxr3Interface::SetAudioSpeed(uint32_t speed)
-@@ -591,7 +601,7 @@
-
- if (!m_ExternalReleased)
- {
-- if (!cDxr3ConfigData::Instance().GetAc3OutPut())
-+ if (!cDxr3Interface::Instance().IsAudioModeAC3())
- ResampleVolume((short*)pFrame->GetData(), pFrame->GetCount());
-
- written = write(m_fdAudio, pFrame->GetData(), pFrame->GetCount());
-@@ -619,7 +629,7 @@
-
- if (!m_ExternalReleased)
- {
-- if (!cDxr3ConfigData::Instance().GetAc3OutPut())
-+ if (!cDxr3Interface::Instance().IsAudioModeAC3())
- ResampleVolume((short*)pBuf, length);
-
- if ((written = write(m_fdAudio, pBuf, length)) < 0)
-Index: dxr3interface.h
-===================================================================
-RCS file: /cvsroot/dxr3plugin/dxr3/dxr3interface.h,v
-retrieving revision 1.2.2.19
-diff -u -r1.2.2.19 dxr3interface.h
---- dxr3interface.h 28 Jan 2007 16:51:15 -0000 1.2.2.19
-+++ dxr3interface.h 3 Apr 2007 16:00:58 -0000
-@@ -56,6 +56,19 @@
- void SetAudioAnalog();
- void SetAudioDigitalPCM();
- void SetAudioDigitalAC3();
-+ int GetAudioMode();
-+ int IsAudioModeAnalog()
-+ {
-+ return GetAudioMode() == EM8300_AUDIOMODE_ANALOG;
-+ }
-+ int IsAudioModePCM()
-+ {
-+ return GetAudioMode() == EM8300_AUDIOMODE_DIGITALPCM;
-+ }
-+ int IsAudioModeAC3()
-+ {
-+ return GetAudioMode() == EM8300_AUDIOMODE_DIGITALAC3;
-+ }
- void SetVolume(int volume)
- {
- m_volume = volume;