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) + +