<control type="toggle" />
</setting>
</group>
+ <group id="3">
+ <setting id="audiooutput.truehdpassthrough">
+ <visible>false</visible>
+ </setting>
+ <setting id="audiooutput.dtshdpassthrough">
+ <visible>false</visible>
+ </setting>
+ </group>
</category>
</section>
</settings>
AEAudioFormat outputFormat;
if (m_mode == MODE_RAW)
{
+ inputFormat.m_frames = m_sinkFormat.m_frames;
outputFormat = inputFormat;
sinkInputFormat = m_sinkFormat;
}
m_settings.guisoundmode = CSettings::Get().GetInt("audiooutput.guisoundmode");
m_settings.passthrough = m_settings.config == AE_CONFIG_FIXED ? false : CSettings::Get().GetBool("audiooutput.passthrough");
+ if (!m_sink.HasPassthroughDevice())
+ m_settings.passthrough = false;
m_settings.ac3passthrough = CSettings::Get().GetBool("audiooutput.ac3passthrough");
m_settings.ac3transcode = CSettings::Get().GetBool("audiooutput.ac3transcode");
m_settings.eac3passthrough = CSettings::Get().GetBool("audiooutput.eac3passthrough");
for(unsigned int j=0; j<m_format.m_channelLayout.Count(); j++)
{
idx = m_remapper->GetAVChannelIndex(m_format.m_channelLayout[j], avLayout);
- if (idx == i)
+ if (idx == (int)i)
{
ffmpegLayout += m_format.m_channelLayout[j];
break;
for(unsigned int j=0; j<m_format.m_channelLayout.Count(); j++)
{
idx = m_remapper->GetAVChannelIndex(m_format.m_channelLayout[j], avLayout);
- if (idx == i)
+ if (idx == (int)i)
{
remapLayout += ffmpegLayout[j];
break;
bool CAESinkPi::Initialize(AEAudioFormat &format, std::string &device)
{
+ char response[80];
+ /* if we are raw need to let gpu know */
+ if (AE_IS_RAW(format.m_dataFormat))
+ {
+ vc_gencmd(response, sizeof response, "hdmi_stream_channels 1");
+ m_passthrough = true;
+ }
+ else
+ {
+ vc_gencmd(response, sizeof response, "hdmi_stream_channels 0");
+ m_passthrough = false;
+ }
+
m_initDevice = device;
m_initFormat = format;
// setup for a 50ms sink feed from SoftAE
uint32_t m_submitted;
OMX_AUDIO_PARAM_PCMMODETYPE m_pcm_input;
COMXCoreComponent m_omx_render;
+ bool m_passthrough;
};
#endif
PREDICATE_RETURN(lh.type_index == CMediaSettings::Get().GetCurrentVideoSettings().m_AudioStream
, rh.type_index == CMediaSettings::Get().GetCurrentVideoSettings().m_AudioStream);
+ // TrueHD never has enough cpu to decode on Pi, so prefer to avoid that
+ PREDICATE_RETURN(lh.codec != "truehd"
+ , rh.codec != "truehd");
+
if(!StringUtils::EqualsNoCase(CSettings::Get().GetString("locale.audiolanguage"), "original"))
{
CStdString audio_language = g_langInfo.GetAudioLanguage();
|| m_CurrentVideo.dts == DVD_NOPTS_VALUE)
return;
- const int64_t clock = DVD_TIME_TO_MSEC(min(m_CurrentAudio.dts, m_CurrentVideo.dts) + m_offset_pts);
+ const int64_t clock = GetTime();
CEdl::Cut cut;
if(!m_Edl.InCut(clock, &cut))
m_submitted_eos = false;
m_failed_eos = false;
- if(!m_decoded_width || !m_decoded_height)
- return false;
-
if(hints.extrasize > 0 && hints.extradata != NULL)
{
m_extrasize = hints.extrasize;