diff options
-rw-r--r-- | HISTORY | 3 | ||||
-rw-r--r-- | TROUBLESHOOTING | 1 | ||||
-rw-r--r-- | dxr3.c | 11 | ||||
-rw-r--r-- | dxr3.h | 19 | ||||
-rw-r--r-- | dxr3configdata.c | 1 | ||||
-rw-r--r-- | dxr3configdata.h | 9 | ||||
-rw-r--r-- | dxr3demuxdevice.c | 12 | ||||
-rw-r--r-- | dxr3device.c | 22 | ||||
-rw-r--r-- | dxr3device.h | 1 | ||||
-rw-r--r-- | dxr3i18n.c | 46 | ||||
-rw-r--r-- | dxr3interface.c | 42 | ||||
-rw-r--r-- | dxr3interface.h | 13 | ||||
-rw-r--r-- | patches/vdr-dxr3-ac3.patch | 424 |
13 files changed, 55 insertions, 549 deletions
@@ -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 @@ -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; @@ -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; @@ -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; |