Updated F.A.Q. document.
This commit is contained in:
parent
0ac460b8dd
commit
0deb759096
61
doc/FAQ.html
61
doc/FAQ.html
@ -26,6 +26,7 @@ a:visited { color: #0000EE; }
|
||||
<li><a href="#fd53d98a">Who created LameXP?</a>
|
||||
<li><a href="#de1c5e44">What license is LameXP released under?</a>
|
||||
<li><a href="#303e5fa7">Do I have to pay for LameXP? / How can I donate to the authors of LameXP?</a>
|
||||
<li><a href="#e75ad4ac">Why is the thing called "LameXP" when it does so much more?</a>
|
||||
<li><a href="#054010d9">MP3, AAC or Vorbis - What is the best compressed audio format?</a>
|
||||
<li><a href="#411d1257">What is the difference between the CBR, VBR and ABR rate control modes?</a>
|
||||
<li><a href="#71a113b0">How do I enable AAC/MP4/M4A output (encoding) in LameXP?</a>
|
||||
@ -216,6 +217,23 @@ If you want to support the development of LameXP, you can do so by contributing
|
||||
|
||||
<br><br>
|
||||
|
||||
<a name="e75ad4ac"></a><b>Why is the thing called "LameXP" although it does so much more?</b><br>
|
||||
<br>
|
||||
LameXP was created as a (very simple!) GUI front-end to the LAME MP3 encoder, back in 2004. That version did<br>
|
||||
NOT support any encoders except for LAME, it did NOT support any input formats other than Wave Audio files,<br>
|
||||
it did NOT support any audio filters, it did NOT support multi-threading, it did NOT support Unicode file<br>
|
||||
names and it did NOT handle meta data at all. Because the program really was nothing but (yet another) LAME<br>
|
||||
front-end for Windows and because at that time Windows XP was the operating system of choice - for many<br>
|
||||
people it still is nowadays - I decided to call the program "LameXP" (aka "LAME for Windows XP"). Since then<br>
|
||||
more and more features have been added to LameXP. The program even went through two complete re-writes. Thus<br>
|
||||
the name "LameXP" may not be the most meaningful one, especially because the program supports a huge number<br>
|
||||
of encoders and decoders now, but I'm obviosuly lacking the creativity to come up with a better name. Also I<br>
|
||||
think we already have enough doubious "super-duper everything to everything converter" programs out there...<br>
|
||||
<br>
|
||||
So to make a long story short: The name has historical reasons and probably isn't going to change ;-)<br><br>
|
||||
|
||||
<br><br>
|
||||
|
||||
<a name="054010d9"></a><b>MP3, AAC or Vorbis - What is the best compressed audio format?</b><br>
|
||||
<br>
|
||||
This question can NOT be answered in general. The best audio format is the format that works best for you!<br>
|
||||
@ -252,31 +270,35 @@ Another resource you might find interesting are Sebastian's Public Listening Tes
|
||||
<br>
|
||||
CBR means "constant bitrate" and, as the name implies, CBR mode allocates the bits at a constant rate. This<br>
|
||||
means that each part of the audio will get the same amount of bits, regardless of its content. Obviously this<br>
|
||||
will waste bits in parts of the audio that are easy to compress. At the same time the quality of parts of the<br>
|
||||
audio that are hard to compress will be degraded. Consequently using CBR mode is NOT a very good idea, unless<br>
|
||||
you really have to for some reason. However CBR mode has the advantage that the final size of the compressed<br>
|
||||
file is perfectly predictable. The resulting file size is defined simply as "duration × fixed bitrate".<br>
|
||||
will waste bits in parts of the audio that are "easy" to compress. At the same time the quality of parts of<br>
|
||||
the audio that are "hard" to compress will be degraded. Consequently using CBR mode is NOT a very good idea,<br>
|
||||
unless you really have to enforce a 100% constant bitrate (this is almost NEVER the case). However CBR mode<br>
|
||||
has the advantage that the final size of the compressed file is perfectly predictable. The resulting file<br>
|
||||
size is defined simply as "duration × fixed_bitrate". Note: The file size *is* predictable with ABR mode too!<br>
|
||||
<br>
|
||||
VBR means "variable bitrate" and, in contrast to CBR mode, VBR mode allows the bitrate to vary/fluctuate.<br>
|
||||
Thus the VBR mode enables the encoder to adapt the bitrate with respect to the content of the audio. Parts of<br>
|
||||
the audio that are easy to compress will get a lower bitrate in order to safe bits. Parts of the audio that<br>
|
||||
are hard to compress will get a higher bitrate in order to avoid quality degradation. Or in other words: VBR<br>
|
||||
mode "moves" the bits to the locations where they are actually needed. Therefore the VBR mode achieves a much<br>
|
||||
better compression efficiency than the CBR mode, i.e. with VBR mode you can get a better quality at the same<br>
|
||||
file size, or the same quality at a smaller file size (compared to CBR mode). One disadvantage of the VBR<br>
|
||||
mode is, however, that the final size of the compressed file can NOT be predicted. The resulting file size is<br>
|
||||
defined as "duration × average bitrate", but the average bitrate can NOT be known beforehand. That's<br>
|
||||
because the average bitrate for a specific VBR quality level can vary greatly, depending solely on the<br>
|
||||
complexity of the individual audio. Nonetheless VBR mode generally should be the preferred encoding mode.<br>
|
||||
the audio that are "easy" to compress will get a lower bitrate in order to avoid wasting bits there. At the<br>
|
||||
same time, parts of the audio that are "hard" to compress will get a higher bitrate in order to avoid quality<br>
|
||||
degradation. Or in other words: VBR mode "moves" the bits to the locations where they are actually needed!<br>
|
||||
Therefore the VBR mode achieves a much better compression efficiency than the CBR mode. This means with VBR<br>
|
||||
mode you can get a better quality at the same file size - or the same quality at a smaller file size. One<br>
|
||||
disadvantage of the VBR mode, however, is that the final size of the compressed file can NOT be predicted.<br>
|
||||
The resulting file size now is defined as "duration × average_bitrate", but the average bitrate is NOT<br>
|
||||
known beforehand. That's because the average bitrate for a specific VBR quality level can vary greatly,<br>
|
||||
depending solely on the complexity of the individual audio. With VBR mode the encoder uses as many bits as<br>
|
||||
required to achieve the desired level of quality. That clearly makes VBR the preferred encoding mode.<br>
|
||||
<br>
|
||||
ABR means "average bitrate". You can think of ABR mode as a compromise between the CBR and VBR mode. With ABR<br>
|
||||
mode the bitrate is allowed to vary/fluctuate, similar to VBR mode. However the ABR mode doesn't work with a<br>
|
||||
predefined/fixed quality level, as VBR mode does. Instead in ABR mode the encoder will continuously re-adjust<br>
|
||||
the quality level in order to hit the target average(!) bitrate. You can also think of ABR mode as a mode<br>
|
||||
that pre-allocates the bits in a CBR-like fashion and then redistributes the bits within a local neighborhood<br>
|
||||
as needed. Thus the ABR mode combines advantages of CBR mode (predictability) and VBR mode (good quality).<br>
|
||||
The final size of the encoded file is still defined as "duration × average bitrate", but with ABR mode the<br>
|
||||
as needed. Thus the ABR mode combines advantages of CBR mode (predictability) and VBR mode (higher quality).<br>
|
||||
The final size of the encoded file is still defined as "duration × average_bitrate", but with ABR mode the<br>
|
||||
average bitrate *is* known beforehand. So if you need to hit a specific file size, ABR mode is the solution.<br>
|
||||
Using ABR mode is to be preferred over CBR mode. Nonetheless VBR mode usually provides the best experience.<br>
|
||||
<br>
|
||||
<br>
|
||||
Hint: The Nero AAC encoder supports a variant of the ABR mode, the so-called "2-Pass" mode. That mode scans<br>
|
||||
through the entire file once (first pass) before the actual encoding is performed (second pass). This way the<br>
|
||||
@ -291,10 +313,11 @@ quality for obvious reasons. But drawing the conclusion that there is no differe
|
||||
VBR/ABR modes would be very wrong! The differences will become significant when using a reasonable bitrate.<br>
|
||||
Another mistake is starting with a low-quality source file and concluding that all modes perform equally bad.<br>
|
||||
<br>
|
||||
Summary of rate control modes:<br><ul>
|
||||
<li>Need to hit a specific fixed file size and still want to retain decent quality? ⇒ ABR mode
|
||||
<li>Want to retain a certain level of quality and the file size doesn't matter that much? ⇒ VBR mode
|
||||
<li>Avoid CBR mode by all means, unless there are crude restrictions that force you to use it!</ul>
|
||||
<br>
|
||||
SUMMARY ON RATE CONTROL MODES:<br><ul>
|
||||
<li>Need to hit a specific fixed file size and still want to retain a decent quality? ⇒ ABR mode
|
||||
<li>Want to retain a certain level of quality and hitting an exact file size is not needed? ⇒ VBR mode
|
||||
<li>Avoid CBR mode by all means, unless there are "external" restrictions that force you to use it!</ul>
|
||||
|
||||
<br><br>
|
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -1898,6 +1898,10 @@
|
||||
<source>OpusEnc:</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Show Help</source>
|
||||
<translation>Hilfethemen anzeigen</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>MetaInfo</name>
|
||||
|
@ -1897,6 +1897,10 @@
|
||||
<source>OpusEnc:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Show Help</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>MetaInfo</name>
|
||||
|
@ -1907,6 +1907,10 @@ Ouvrir le dossier récursivement...</translation>
|
||||
<source>OpusEnc:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Show Help</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>MetaInfo</name>
|
||||
|
@ -1898,6 +1898,10 @@
|
||||
<source>OpusEnc:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Show Help</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>MetaInfo</name>
|
||||
|
@ -1897,6 +1897,10 @@
|
||||
<source>OpusEnc:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Show Help</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>MetaInfo</name>
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -1903,6 +1903,10 @@
|
||||
<source>OpusEnc:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Show Help</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>MetaInfo</name>
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -1897,6 +1897,10 @@
|
||||
<source>OpusEnc:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Show Help</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>MetaInfo</name>
|
||||
|
@ -1898,6 +1898,10 @@
|
||||
<source>OpusEnc:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Show Help</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>MetaInfo</name>
|
||||
|
@ -1897,6 +1897,10 @@
|
||||
<source>OpusEnc:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Show Help</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>MetaInfo</name>
|
||||
|
@ -1269,17 +1269,91 @@
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="labelEncoderInfo">
|
||||
<property name="font">
|
||||
<font>
|
||||
<weight>50</weight>
|
||||
<bold>false</bold>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string notr="true">(Encoder Info)</string>
|
||||
</property>
|
||||
</widget>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_10">
|
||||
<item>
|
||||
<widget class="QLabel" name="labelEncoderInfo">
|
||||
<property name="font">
|
||||
<font>
|
||||
<weight>50</weight>
|
||||
<bold>false</bold>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string notr="true">(Encoder Info)</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="horizontalSpacer_60">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="labelCompressionHelp">
|
||||
<property name="palette">
|
||||
<palette>
|
||||
<active>
|
||||
<colorrole role="WindowText">
|
||||
<brush brushstyle="SolidPattern">
|
||||
<color alpha="255">
|
||||
<red>0</red>
|
||||
<green>0</green>
|
||||
<blue>255</blue>
|
||||
</color>
|
||||
</brush>
|
||||
</colorrole>
|
||||
</active>
|
||||
<inactive>
|
||||
<colorrole role="WindowText">
|
||||
<brush brushstyle="SolidPattern">
|
||||
<color alpha="255">
|
||||
<red>0</red>
|
||||
<green>0</green>
|
||||
<blue>255</blue>
|
||||
</color>
|
||||
</brush>
|
||||
</colorrole>
|
||||
</inactive>
|
||||
<disabled>
|
||||
<colorrole role="WindowText">
|
||||
<brush brushstyle="SolidPattern">
|
||||
<color alpha="255">
|
||||
<red>120</red>
|
||||
<green>120</green>
|
||||
<blue>120</blue>
|
||||
</color>
|
||||
</brush>
|
||||
</colorrole>
|
||||
</disabled>
|
||||
</palette>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<weight>50</weight>
|
||||
<bold>false</bold>
|
||||
<underline>true</underline>
|
||||
</font>
|
||||
</property>
|
||||
<property name="cursor">
|
||||
<cursorShape>PointingHandCursor</cursorShape>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Show Help</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="verticalSpacer_2">
|
||||
@ -1323,8 +1397,8 @@
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>604</width>
|
||||
<height>1677</height>
|
||||
<width>602</width>
|
||||
<height>1668</height>
|
||||
</rect>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout_22">
|
||||
@ -4514,6 +4588,9 @@
|
||||
<include location="../res/Icons.qrc"/>
|
||||
<include location="../res/Icons.qrc"/>
|
||||
<include location="../res/Icons.qrc"/>
|
||||
<include location="../res/Icons.qrc"/>
|
||||
<include location="../res/Icons.qrc"/>
|
||||
<include location="../res/Icons.qrc"/>
|
||||
</resources>
|
||||
<connections>
|
||||
<connection>
|
||||
|
Binary file not shown.
@ -30,7 +30,7 @@
|
||||
#define VER_LAMEXP_MINOR_LO 5
|
||||
#define VER_LAMEXP_TYPE Alpha
|
||||
#define VER_LAMEXP_PATCH 13
|
||||
#define VER_LAMEXP_BUILD 1068
|
||||
#define VER_LAMEXP_BUILD 1069
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// Tool versions (minimum expected versions!)
|
||||
|
@ -316,10 +316,12 @@ MainWindow::MainWindow(FileListModel *fileListModel, AudioFileModel *metaInfo, S
|
||||
m_encoderButtonGroup->addButton(radioButtonEncoderOpus, SettingsModel::OpusEncoder);
|
||||
m_encoderButtonGroup->addButton(radioButtonEncoderDCA, SettingsModel::DCAEncoder);
|
||||
m_encoderButtonGroup->addButton(radioButtonEncoderPCM, SettingsModel::PCMEncoder);
|
||||
|
||||
m_modeButtonGroup = new QButtonGroup(this);
|
||||
m_modeButtonGroup->addButton(radioButtonModeQuality, SettingsModel::VBRMode);
|
||||
m_modeButtonGroup->addButton(radioButtonModeAverageBitrate, SettingsModel::ABRMode);
|
||||
m_modeButtonGroup->addButton(radioButtonConstBitrate, SettingsModel::CBRMode);
|
||||
|
||||
radioButtonEncoderAAC->setEnabled(m_neroEncoderAvailable || m_fhgEncoderAvailable || m_qaacEncoderAvailable);
|
||||
radioButtonEncoderMP3->setChecked(m_settings->compressionEncoder() == SettingsModel::MP3Encoder);
|
||||
radioButtonEncoderVorbis->setChecked(m_settings->compressionEncoder() == SettingsModel::VorbisEncoder);
|
||||
@ -333,9 +335,15 @@ MainWindow::MainWindow(FileListModel *fileListModel, AudioFileModel *metaInfo, S
|
||||
radioButtonModeAverageBitrate->setChecked(m_settings->compressionRCMode() == SettingsModel::ABRMode);
|
||||
radioButtonConstBitrate->setChecked(m_settings->compressionRCMode() == SettingsModel::CBRMode);
|
||||
sliderBitrate->setValue(m_settings->compressionBitrate());
|
||||
|
||||
m_evenFilterCompressionTab = new CustomEventFilter();
|
||||
labelCompressionHelp->installEventFilter(m_evenFilterCompressionTab);
|
||||
|
||||
connect(m_encoderButtonGroup, SIGNAL(buttonClicked(int)), this, SLOT(updateEncoder(int)));
|
||||
connect(m_modeButtonGroup, SIGNAL(buttonClicked(int)), this, SLOT(updateRCMode(int)));
|
||||
connect(m_evenFilterCompressionTab, SIGNAL(eventOccurred(QWidget*, QEvent*)), this, SLOT(compressionTabEventOccurred(QWidget*, QEvent*)));
|
||||
connect(sliderBitrate, SIGNAL(valueChanged(int)), this, SLOT(updateBitrate(int)));
|
||||
|
||||
updateEncoder(m_encoderButtonGroup->checkedId());
|
||||
|
||||
//--------------------------------
|
||||
@ -630,6 +638,7 @@ MainWindow::~MainWindow(void)
|
||||
LAMEXP_DELETE(m_evenFilterCustumParamsHelp);
|
||||
LAMEXP_DELETE(m_evenFilterOutputFolderMouse);
|
||||
LAMEXP_DELETE(m_evenFilterOutputFolderView);
|
||||
LAMEXP_DELETE(m_evenFilterCompressionTab);
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
@ -690,42 +699,6 @@ void MainWindow::addFiles(const QStringList &files)
|
||||
/* ignore any exceptions that may occur */
|
||||
}
|
||||
|
||||
//--ST--
|
||||
//
|
||||
//FileAnalyzer_ST *analyzerST = new FileAnalyzer_ST(files);
|
||||
//connect(analyzerST, SIGNAL(fileSelected(QString)), m_banner, SLOT(setText(QString)), Qt::QueuedConnection);
|
||||
//connect(analyzerST, SIGNAL(progressValChanged(unsigned int)), m_banner, SLOT(setProgressVal(unsigned int)), Qt::QueuedConnection);
|
||||
//connect(analyzerST, SIGNAL(progressMaxChanged(unsigned int)), m_banner, SLOT(setProgressMax(unsigned int)), Qt::QueuedConnection);
|
||||
//connect(analyzerST, SIGNAL(fileAnalyzed(AudioFileModel)), m_fileListModel, SLOT(addFile(AudioFileModel)), Qt::QueuedConnection);
|
||||
//connect(m_banner, SIGNAL(userAbort()), analyzerST, SLOT(abortProcess()), Qt::DirectConnection);
|
||||
//
|
||||
//try
|
||||
//{
|
||||
// m_fileListModel->setBlockUpdates(true);
|
||||
// QTime startTime = QTime::currentTime();
|
||||
// m_banner->show(tr("Adding file(s), please wait..."), analyzerST);
|
||||
// timeST = startTime.secsTo(QTime::currentTime());
|
||||
//}
|
||||
//catch(...)
|
||||
//{
|
||||
// /* ignore any exceptions that may occur */
|
||||
//}
|
||||
//
|
||||
//------
|
||||
//
|
||||
//if(timeST > 0 && timeMT > 0)
|
||||
//{
|
||||
// double speedUp = static_cast<double>(timeST) / static_cast<double>(timeMT);
|
||||
// qWarning("ST: %d, MT: %d", timeST, timeMT);
|
||||
// QMessageBox::information(this, "Speed Up", QString().sprintf("Announcement: The new multi-threaded file analyzer is %.1fx faster !!!", speedUp), QMessageBox::Ok);
|
||||
//}
|
||||
//else
|
||||
//{
|
||||
// QMessageBox::information(this, "Speed Up", "Couldn't compare the the new multi-threaded file analyzer this time!", QMessageBox::Ok);
|
||||
//}
|
||||
//
|
||||
//------
|
||||
|
||||
m_fileListModel->setBlockUpdates(false);
|
||||
qApp->processEvents(QEventLoop::ExcludeUserInputEvents);
|
||||
sourceFileView->update();
|
||||
@ -3398,6 +3371,17 @@ void MainWindow::updateBitrate(int value)
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Event for compression tab occurred
|
||||
*/
|
||||
void MainWindow::compressionTabEventOccurred(QWidget *sender, QEvent *event)
|
||||
{
|
||||
if((sender == labelCompressionHelp) && (event->type() == QEvent::MouseButtonPress))
|
||||
{
|
||||
QDesktopServices::openUrl(QUrl("http://lamexp.git.sourceforge.net/git/gitweb.cgi?p=lamexp/lamexp;a=blob_plain;f=doc/FAQ.html;hb=HEAD#054010d9"));
|
||||
}
|
||||
}
|
||||
|
||||
// =========================================================
|
||||
// Advanced option slots
|
||||
// =========================================================
|
||||
|
@ -71,6 +71,7 @@ private slots:
|
||||
void clearFilesButtonClicked(void);
|
||||
void clearMetaButtonClicked(void);
|
||||
void closeButtonClicked(void);
|
||||
void compressionTabEventOccurred(QWidget*, QEvent*);
|
||||
void customParamsChanged(void);
|
||||
void customParamsHelpRequested(QWidget *obj, QEvent *event);
|
||||
void customTempFolderChanged(const QString &text);
|
||||
@ -214,4 +215,5 @@ private:
|
||||
CustomEventFilter *m_evenFilterCustumParamsHelp;
|
||||
CustomEventFilter *m_evenFilterOutputFolderMouse;
|
||||
CustomEventFilter *m_evenFilterOutputFolderView;
|
||||
CustomEventFilter *m_evenFilterCompressionTab;
|
||||
};
|
||||
|
@ -743,7 +743,7 @@ void InitializationThread::selfTest(void)
|
||||
qDebug("%02i -> %s", ++n, g_lamexp_tools[i].pcName);
|
||||
}
|
||||
}
|
||||
if(n != 25)
|
||||
if(n != 28)
|
||||
{
|
||||
qFatal("Tool count mismatch !!!");
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user