diff --git a/avidemux_core/ADM_coreUtils/src/ADM_paramList.cpp b/avidemux_core/ADM_coreUtils/src/ADM_paramList.cpp
index dc2a65bc33..a1fa495dd0 100644
--- a/avidemux_core/ADM_coreUtils/src/ADM_paramList.cpp
+++ b/avidemux_core/ADM_coreUtils/src/ADM_paramList.cpp
@@ -179,6 +179,7 @@ static bool compressReadFromString(COMPRES_PARAMS *params,const char *str)
if(!strcasecmp(tmp,"2PASS")) {params->mode=COMPRESS_2PASS;params->finalsize=val;return true;}
if(!strcasecmp(tmp,"2PASSBITRATE")) {params->mode=COMPRESS_2PASS_BITRATE;params->avg_bitrate=val;return true;}
if(!strcasecmp(tmp,"AQ")) {params->mode=COMPRESS_AQ;params->qz=val;return true;}
+ if(!strcasecmp(tmp,"LOSSLESS")) {params->mode=COMPRESS_LOSSLESS;return true;}
ADM_error("Unknown mode :%s\n",tmp);
return false;
@@ -197,8 +198,9 @@ bool ADM_compressWriteToString(COMPRES_PARAMS *params, char **str)
case COMPRESS_SAME: sprintf(tmp,"SAME");break;
case COMPRESS_2PASS_BITRATE: sprintf(tmp,"2PASSBITRATE=%" PRIu32,params->avg_bitrate);break;
case COMPRESS_AQ: sprintf(tmp,"AQ=%" PRIu32,params->qz);break;
+ case COMPRESS_LOSSLESS: sprintf(tmp,"LOSSLESS=1");break;
default:
- ADM_error("Unknown compressin mode \n");
+ ADM_error("Unknown compression mode \n");
return false;
}
*str=ADM_strdup(tmp);
diff --git a/avidemux_core/ADM_coreVideoEncoder/include/ADM_encoderConf.h b/avidemux_core/ADM_coreVideoEncoder/include/ADM_encoderConf.h
index b5223ea68b..a06ea8f527 100644
--- a/avidemux_core/ADM_coreVideoEncoder/include/ADM_encoderConf.h
+++ b/avidemux_core/ADM_coreVideoEncoder/include/ADM_encoderConf.h
@@ -25,6 +25,7 @@ typedef enum
COMPRESS_SAME,
COMPRESS_2PASS_BITRATE,
COMPRESS_AQ,
+ COMPRESS_LOSSLESS,
COMPRESS_MAX
} COMPRESSION_MODE;
diff --git a/avidemux_plugins/ADM_videoEncoder/x265/ADM_x265Setup.cpp b/avidemux_plugins/ADM_videoEncoder/x265/ADM_x265Setup.cpp
index 55816a713a..63c373d81e 100644
--- a/avidemux_plugins/ADM_videoEncoder/x265/ADM_x265Setup.cpp
+++ b/avidemux_plugins/ADM_videoEncoder/x265/ADM_x265Setup.cpp
@@ -180,6 +180,7 @@ bool x265Encoder::setup(void)
MKPARAM(transferCharacteristics,transfer_characteristics)
}
+ param.bLossless = 0;
// -------------- rate control------------
switch(x265Settings.general.params.mode)
{
@@ -243,6 +244,9 @@ bool x265Encoder::setup(void)
param.rc.qp = 0;
param.rc.rfConstant = 0;
break;
+ case COMPRESS_LOSSLESS:
+ param.bLossless = 1;
+ break;
default:
GUI_Error_HIG(QT_TRANSLATE_NOOP("x265","Not coded"),QT_TRANSLATE_NOOP("x265","this mode has not been implemented\n"));
return false;
diff --git a/avidemux_plugins/ADM_videoEncoder/x265/qt4/Q_x265.cpp b/avidemux_plugins/ADM_videoEncoder/x265/qt4/Q_x265.cpp
index 79eca5e483..22cea46f28 100644
--- a/avidemux_plugins/ADM_videoEncoder/x265/qt4/Q_x265.cpp
+++ b/avidemux_plugins/ADM_videoEncoder/x265/qt4/Q_x265.cpp
@@ -528,6 +528,9 @@ bool x265Dialog::upload(void)
//encodingModeComboBox_currentIndexChanged(1);
ui.quantiserSpinBox->setValue(ENCODING(qz));
break;
+ case COMPRESS_LOSSLESS:
+ ui.encodingModeComboBox->setCurrentIndex(5);
+ break;
default: ADM_assert(0);break;
}
@@ -679,6 +682,7 @@ bool x265Dialog::download(void)
case 2: ENCODING(mode)=COMPRESS_AQ;ENCODING(qz)=ui.quantiserSpinBox->value();break;
case 3: ENCODING(mode)=COMPRESS_2PASS;ENCODING(finalsize)=ui.targetRateControlSpinBox->value();;break;
case 4: ENCODING(mode)=COMPRESS_2PASS_BITRATE;ENCODING(avg_bitrate)=ui.targetRateControlSpinBox->value();;break;
+ case 5: ENCODING(mode)=COMPRESS_LOSSLESS;break;
}
#if X265_BUILD < 47
@@ -710,7 +714,7 @@ bool x265Dialog::download(void)
// General tab
void x265Dialog::encodingModeComboBox_currentIndexChanged(int index)
{
- bool enableQp = false, enableMaxCrf = false, enableStrictCbr = false;
+ bool enableQp = false, enableMaxCrf = false, enableStrictCbr = false, lossless = false;
switch (index)
{
@@ -739,6 +743,9 @@ void x265Dialog::encodingModeComboBox_currentIndexChanged(int index)
ui.targetRateControlLabel2->setText(QString::fromUtf8(QT_TRANSLATE_NOOP("x265","kbit/s")));
ui.targetRateControlSpinBox->setValue(lastBitrate);
break;
+ case 5: // Lossless
+ lossless = true;
+ break;
}
ui.quantiserLabel1->setEnabled(enableQp);
@@ -747,9 +754,9 @@ void x265Dialog::encodingModeComboBox_currentIndexChanged(int index)
ui.quantiserSlider->setEnabled(enableQp);
ui.quantiserSpinBox->setEnabled(enableQp);
- ui.targetRateControlLabel1->setEnabled(!enableQp);
- ui.targetRateControlLabel2->setEnabled(!enableQp);
- ui.targetRateControlSpinBox->setEnabled(!enableQp);
+ ui.targetRateControlLabel1->setEnabled(!enableQp && !lossless);
+ ui.targetRateControlLabel2->setEnabled(!enableQp && !lossless);
+ ui.targetRateControlSpinBox->setEnabled(!enableQp && !lossless);
#if X265_BUILD >= 41
ui.strictCbrCheckBox->setEnabled(enableStrictCbr);
diff --git a/avidemux_plugins/ADM_videoEncoder/x265/qt4/x265ConfigDialog.ui b/avidemux_plugins/ADM_videoEncoder/x265/qt4/x265ConfigDialog.ui
index 27d7f54159..c8daaa96b9 100644
--- a/avidemux_plugins/ADM_videoEncoder/x265/qt4/x265ConfigDialog.ui
+++ b/avidemux_plugins/ADM_videoEncoder/x265/qt4/x265ConfigDialog.ui
@@ -377,6 +377,11 @@
Average Bitrate (Two Pass)
+ -
+
+ Lossless (Single Pass)
+
+
-