MythTV  master
audiooutputsettings.cpp
Go to the documentation of this file.
1 /* -*- Mode: c++ -*-
2  *
3  * Copyright (C) 2010 foobum@gmail.com and jyavenard@gmail.com
4  *
5  * Licensed under the GPL v2 or a later version at your choosing.
6  */
7 
8 #include <array>
9 #include <algorithm>
10 #include <vector>
11 
14 
15 #include "audiooutputsettings.h"
16 #include "eldutils.h"
17 
18 extern "C" {
19 #include "libavutil/avutil.h" // to check version of libavformat
20 }
21 
22 #define LOC QString("AOS: ")
23 
25 {
26  5512, 8000, 11025, 16000, 22050, 32000, 44100,
27  48000, 88200, 96000, 176400, 192000
28 };
29 
31 {
33 };
34 
36  m_invalid(invalid)
37 {
38  m_srIt = kStdRates.begin();
39  m_sfIt = kStdFormats.begin();
40 }
41 
43 {
44  m_rates.clear();
45  m_formats.clear();
46  m_channels.clear();
47 }
48 
50  const AudioOutputSettings &rhs)
51 {
52  if (this == &rhs)
53  return *this;
54  m_rates = rhs.m_rates;
55  m_formats = rhs.m_formats;
56  m_channels = rhs.m_channels;
58  m_features = rhs.m_features;
59  m_invalid = rhs.m_invalid;
60  m_hasEld = rhs.m_hasEld;
61  m_eld = rhs.m_eld;
62  m_srIt = kStdRates.begin() + (rhs.m_srIt - kStdRates.begin());
63  m_sfIt = kStdFormats.begin() + (rhs.m_sfIt - kStdFormats.begin());
64  return *this;
65 }
66 
68 {
69  if (m_srIt == kStdRates.end())
70  {
71  m_srIt = kStdRates.begin();
72  return 0;
73  }
74 
75  return *m_srIt++;
76 }
77 
79 {
80  m_rates.push_back(rate);
81  LOG(VB_AUDIO, LOG_INFO, LOC +
82  QString("Sample rate %1 is supported").arg(rate));
83 }
84 
86 {
87  if (m_rates.empty() && rate == 48000)
88  return true;
89 
90  auto result = std::find(m_rates.cbegin(), m_rates.cend(), rate);
91  return result != m_rates.end();
92 }
93 
95 {
96  if (m_rates.empty())
97  return 48000;
98  return m_rates.back();
99 }
100 
102 {
103  if (m_rates.empty())
104  return 48000;
105 
106  // Assume rates vector is sorted
107  auto it = std::find_if(m_rates.cbegin(), m_rates.cend(),
108  [rate](const auto entry){ return entry >= rate; } );
109  if (it != m_rates.cend())
110  return *it;
111 
112  // Not found, so return highest available rate
113  return m_rates.back();
114 }
115 
117 {
118  if (m_sfIt == kStdFormats.end())
119  {
120  m_sfIt = kStdFormats.begin();
121  return FORMAT_NONE;
122  }
123 
124  return *m_sfIt++;
125 }
126 
128 {
129  LOG(VB_AUDIO, LOG_INFO, LOC +
130  QString("Format %1 is supported").arg(FormatToString(format)));
131  m_formats.push_back(format);
132 }
133 
135 {
136  if (m_formats.empty() && format == FORMAT_S16)
137  return true;
138 
139  auto result = std::find(m_formats.cbegin(), m_formats.cend(), format);
140  return result != m_formats.end();
141 }
142 
144 {
145  if (m_formats.empty())
146  return FORMAT_S16;
147  return m_formats.back();
148 }
149 
151 {
152  switch (format)
153  {
154  case FORMAT_U8: return 8;
155  case FORMAT_S16: return 16;
156  case FORMAT_S24LSB:
157  case FORMAT_S24: return 24;
158  case FORMAT_S32:
159  case FORMAT_FLT: return 32;
160  case FORMAT_NONE:
161  default: return -1;
162  }
163 }
164 
166 {
167  switch (format)
168  {
169  case FORMAT_U8: return "unsigned 8 bit";
170  case FORMAT_S16: return "signed 16 bit";
171  case FORMAT_S24: return "signed 24 bit MSB";
172  case FORMAT_S24LSB: return "signed 24 bit LSB";
173  case FORMAT_S32: return "signed 32 bit";
174  case FORMAT_FLT: return "32 bit floating point";
175  case FORMAT_NONE: return "none";
176  default: return "unknown";
177  }
178 }
179 
181 {
182  switch (format)
183  {
184  case FORMAT_U8: return 1;
185  case FORMAT_S16: return 2;
186  case FORMAT_S24:
187  case FORMAT_S24LSB:
188  case FORMAT_S32:
189  case FORMAT_FLT: return 4;
190  case FORMAT_NONE:
191  default: return 0;
192  }
193 }
194 
199 {
200  switch (av_get_packed_sample_fmt(format))
201  {
202  case AV_SAMPLE_FMT_U8: return FORMAT_U8;
203  case AV_SAMPLE_FMT_S16: return FORMAT_S16;
204  case AV_SAMPLE_FMT_FLT: return FORMAT_FLT;
205  case AV_SAMPLE_FMT_DBL: return FORMAT_NONE;
206  case AV_SAMPLE_FMT_S32:
207  switch (bits)
208  {
209  case 0: return FORMAT_S32;
210  case 24: return FORMAT_S24;
211  case 32: return FORMAT_S32;
212  default: return FORMAT_NONE;
213  }
214  default: return FORMAT_NONE;
215  }
216 }
217 
224 {
225  switch (format)
226  {
227  case FORMAT_U8: return AV_SAMPLE_FMT_U8;
228  case FORMAT_S16: return AV_SAMPLE_FMT_S16;
229  case FORMAT_FLT: return AV_SAMPLE_FMT_FLT;
230  case FORMAT_S32:
231  case FORMAT_S24:
232  case FORMAT_S24LSB: return AV_SAMPLE_FMT_S32;
233  default: return AV_SAMPLE_FMT_NONE;
234  }
235 }
236 
238 {
239  m_channels.push_back(channels);
240  LOG(VB_AUDIO, LOG_INFO, LOC + QString("%1 channel(s) are supported")
241  .arg(channels));
242 }
243 
245 {
246  if (m_channels.empty() && channels == 2)
247  return true;
248 
249  return std::any_of(m_channels.cbegin(), m_channels.cend(),
250  [channels](const auto entry)
251  { return entry == channels; } );
252 }
253 
255 {
256  if (m_channels.empty())
257  return 2;
258  SortSupportedChannels(); // ensure last element is the best supported channel
259  return m_channels.back();
260 }
261 
263 {
264  if (m_channels.empty())
265  return;
266  sort(m_channels.begin(), m_channels.end());
267 }
268 
270 {
271  if (m_channels.empty())
272  {
273  m_channels.push_back(channels);
274  return;
275  }
276 
277  std::vector<int>tmp;
278  std::copy_if(m_channels.cbegin(), m_channels.cend(),
279  std::back_inserter(tmp),
280  [channels](int value){ return channels > value; } );
281  m_channels = tmp;
282  m_channels.push_back(channels);
283 }
284 
285 void AudioOutputSettings::setFeature(bool val, int arg)
286 {
287  if (val)
288  m_features |= arg;
289  else
290  m_features &= ~arg;
291 };
292 
294 {
295  setFeature(val, (int) arg);
296 };
297 
305 {
306  AudioOutputSettings* aosettings = this;
307 
308  if (newcopy)
309  {
310  aosettings = new AudioOutputSettings;
311  *aosettings = *this;
312  }
313 
314  if (m_invalid)
315  return aosettings;
316 
317  if (BestSupportedPCMChannelsELD() > 2)
318  {
319  aosettings->setFeature(FEATURE_LPCM);
320  }
321 
323  {
324  // E-AC3 is transferred as stereo PCM at 4 times the rates
325  // assume all amplifier supporting E-AC3 also supports 7.1 LPCM
326  // as it's mandatory under the bluray standard
327 //#if LIBAVFORMAT_VERSION_INT > AV_VERSION_INT( 52, 83, 0 )
328  if (m_passthrough >= 0 && IsSupportedChannels(8) &&
329  IsSupportedRate(192000))
330  aosettings->setFeature(FEATURE_TRUEHD | FEATURE_DTSHD |
331  FEATURE_EAC3);
332 //#endif
333  if (m_passthrough >= 0)
334  {
335  if (BestSupportedChannels() == 2)
336  {
337  LOG(VB_AUDIO, LOG_INFO, LOC + "may be AC3 or DTS capable");
338  aosettings->AddSupportedChannels(6);
339  }
340  aosettings->setFeature(FEATURE_AC3 | FEATURE_DTS);
341  }
342  }
343  else
344  {
345  // Can't do digital passthrough without 16 bits audio
346  aosettings->setPassthrough(-1);
347  aosettings->setFeature(false,
350  }
351 
352  return aosettings;
353 }
354 
362 {
363  AudioOutputSettings* aosettings = this;
364 
365  if (newcopy)
366  aosettings = GetCleaned(newcopy);
367 
368  if (aosettings->m_invalid)
369  return aosettings;
370 
371  int cur_channels = gCoreContext->GetNumSetting("MaxChannels", 2);
372  int max_channels = aosettings->BestSupportedChannels();
373 
374  bool bAC3 = aosettings->canFeature(FEATURE_AC3) &&
375  gCoreContext->GetBoolSetting("AC3PassThru", false);
376 
377  bool bDTS = aosettings->canFeature(FEATURE_DTS) &&
378  gCoreContext->GetBoolSetting("DTSPassThru", false);
379 
380  bool bLPCM = aosettings->canFeature(FEATURE_LPCM) &&
381  !gCoreContext->GetBoolSetting("StereoPCM", false);
382 
383  bool bEAC3 = aosettings->canFeature(FEATURE_EAC3) &&
384  gCoreContext->GetBoolSetting("EAC3PassThru", false) &&
385  !gCoreContext->GetBoolSetting("Audio48kOverride", false);
386 
387  // TrueHD requires HBR support.
388  bool bTRUEHD = aosettings->canFeature(FEATURE_TRUEHD) &&
389  gCoreContext->GetBoolSetting("TrueHDPassThru", false) &&
390  !gCoreContext->GetBoolSetting("Audio48kOverride", false) &&
391  gCoreContext->GetBoolSetting("HBRPassthru", true);
392 
393  bool bDTSHD = aosettings->canFeature(FEATURE_DTSHD) &&
394  gCoreContext->GetBoolSetting("DTSHDPassThru", false) &&
395  !gCoreContext->GetBoolSetting("Audio48kOverride", false);
396 
397  if (max_channels > 2 && !bLPCM)
398  max_channels = 2;
399  if (max_channels == 2 && (bAC3 || bDTS))
400  max_channels = 6;
401 
402  if (cur_channels > max_channels)
403  cur_channels = max_channels;
404 
405  aosettings->SetBestSupportedChannels(cur_channels);
406  aosettings->setFeature(bAC3, FEATURE_AC3);
407  aosettings->setFeature(bDTS, FEATURE_DTS);
408  aosettings->setFeature(bLPCM, FEATURE_LPCM);
409  aosettings->setFeature(bEAC3, FEATURE_EAC3);
410  aosettings->setFeature(bTRUEHD, FEATURE_TRUEHD);
411  aosettings->setFeature(bDTSHD, FEATURE_DTSHD);
412 
413  return aosettings;
414 }
415 
417 {
419  return 0;
420 
421  // If no HBR or no LPCM, limit bitrate to 6.144Mbit/s
422  if (!gCoreContext->GetBoolSetting("HBRPassthru", true) ||
424  {
425  return 192000; // E-AC3/DTS-HD High Res: 192k, 16 bits, 2 ch
426  }
427  return 768000; // TrueHD or DTS-HD MA: 192k, 16 bits, 8 ch
428 }
429 
431 {
433  const std::string name;
434 };
435 static const std::array<featureStruct,7> feature {{
436  { FEATURE_AC3, "AC3"},
437  { FEATURE_DTS, "DTS"},
438  { FEATURE_LPCM, "LPCM"},
439  { FEATURE_EAC3, "EAC3"},
440  { FEATURE_TRUEHD, "TRUEHD"},
441  { FEATURE_DTSHD, "DTSHD"},
442  { FEATURE_AAC, "AAC"},
443 }};
444 
446 {
447  QStringList tmp;
448  // cppcheck-suppress unassignedVariable
449  for (const auto & [flag, name] : feature)
450  {
451  if (arg & flag)
452  tmp += QString::fromStdString(name);
453  }
454  return tmp.join(",");
455 }
456 
457 QString AudioOutputSettings::GetPassthroughParams(int codec, int codec_profile,
458  int &samplerate,
459  int &channels,
460  bool canDTSHDMA)
461 {
462  QString log;
463 
464  channels = 2;
465 
466  switch (codec)
467  {
468  case AV_CODEC_ID_AC3:
469  log = "AC3";
470  break;
471  case AV_CODEC_ID_EAC3:
472  samplerate = samplerate * 4;
473  log = "Dolby Digital Plus (E-AC3)";
474  break;
475  case AV_CODEC_ID_DTS:
476  switch(codec_profile)
477  {
478  case FF_PROFILE_DTS_ES:
479  log = "DTS-ES";
480  break;
481  case FF_PROFILE_DTS_96_24:
482  log = "DTS 96/24";
483  break;
484  case FF_PROFILE_DTS_HD_HRA:
485  samplerate = 192000;
486  log = "DTS-HD High-Res";
487  break;
488  case FF_PROFILE_DTS_HD_MA:
489  samplerate = 192000;
490  if (canDTSHDMA)
491  {
492  log = "DTS-HD MA";
493  channels = 8;
494  }
495  else
496  {
497  log = "DTS-HD High-Res";
498  }
499  break;
500  case FF_PROFILE_DTS:
501  default:
502  log = "DTS Core";
503  break;
504  }
505  break;
506  case AV_CODEC_ID_TRUEHD:
507  channels = 8;
508  log = "TrueHD";
509  switch(samplerate)
510  {
511  case 48000:
512  case 96000:
513  case 192000:
514  samplerate = 192000;
515  break;
516  case 44100:
517  case 88200:
518  case 176400:
519  samplerate = 176400;
520  break;
521  default:
522  log = "TrueHD: Unsupported samplerate";
523  break;
524  }
525  break;
526  default:
527  break;
528  }
529  return log;
530 }
531 
533 {
534  return m_hasEld && m_eld.isValid();
535 };
536 
538 {
539  return m_hasEld;
540 };
541 
542 void AudioOutputSettings::setELD(QByteArray *ba)
543 {
544  m_hasEld = true;
545  m_eld = eld(ba->constData(), ba->size());
546  m_eld.show();
547 }
548 
550 {
552  if (!hasValidELD())
553  return chan;
554  int eldc = m_eld.maxChannels();
555  return eldc < chan ? eldc : chan;
556 }
557 
559 {
561  if (!hasValidELD())
562  return chan;
563  int eldc = m_eld.maxLPCMChannels();
564  return eldc < chan ? eldc : chan;
565 }
FORMAT_U8
@ FORMAT_U8
Definition: audiooutputsettings.h:26
FORMAT_NONE
@ FORMAT_NONE
Definition: audiooutputsettings.h:25
AudioOutputSettings::GetNextRate
int GetNextRate()
Definition: audiooutputsettings.cpp:67
AudioOutputSettings::SortSupportedChannels
void SortSupportedChannels()
Definition: audiooutputsettings.cpp:262
AudioOutputSettings::IsSupportedChannels
bool IsSupportedChannels(int channels)
Definition: audiooutputsettings.cpp:244
AudioOutputSettings::IsSupportedRate
bool IsSupportedRate(int rate)
Definition: audiooutputsettings.cpp:85
AudioOutputSettings::AVSampleFormatToFormat
static AudioFormat AVSampleFormatToFormat(AVSampleFormat format, int bits=0)
Return AVSampleFormat closest equivalent to AudioFormat.
Definition: audiooutputsettings.cpp:198
AudioOutputSettings::BestSupportedRate
int BestSupportedRate()
Definition: audiooutputsettings.cpp:94
AudioOutputSettings::setPassthrough
void setPassthrough(int val)
Definition: audiooutputsettings.h:76
FORMAT_S16
@ FORMAT_S16
Definition: audiooutputsettings.h:27
AudioOutputSettings::AddSupportedFormat
void AddSupportedFormat(AudioFormat format)
Definition: audiooutputsettings.cpp:127
featureStruct
Definition: audiooutputsettings.cpp:430
AudioOutputSettings::operator=
AudioOutputSettings & operator=(const AudioOutputSettings &)
Definition: audiooutputsettings.cpp:49
eld::show
void show()
Definition: eldutils.cpp:416
AudioOutputSettings::FormatToAVSampleFormat
static AVSampleFormat FormatToAVSampleFormat(AudioFormat format)
Return AudioFormat closest equivalent to AVSampleFormat Note that FORMAT_S24LSB and FORMAT_S24 have n...
Definition: audiooutputsettings.cpp:223
AudioOutputSettings::m_eld
eld m_eld
Definition: audiooutputsettings.h:205
eld
Definition: eldutils.h:37
AudioOutputSettings::FeaturesToString
QString FeaturesToString(void) const
Definition: audiooutputsettings.h:151
FEATURE_AC3
@ FEATURE_AC3
Definition: audiooutputsettings.h:36
AudioOutputSettings::FormatToBits
static int FormatToBits(AudioFormat format)
Definition: audiooutputsettings.cpp:150
AudioOutputSettings::kStdRates
static const rate_array kStdRates
Definition: audiooutputsettings.h:213
rate_array
std::array< const int, 12 > rate_array
Definition: audiooutputsettings.h:45
eld::maxLPCMChannels
int maxLPCMChannels()
Definition: eldutils.cpp:450
AudioOutputSettings::SampleSize
static int SampleSize(AudioFormat format)
Definition: audiooutputsettings.cpp:180
FEATURE_TRUEHD
@ FEATURE_TRUEHD
Definition: audiooutputsettings.h:40
AudioOutputSettings::m_channels
std::vector< int > m_channels
Definition: audiooutputsettings.h:208
AudioOutputSettings::~AudioOutputSettings
~AudioOutputSettings()
Definition: audiooutputsettings.cpp:42
LOG
#define LOG(_MASK_, _LEVEL_, _QSTRING_)
Definition: mythlogging.h:39
AudioOutputSettings::m_sfIt
format_array::iterator m_sfIt
Definition: audiooutputsettings.h:211
AudioOutputSettings::m_features
unsigned int m_features
Definition: audiooutputsettings.h:195
FEATURE_EAC3
@ FEATURE_EAC3
Definition: audiooutputsettings.h:39
eldutils.h
AudioOutputSettings::m_invalid
bool m_invalid
Definition: audiooutputsettings.h:197
tmp
static guint32 * tmp
Definition: goom_core.cpp:26
AudioOutputSettings::AddSupportedChannels
void AddSupportedChannels(int channels)
Definition: audiooutputsettings.cpp:237
AudioOutputSettings::GetCleaned
AudioOutputSettings * GetCleaned(bool newcopy=false)
Returns capabilities supported by the audio device amended to take into account the digital audio opt...
Definition: audiooutputsettings.cpp:304
AudioOutputSettings::GetUsers
AudioOutputSettings * GetUsers(bool newcopy=false)
Returns capabilities supported by the audio device amended to take into account the digital audio opt...
Definition: audiooutputsettings.cpp:361
mythlogging.h
AudioOutputSettings::m_rates
std::vector< int > m_rates
Definition: audiooutputsettings.h:207
AudioOutputSettings::GetMaxHDRate
int GetMaxHDRate() const
return the highest iec958 rate supported.
Definition: audiooutputsettings.cpp:416
AudioOutputSettings::BestSupportedChannelsELD
int BestSupportedChannelsELD()
Reports best supported channel number, restricted to ELD range.
Definition: audiooutputsettings.cpp:549
feature
static const std::array< featureStruct, 7 > feature
Definition: audiooutputsettings.cpp:435
AudioOutputSettings::AudioOutputSettings
AudioOutputSettings(bool invalid=false)
Definition: audiooutputsettings.cpp:35
AudioOutputSettings::BestSupportedChannels
int BestSupportedChannels()
Definition: audiooutputsettings.cpp:254
FEATURE_DTS
@ FEATURE_DTS
Definition: audiooutputsettings.h:37
AudioOutputSettings::kStdFormats
static const format_array kStdFormats
Definition: audiooutputsettings.h:214
FORMAT_S24
@ FORMAT_S24
Definition: audiooutputsettings.h:29
FEATURE_AAC
@ FEATURE_AAC
Definition: audiooutputsettings.h:42
FORMAT_FLT
@ FORMAT_FLT
Definition: audiooutputsettings.h:31
featureStruct::flag
const DigitalFeature flag
Definition: audiooutputsettings.cpp:432
format_array
std::array< const AudioFormat, 6 > format_array
Definition: audiooutputsettings.h:46
FEATURE_LPCM
@ FEATURE_LPCM
Definition: audiooutputsettings.h:38
AudioOutputSettings::AddSupportedRate
void AddSupportedRate(int rate)
Definition: audiooutputsettings.cpp:78
FORMAT_S32
@ FORMAT_S32
Definition: audiooutputsettings.h:30
AudioOutputSettings::hasELD
bool hasELD() const
get the ELD flag
Definition: audiooutputsettings.cpp:537
AudioOutputSettings::m_passthrough
int m_passthrough
passthrough status -1 : no 0: unknown 1: yes
Definition: audiooutputsettings.h:193
AudioOutputSettings::BestSupportedPCMChannelsELD
int BestSupportedPCMChannelsELD()
Reports best supported PCM channel number, restricted to ELD.
Definition: audiooutputsettings.cpp:558
AudioOutputSettings::canFeature
bool canFeature(DigitalFeature arg) const
return DigitalFeature mask.
Definition: audiooutputsettings.h:88
eld::maxChannels
int maxChannels()
Definition: eldutils.cpp:465
gCoreContext
MythCoreContext * gCoreContext
This global variable contains the MythCoreContext instance for the app.
Definition: mythcorecontext.cpp:55
AudioOutputSettings::setFeature
void setFeature(DigitalFeature arg)
set the provided digital feature possible values are:
Definition: audiooutputsettings.h:125
MythCoreContext::GetNumSetting
int GetNumSetting(const QString &key, int defaultval=0)
Definition: mythcorecontext.cpp:912
MythCoreContext::GetBoolSetting
bool GetBoolSetting(const QString &key, bool defaultval=false)
Definition: mythcorecontext.cpp:906
mythcorecontext.h
AudioOutputSettings::IsSupportedFormat
bool IsSupportedFormat(AudioFormat format)
Definition: audiooutputsettings.cpp:134
AudioOutputSettings::GetPassthroughParams
static QString GetPassthroughParams(int codec, int codec_profile, int &samplerate, int &channels, bool canDTSHDMA)
Setup samplerate and number of channels for passthrough.
Definition: audiooutputsettings.cpp:457
AudioOutputSettings::m_formats
std::vector< AudioFormat > m_formats
Definition: audiooutputsettings.h:209
AudioOutputSettings
Definition: audiooutputsettings.h:48
AudioOutputSettings::NearestSupportedRate
int NearestSupportedRate(int rate)
Definition: audiooutputsettings.cpp:101
DigitalFeature
DigitalFeature
Definition: audiooutputsettings.h:34
common.utilities.log
def log(debug, txt)
Definition: utilities.py:5
AudioOutputSettings::hasValidELD
bool hasValidELD()
Definition: audiooutputsettings.cpp:532
featureStruct::name
const std::string name
Definition: audiooutputsettings.cpp:433
AudioOutputSettings::m_hasEld
bool m_hasEld
will be set to true if we were able to retrieve the device ELD (EDID like Data).
Definition: audiooutputsettings.h:204
AudioOutputSettings::m_srIt
rate_array::iterator m_srIt
Definition: audiooutputsettings.h:210
AudioOutputSettings::FormatToString
static const char * FormatToString(AudioFormat format)
Definition: audiooutputsettings.cpp:165
AudioOutputSettings::BestSupportedFormat
AudioFormat BestSupportedFormat()
Definition: audiooutputsettings.cpp:143
AudioOutputSettings::setELD
void setELD(QByteArray *ba)
set ELD data
Definition: audiooutputsettings.cpp:542
AudioOutputSettings::SetBestSupportedChannels
void SetBestSupportedChannels(int channels)
Force set the greatest number of channels supported by the audio device.
Definition: audiooutputsettings.cpp:269
AudioFormat
AudioFormat
Definition: audiooutputsettings.h:24
AudioOutputSettings::GetNextFormat
AudioFormat GetNextFormat()
Definition: audiooutputsettings.cpp:116
audiooutputsettings.h
eld::isValid
bool isValid() const
Definition: eldutils.cpp:411
FEATURE_DTSHD
@ FEATURE_DTSHD
Definition: audiooutputsettings.h:41
FORMAT_S24LSB
@ FORMAT_S24LSB
Definition: audiooutputsettings.h:28
find
static pid_list_t::iterator find(const PIDInfoMap &map, pid_list_t &list, pid_list_t::iterator begin, pid_list_t::iterator end, bool find_open)
Definition: dvbstreamhandler.cpp:363
LOC
#define LOC
Definition: audiooutputsettings.cpp:22