summaryrefslogtreecommitdiff
path: root/setup.c
diff options
context:
space:
mode:
Diffstat (limited to 'setup.c')
-rw-r--r--setup.c84
1 files changed, 40 insertions, 44 deletions
diff --git a/setup.c b/setup.c
index 603670c..0ea9fef 100644
--- a/setup.c
+++ b/setup.c
@@ -31,8 +31,12 @@ public:
m_video(video),
m_osd(osd)
{
- m_audioport[0] = tr("analog");
- m_audioport[1] = tr("HDMI");
+ m_audioPort[0] = tr("analog");
+ m_audioPort[1] = tr("HDMI");
+
+ m_audioFormat[0] = tr("pass through");
+ m_audioFormat[1] = tr("multi channel PCM");
+ m_audioFormat[2] = tr("stereo PCM");
m_videoFraming[0] = tr("box");
m_videoFraming[1] = tr("crop");
@@ -61,14 +65,11 @@ public:
eOSState ProcessKey(eKeys Key)
{
int newAudioPort = m_audio.port;
- int newPassthrough = m_audio.passthrough;
-
eOSState state = cMenuSetupPage::ProcessKey(Key);
if (Key != kNone)
{
- if ((newAudioPort != m_audio.port) ||
- (newPassthrough != m_audio.passthrough))
+ if (newAudioPort != m_audio.port)
Setup();
}
@@ -80,8 +81,7 @@ protected:
virtual void Store(void)
{
SetupStore("AudioPort", m_audio.port);
- SetupStore("PassThrough", m_audio.passthrough);
- SetupStore("IgnoreAudioEDID", m_audio.ignoreEDID);
+ SetupStore("AudioFormat", m_audio.format);
SetupStore("VideoFraming", m_video.framing);
SetupStore("Resolution", m_video.resolution);
@@ -112,16 +112,12 @@ private:
tr("Video Framing"), &m_video.framing, 3, m_videoFraming));
Add(new cMenuEditStraItem(
- tr("Audio Port"), &m_audio.port, 2, m_audioport));
+ tr("Audio Port"), &m_audio.port, 2, m_audioPort));
if (m_audio.port == 1)
{
- Add(new cMenuEditBoolItem(
- tr("Digital Audio Pass-Through"), &m_audio.passthrough));
-
- if (m_audio.passthrough)
- Add(new cMenuEditBoolItem(
- tr("Ignore Audio EDID"), &m_audio.ignoreEDID));
+ Add(new cMenuEditStraItem(tr("Digital Audio Format"),
+ &m_audio.format, 3, m_audioFormat));
}
Add(new cMenuEditBoolItem(
@@ -135,7 +131,8 @@ private:
cRpiSetup::VideoParameters m_video;
cRpiSetup::OsdParameters m_osd;
- const char *m_audioport[2];
+ const char *m_audioPort[2];
+ const char *m_audioFormat[3];
const char *m_videoFraming[3];
const char *m_videoResolution[6];
const char *m_videoFrameRate[9];
@@ -211,30 +208,31 @@ bool cRpiSetup::IsAudioFormatSupported(cAudioCodec::eCodec codec,
if (codec == cAudioCodec::eMPG || codec == cAudioCodec::eAAC)
return false;
- if (GetInstance()->m_audio.ignoreEDID)
- return true;
-
- if (vc_tv_hdmi_audio_supported(
- codec == cAudioCodec::eMPG ? EDID_AudioFormat_eMPEG1 :
- codec == cAudioCodec::eAC3 ? EDID_AudioFormat_eAC3 :
- codec == cAudioCodec::eEAC3 ? EDID_AudioFormat_eEAC3 :
- codec == cAudioCodec::eAAC ? EDID_AudioFormat_eAAC :
- EDID_AudioFormat_ePCM, channels,
- samplingRate == 32000 ? EDID_AudioSampleRate_e32KHz :
- samplingRate == 44100 ? EDID_AudioSampleRate_e44KHz :
- samplingRate == 88200 ? EDID_AudioSampleRate_e88KHz :
- samplingRate == 96000 ? EDID_AudioSampleRate_e96KHz :
- samplingRate == 176000 ? EDID_AudioSampleRate_e176KHz :
- samplingRate == 192000 ? EDID_AudioSampleRate_e192KHz :
- EDID_AudioSampleRate_e48KHz,
- EDID_AudioSampleSize_16bit) == 0)
- return true;
-
- DLOG("%dch %s, %d.%dkHz not supported by HDMI device",
- channels, cAudioCodec::Str(codec),
- samplingRate / 1000, (samplingRate % 1000) / 100);
-
- return false;
+ switch (GetAudioFormat())
+ {
+ case cAudioFormat::ePassThrough:
+ return (vc_tv_hdmi_audio_supported(
+ codec == cAudioCodec::eMPG ? EDID_AudioFormat_eMPEG1 :
+ codec == cAudioCodec::eAC3 ? EDID_AudioFormat_eAC3 :
+ codec == cAudioCodec::eEAC3 ? EDID_AudioFormat_eEAC3 :
+ codec == cAudioCodec::eAAC ? EDID_AudioFormat_eAAC :
+ EDID_AudioFormat_ePCM, channels,
+ samplingRate == 32000 ? EDID_AudioSampleRate_e32KHz :
+ samplingRate == 44100 ? EDID_AudioSampleRate_e44KHz :
+ samplingRate == 88200 ? EDID_AudioSampleRate_e88KHz :
+ samplingRate == 96000 ? EDID_AudioSampleRate_e96KHz :
+ samplingRate == 176000 ? EDID_AudioSampleRate_e176KHz :
+ samplingRate == 192000 ? EDID_AudioSampleRate_e192KHz :
+ EDID_AudioSampleRate_e48KHz,
+ EDID_AudioSampleSize_16bit) == 0);
+
+ case cAudioFormat::eMultiChannelPCM:
+ return codec == cAudioCodec::ePCM;
+
+ default:
+ case cAudioFormat::eStereoPCM:
+ return codec == cAudioCodec::ePCM && channels == 2;
+ }
}
void cRpiSetup::SetHDMIChannelMapping(bool passthrough, int channels)
@@ -289,10 +287,8 @@ bool cRpiSetup::Parse(const char *name, const char *value)
{
if (!strcasecmp(name, "AudioPort"))
m_audio.port = atoi(value);
- else if (!strcasecmp(name, "PassThrough"))
- m_audio.passthrough = atoi(value);
- else if (!strcasecmp(name, "IgnoreAudioEDID"))
- m_audio.ignoreEDID = atoi(value);
+ else if (!strcasecmp(name, "AudioFormat"))
+ m_audio.format = atoi(value);
else if (!strcasecmp(name, "VideoFraming"))
m_video.framing = atoi(value);
else if (!strcasecmp(name, "Resolution"))