summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Gmeiner <christian.gmeiner@gmail.com>2009-12-09 12:33:30 +0100
committerChristian Gmeiner <christian.gmeiner@gmail.com>2009-12-09 12:33:30 +0100
commit20a8ac86da1f1a75bbc9f8a863de455babccb0c1 (patch)
tree23f7d375d129e3fa73b739ec85294c50616bf7ea
parentc9459a581236bb1a8329a2f8efadd43f47ee4cce (diff)
downloadvdr-plugin-dxr3-20a8ac86da1f1a75bbc9f8a863de455babccb0c1.tar.gz
vdr-plugin-dxr3-20a8ac86da1f1a75bbc9f8a863de455babccb0c1.tar.bz2
change structure of iAudio class
This change introduces some bigger changes in how analog/digital audio will be handled. VDR notifices the plugin via cDxr3Device::SetDigitalAudioDevice, if if the we need to use analog or digital audio. With digital audio I mean digital PCM. Based on the informations get via the pes packet ac3dts will be switched on or off. So the svdrp commands SDO, SAO and SAC3 do not make sense at the moment.
-rw-r--r--dxr3.c2
-rw-r--r--dxr3audio-alsa.c4
-rw-r--r--dxr3audio-alsa.h2
-rw-r--r--dxr3audio-oss.c34
-rw-r--r--dxr3audio-oss.h2
-rw-r--r--dxr3audio.c2
-rw-r--r--dxr3audio.h15
-rw-r--r--dxr3demuxdevice.c6
-rw-r--r--dxr3device.c2
-rw-r--r--dxr3output-audio.c4
10 files changed, 25 insertions, 48 deletions
diff --git a/dxr3.c b/dxr3.c
index 3a4debb..17397b6 100644
--- a/dxr3.c
+++ b/dxr3.c
@@ -274,6 +274,7 @@ cString cPluginDxr3::SVDRPCommand(const char *Command, const char *Option,
cDxr3Interface::instance()->updateBcsValues();
return cString::sprintf("Saturation set to %d", value);
}
+#if 0
if (!strcasecmp(Command, "SDO")) {
device->getAudioOutput()->setAudioMode(iAudio::DigitalPcm);
return "Switched to digital PCM audio output";
@@ -286,6 +287,7 @@ cString cPluginDxr3::SVDRPCommand(const char *Command, const char *Option,
device->getAudioOutput()->setAudioMode(iAudio::Ac3);
return "Switched to digital AC3 audio output";
}
+#endif
if (!strcasecmp(Command, "DON")) {
device->turnPlugin(true);
return "vdr-plugin-dxr3 turned on";
diff --git a/dxr3audio-alsa.c b/dxr3audio-alsa.c
index d327661..6129f58 100644
--- a/dxr3audio-alsa.c
+++ b/dxr3audio-alsa.c
@@ -227,10 +227,6 @@ void cAudioAlsa::write(uchar* data, size_t size)
}
}
-void cAudioAlsa::setAudioMode(AudioMode mode)
-{
-}
-
void cAudioAlsa::Xrun()
{
int res;
diff --git a/dxr3audio-alsa.h b/dxr3audio-alsa.h
index ed96d06..31e4f95 100644
--- a/dxr3audio-alsa.h
+++ b/dxr3audio-alsa.h
@@ -36,7 +36,7 @@ public:
virtual void releaseDevice();
virtual void setup(const SampleContext& ctx);
virtual void write(uchar* data, size_t size);
- virtual void setAudioMode(AudioMode m);
+ virtual void setDigitalAudio(bool on) {}
private:
snd_pcm_t *handle;
diff --git a/dxr3audio-oss.c b/dxr3audio-oss.c
index ae6cbea..9f3409d 100644
--- a/dxr3audio-oss.c
+++ b/dxr3audio-oss.c
@@ -38,14 +38,6 @@ void cAudioOss::openDevice()
exit(1);
}
- if (cDxr3ConfigData::instance()->GetUseDigitalOut()) {
- dsyslog("[dxr3-audio-oss] audio mode: digital");
- setAudioMode(DigitalPcm);
- } else {
- dsyslog("[dxr3-audio-oss] audio mode: analog");
- setAudioMode(Analog);
- }
-
open = true;
}
@@ -91,27 +83,23 @@ void cAudioOss::write(uchar* data, size_t size)
}
}
-void cAudioOss::setAudioMode(AudioMode mode)
+void cAudioOss::setDigitalAudio(bool on)
{
- uint32_t ioval = 0;
+ if (digitalAudio == on) {
+ return;
+ }
- switch (mode) {
- case Analog:
- ioval = EM8300_AUDIOMODE_ANALOG;
- break;
+ uint32_t ioval = 0;
- case DigitalPcm:
+ if (on) {
ioval = EM8300_AUDIOMODE_DIGITALPCM;
- break;
-
- case Ac3:
- ioval = EM8300_AUDIOMODE_DIGITALAC3;
- break;
+ } else {
+ ioval = EM8300_AUDIOMODE_ANALOG;
}
// we need to do it this way, as we dont have access
// to the file handle for the conrtol sub device.
- if (cDxr3Interface::instance()->OssSetPlayMode(ioval)) {
- this->mode = mode;
- }
+ cDxr3Interface::instance()->OssSetPlayMode(ioval);
+
+ digitalAudio = on;
}
diff --git a/dxr3audio-oss.h b/dxr3audio-oss.h
index a5232be..998e22a 100644
--- a/dxr3audio-oss.h
+++ b/dxr3audio-oss.h
@@ -32,7 +32,7 @@ public:
virtual void releaseDevice();
virtual void setup(const SampleContext& ctx);
virtual void write(uchar* data, size_t size);
- virtual void setAudioMode(AudioMode m);
+ virtual void setDigitalAudio(bool on);
private:
int fd;
diff --git a/dxr3audio.c b/dxr3audio.c
index 7cfbc50..793efad 100644
--- a/dxr3audio.c
+++ b/dxr3audio.c
@@ -29,7 +29,7 @@ const static int AUDIO_STEREO = 0;
const static int AUDIO_MONO_LEFT = 1;
const static int AUDIO_MONO_RIGHT = 2;
-iAudio::iAudio() : open(false), vol(0), audioChannel(0), digitalAudio(false)
+iAudio::iAudio() : open(false), vol(0), audioChannel(0), digitalAudio(false), ac3dts(false)
{
memset(&curContext, 0, sizeof(SampleContext));
}
diff --git a/dxr3audio.h b/dxr3audio.h
index e6039d9..e508839 100644
--- a/dxr3audio.h
+++ b/dxr3audio.h
@@ -31,12 +31,6 @@ struct SampleContext {
class iAudio {
public:
- enum AudioMode {
- Analog,
- DigitalPcm,
- Ac3,
- };
-
iAudio();
virtual ~iAudio() {}
@@ -52,13 +46,10 @@ public:
void setAudioChannel(int channel) { audioChannel = channel; }
int getAudioChannel() { return audioChannel; }
- virtual void setDigitalAudio(bool on) { digitalAudio = on; }
+ virtual void setDigitalAudio(bool on) = 0;
bool isDigitalAudio() { return digitalAudio; }
- virtual void setAudioMode(AudioMode m) = 0;
- AudioMode getAudioMode() { return mode; }
-
- bool isAudioModeAC3() { return mode == Ac3; }
+ bool isAc3Dts() { return ac3dts; }
protected:
@@ -67,7 +58,7 @@ protected:
int audioChannel;
bool digitalAudio;
SampleContext curContext;
- AudioMode mode;
+ bool ac3dts;
};
#endif /*_AUDIO_H_*/
diff --git a/dxr3demuxdevice.c b/dxr3demuxdevice.c
index 2e3a37d..1f814f7 100644
--- a/dxr3demuxdevice.c
+++ b/dxr3demuxdevice.c
@@ -334,7 +334,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
- && !m_pAudioThread->audio()->isAudioModeAC3()) {
+ && !m_pAudioThread->audio()->isAc3Dts()) {
if (m_synchState == DXR3_DEMUX_AUDIO_SYNCHED ||
m_synchState == DXR3_DEMUX_SYNCHED) {
if (pts && m_synchState != DXR3_DEMUX_SYNCHED) {
@@ -381,7 +381,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
- && !m_pAudioThread->audio()->isAudioModeAC3()
+ && !m_pAudioThread->audio()->isAc3Dts()
&& !bAc3Dts) {
if (m_synchState == DXR3_DEMUX_AUDIO_SYNCHED ||
m_synchState == DXR3_DEMUX_SYNCHED) {
@@ -416,7 +416,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
- && m_pAudioThread->audio()->isAudioModeAC3()
+ && m_pAudioThread->audio()->isAc3Dts()
&& bAc3Dts) {
if (m_synchState == DXR3_DEMUX_AUDIO_SYNCHED ||
m_synchState == DXR3_DEMUX_SYNCHED) {
diff --git a/dxr3device.c b/dxr3device.c
index 41bf9cc..92ea540 100644
--- a/dxr3device.c
+++ b/dxr3device.c
@@ -193,7 +193,7 @@ int cDxr3Device::PlayVideo(const uchar *Data, int Length)
return Length;
}
- return m_DemuxDevice.DemuxPes(Data, Length);
+ return m_DemuxDevice.DemuxPes(Data, Length, false);
}
// ==================================
diff --git a/dxr3output-audio.c b/dxr3output-audio.c
index 21fc11e..aaf8a97 100644
--- a/dxr3output-audio.c
+++ b/dxr3output-audio.c
@@ -118,7 +118,7 @@ void cDxr3AudioOutThread::PlayFrame(cFixedLengthFrame *frame)
}
// volume changes
- if (!audio()->isAudioModeAC3()) {
+ if (!audio()->isAc3Dts()) {
audioOutput->changeVolume((short *)frame->GetData(), (size_t)frame->GetCount());
}
@@ -131,7 +131,7 @@ void cDxr3AudioOutThread::PlayFrame(cDxr3PesFrame *frame)
audioOutput->setup(frame->ctx);
// volume changes
- if (!audio()->isAudioModeAC3()) {
+ if (!audio()->isAc3Dts()) {
audioOutput->changeVolume((short *)frame->decoded, (size_t)frame->decodedSize);
}