30 #include <sys/types.h>
39 #define LOC QString("ELDUTILS: ")
96 "DSD (One Bit Audio)",
144 GRAB_BITS(
const char* buf,
size_t byte, uint8_t lowbit, uint8_t bits)
145 {
return (buf[
byte] >> lowbit) & ((1 << bits) - 1); };
174 for (
int i = 0; i < 7; i++)
175 if ((val & (1 << i)) != 0)
189 LOG(VB_AUDIO, LOG_INFO,
LOC +
"audio coding type 0 not expected");
223 LOG(VB_AUDIO, LOG_INFO,
LOC + QString(
"audio coding xtype %1 not expected")
243 LOG(VB_AUDIO, LOG_INFO,
LOC + QString(
"Unknown ELD version %1").arg(
m_e.
eld_ver));
260 m_e.
port_id = qFromLittleEndian<quint64>(buf + 8);
268 LOG(VB_AUDIO, LOG_INFO,
LOC + QString(
"out of range MNL %1").arg(mnl));
281 LOG(VB_AUDIO, LOG_INFO,
LOC + QString(
"out of range SAD %1").arg(i));
307 static const std::array<const uint32_t,12> rates {
308 5512, 8000, 11025, 16000, 22050, 32000, 44100, 48000, 88200,
309 96000, 176400, 192000 };
310 QString result = QString();
312 for (
size_t i = 0; i < rates.size(); i++)
314 if ((pcm & (1 << i)) != 0)
316 result += QString(
" %1").arg(rates[i]);
328 static const std::array<const uint8_t,3> bits { 16, 20, 24 };
329 QString result = QString();
331 for (
size_t i = 0; i < bits.size(); i++)
333 if ((pcm & (1 << i)) != 0)
335 result += QString(
" %1").arg(bits[i]);
348 QString buf2 =
", bits =";
353 buf2 = QString(
", max bitrate = %1").arg(a->
max_bitrate);
357 return QString(
"supports coding type %1:"
358 " channels = %2, rates =%3%4")
365 QString result = QString();
381 case 2:
return "CEA-861D or below";
382 case 31:
return "partial";
383 default:
return "reserved";
391 case 0:
return "no CEA EDID Timing Extension block present";
392 case 1:
return "CEA-861";
393 case 2:
return "CEA-861-A";
394 case 3:
return "CEA-861-B, C or D";
395 default:
return "reserved";
401 QString result = QString(
"manufacture_id\t\t0x%1\n")
403 result += QString(
"product_id\t\t0x%1\n").arg(
m_e.
product_id, 0, 16);
404 result += QString(
"port_id\t\t\t0x%1\n").arg((
long long)
m_e.
port_id);
408 result += QString(
"sad_count\t\t%1\n").arg(
m_e.
sad_count);
421 LOG(VB_AUDIO, LOG_INFO,
LOC +
"Invalid ELD");
424 LOG(VB_AUDIO, LOG_INFO,
LOC + QString(
"Detected monitor %1 at connection type %2")
429 LOG(VB_AUDIO, LOG_INFO,
LOC + QString(
"available speakers:%1")
434 LOG(VB_AUDIO, LOG_INFO,
LOC + QString(
"supported codecs = %1").arg(
codecs_desc()));
459 channels = std::max(a->
channels, channels);
471 channels = std::max(a->
channels, channels);
478 QString result = QString();
479 bool found_one =
false;