CSingleLock lock(m_lock);
m_sinkUpdate = XbmcThreads::SystemClockMillis();
m_sinkDelay = 0;
- m_sinkCacheTotal = 0;
- m_sinkLatency = 0;
m_sinkSampleRate = sampleRate;
m_bufferedSamples = 0;
m_suspended = false;
m_extError = true;
return false;
}
- AEAudioFormat *data;
- data = (AEAudioFormat*)reply->data;
+ SinkReply *data;
+ data = (SinkReply*)reply->data;
if (data)
{
- m_sinkFormat = *data;
+ m_sinkFormat = data->format;
+ m_sinkHasVolume = data->hasVolume;
+ m_stats.SetSinkCacheTotal(data->cacheTotal);
+ m_stats.SetSinkLatency(data->latency);
}
- m_sinkHasVolume = m_sink.HasVolume();
reply->Release();
}
else
{
CLog::Log(LOGERROR, "ActiveAE::%s - failed to init", __FUNCTION__);
+ m_stats.SetSinkCacheTotal(0);
+ m_stats.SetSinkLatency(0);
m_extError = true;
return false;
}
}
}
-bool CActiveAESink::HasVolume()
-{
- if (!m_sink)
- return false;
- return m_sink->HasVolume();
-}
-
AEDeviceType CActiveAESink::GetDeviceType(const std::string &device)
{
std::string dev = device;
if (!m_extError)
{
- m_stats->SetSinkCacheTotal(m_sink->GetCacheTotal());
- m_stats->SetSinkLatency(m_sink->GetLatency());
+ SinkReply reply;
+ reply.format = m_sinkFormat;
+ reply.cacheTotal = m_sink->GetCacheTotal();
+ reply.latency = m_sink->GetLatency();
+ reply.hasVolume = m_sink->HasVolume();
m_state = S_TOP_CONFIGURED_IDLE;
m_extTimeout = 10000;
- msg->Reply(CSinkControlProtocol::ACC, &m_sinkFormat, sizeof(AEAudioFormat));
+ msg->Reply(CSinkControlProtocol::ACC, &reply, sizeof(SinkReply));
}
else
{
const std::string *device;
};
+struct SinkReply
+{
+ AEAudioFormat format;
+ float cacheTotal;
+ float latency;
+ bool hasVolume;
+};
+
class CSinkControlProtocol : public Protocol
{
public:
std::string GetDefaultDevice(bool passthrough);
void Start();
void Dispose();
- bool HasVolume();
AEDeviceType GetDeviceType(const std::string &device);
bool HasPassthroughDevice();
CSinkControlProtocol m_controlPort;