44from pathlib import Path
55
66from box import Box
7- from PySide6 import QtGui , QtWidgets , QtCore
7+ from PySide6 import QtGui , QtWidgets
88
99from fastflix .exceptions import FastFlixInternalException
1010from fastflix .language import t
1111from fastflix .models .fastflix_app import FastFlixApp
1212from fastflix .widgets .background_tasks import ExtractHDR10
1313from fastflix .resources import group_box_style , get_icon
14- from fastflix . shared import clear_list
14+
1515
1616logger = logging .getLogger ("fastflix" )
1717
@@ -96,7 +96,7 @@ def translate_tip(tooltip):
9696 def determine_default (self , widget_name , opt , items : List , raise_error : bool = False ):
9797 if widget_name == "pix_fmt" :
9898 items = [x .split (":" )[1 ].strip () for x in items ]
99- elif widget_name in ("crf" , "qp" ):
99+ elif widget_name in ("crf" , "qp" , "qscale" ):
100100 if not opt :
101101 return 6
102102 opt = str (opt )
@@ -152,6 +152,8 @@ def _add_combo_box(
152152 widget_name , self .app .fastflix .config .encoder_opt (self .profile_name , opt ), options
153153 )
154154 self .opts [widget_name ] = opt
155+ else :
156+ logger .warning ("No opt provided for widget %s %s" , self .__class__ .__name__ , widget_name )
155157 self .widgets [widget_name ].setCurrentIndex (default or 0 )
156158 self .widgets [widget_name ].setDisabled (not enabled )
157159 new_width = self .widgets [widget_name ].minimumSizeHint ().width () + 20
@@ -203,6 +205,9 @@ def _add_text_box(
203205 if opt :
204206 default = str (self .app .fastflix .config .encoder_opt (self .profile_name , opt )) or default
205207 self .opts [widget_name ] = opt
208+ else :
209+ logger .warning ("No opt provided for widget %s %s" , self .__class__ .__name__ , widget_name )
210+
206211 self .widgets [widget_name ].setText (default )
207212 self .widgets [widget_name ].setDisabled (not enabled )
208213 if tooltip :
@@ -340,6 +345,7 @@ def _add_modes(
340345 add_qp = True ,
341346 disable_custom_qp = False ,
342347 show_bitrate_passes = False ,
348+ disable_bitrate = False ,
343349 ):
344350 self .recommended_bitrates = recommended_bitrates
345351 self .recommended_qps = recommended_qps
@@ -353,54 +359,55 @@ def _add_modes(
353359 bitrate_box_layout = QtWidgets .QHBoxLayout ()
354360 self .widgets .mode = QtWidgets .QButtonGroup ()
355361 self .widgets .mode .buttonClicked .connect (self .set_mode )
356-
357- self .bitrate_radio = QtWidgets .QRadioButton ("Bitrate" )
358- self .bitrate_radio .setFixedWidth (80 )
359- self .widgets .mode .addButton (self .bitrate_radio )
360- self .widgets .bitrate = QtWidgets .QComboBox ()
361- # self.widgets.bitrate.setFixedWidth(250)
362- self .widgets .bitrate .addItems (recommended_bitrates )
363- self .widgets .bitrate_passes = QtWidgets .QComboBox ()
364- self .widgets .bitrate_passes .addItems (["1" , "2" ])
365- self .widgets .bitrate_passes .setCurrentIndex (1 )
366- self .widgets .bitrate_passes .currentIndexChanged .connect (lambda : self .mode_update ())
367- config_opt = self .app .fastflix .config .encoder_opt (self .profile_name , "bitrate" )
368- custom_bitrate = False
369- try :
370- default_bitrate_index = self .determine_default (
371- "bitrate" , config_opt , recommended_bitrates , raise_error = True
372- )
373- except FastFlixInternalException :
374- custom_bitrate = True
375- self .widgets .bitrate .setCurrentText ("Custom" )
376- else :
377- self .widgets .bitrate .setCurrentIndex (default_bitrate_index )
378- self .widgets .bitrate .currentIndexChanged .connect (lambda : self .mode_update ())
379- self .widgets .custom_bitrate = QtWidgets .QLineEdit ("3000" if not custom_bitrate else config_opt )
380- self .widgets .custom_bitrate .setFixedWidth (100 )
381- self .widgets .custom_bitrate .setEnabled (custom_bitrate )
382- self .widgets .custom_bitrate .textChanged .connect (lambda : self .main .build_commands ())
383- self .widgets .custom_bitrate .setValidator (self .only_int )
384- bitrate_box_layout .addWidget (self .bitrate_radio )
385- bitrate_box_layout .addWidget (self .widgets .bitrate , 1 )
386- bitrate_box_layout .addStretch (1 )
387- if show_bitrate_passes :
388- bitrate_box_layout .addWidget (QtWidgets .QLabel (t ("Passes" ) + ":" ))
389- bitrate_box_layout .addWidget (self .widgets .bitrate_passes )
390- bitrate_box_layout .addStretch (1 )
391- bitrate_box_layout .addWidget (QtWidgets .QLabel (t ("Custom" ) + ":" ))
392- bitrate_box_layout .addWidget (self .widgets .custom_bitrate )
393- bitrate_box_layout .addWidget (QtWidgets .QLabel ("k" ))
394-
395362 qp_help = (
396363 f"{ qp_name .upper ()} { t ('is extremely source dependant' )} ,\n "
397364 f"{ t ('the resolution-to-' )} { qp_name .upper ()} { t ('are mere suggestions!' )} "
398365 )
399- self .qp_radio = QtWidgets .QRadioButton (qp_name .upper ())
400- self .qp_radio .setChecked (True )
401- self .qp_radio .setFixedWidth (80 )
402- self .qp_radio .setToolTip (qp_help )
403- self .widgets .mode .addButton (self .qp_radio )
366+ config_opt = None
367+ if not disable_bitrate :
368+ self .bitrate_radio = QtWidgets .QRadioButton ("Bitrate" )
369+ self .bitrate_radio .setFixedWidth (80 )
370+ self .widgets .mode .addButton (self .bitrate_radio )
371+ self .widgets .bitrate = QtWidgets .QComboBox ()
372+ self .widgets .bitrate .addItems (recommended_bitrates )
373+ self .widgets .bitrate_passes = QtWidgets .QComboBox ()
374+ self .widgets .bitrate_passes .addItems (["1" , "2" ])
375+ self .widgets .bitrate_passes .setCurrentIndex (1 )
376+ self .widgets .bitrate_passes .currentIndexChanged .connect (lambda : self .mode_update ())
377+ config_opt = self .app .fastflix .config .encoder_opt (self .profile_name , "bitrate" )
378+ custom_bitrate = False
379+ try :
380+ default_bitrate_index = self .determine_default (
381+ "bitrate" , config_opt , recommended_bitrates , raise_error = True
382+ )
383+ except FastFlixInternalException :
384+ custom_bitrate = True
385+ self .widgets .bitrate .setCurrentText ("Custom" )
386+ else :
387+ self .widgets .bitrate .setCurrentIndex (default_bitrate_index )
388+ self .widgets .bitrate .currentIndexChanged .connect (lambda : self .mode_update ())
389+ self .widgets .custom_bitrate = QtWidgets .QLineEdit ("3000" if not custom_bitrate else config_opt )
390+ self .widgets .custom_bitrate .setValidator (QtGui .QDoubleValidator ())
391+ self .widgets .custom_bitrate .setFixedWidth (100 )
392+ self .widgets .custom_bitrate .setEnabled (custom_bitrate )
393+ self .widgets .custom_bitrate .textChanged .connect (lambda : self .main .build_commands ())
394+ self .widgets .custom_bitrate .setValidator (self .only_int )
395+ bitrate_box_layout .addWidget (self .bitrate_radio )
396+ bitrate_box_layout .addWidget (self .widgets .bitrate , 1 )
397+ bitrate_box_layout .addStretch (1 )
398+ if show_bitrate_passes :
399+ bitrate_box_layout .addWidget (QtWidgets .QLabel (t ("Passes" ) + ":" ))
400+ bitrate_box_layout .addWidget (self .widgets .bitrate_passes )
401+ bitrate_box_layout .addStretch (1 )
402+ bitrate_box_layout .addWidget (QtWidgets .QLabel (t ("Custom" ) + ":" ))
403+ bitrate_box_layout .addWidget (self .widgets .custom_bitrate )
404+ bitrate_box_layout .addWidget (QtWidgets .QLabel ("k" ))
405+
406+ self .qp_radio = QtWidgets .QRadioButton (qp_name .upper ())
407+ self .qp_radio .setChecked (True )
408+ self .qp_radio .setFixedWidth (80 )
409+ self .qp_radio .setToolTip (qp_help )
410+ self .widgets .mode .addButton (self .qp_radio )
404411
405412 self .widgets [qp_name ] = QtWidgets .QComboBox ()
406413 self .widgets [qp_name ].setToolTip (qp_help )
@@ -421,14 +428,16 @@ def _add_modes(
421428 if not disable_custom_qp :
422429 self .widgets [f"custom_{ qp_name } " ] = QtWidgets .QLineEdit ("30" if not custom_qp else str (qp_value ))
423430 self .widgets [f"custom_{ qp_name } " ].setFixedWidth (100 )
431+ self .widgets [f"custom_{ qp_name } " ].setValidator (QtGui .QDoubleValidator ())
424432 self .widgets [f"custom_{ qp_name } " ].setEnabled (custom_qp )
425433 self .widgets [f"custom_{ qp_name } " ].textChanged .connect (lambda : self .main .build_commands ())
426434
427- if config_opt :
435+ if not disable_bitrate and config_opt :
428436 self .mode = "Bitrate"
429437 self .qp_radio .setChecked (False )
430438 self .bitrate_radio .setChecked (True )
431- qp_box_layout .addWidget (self .qp_radio )
439+ if not disable_bitrate :
440+ qp_box_layout .addWidget (self .qp_radio )
432441 qp_box_layout .addWidget (self .widgets [qp_name ], 1 )
433442 qp_box_layout .addStretch (1 )
434443 qp_box_layout .addStretch (1 )
@@ -439,11 +448,13 @@ def _add_modes(
439448 qp_box_layout .addWidget (self .widgets [f"custom_{ qp_name } " ])
440449 qp_box_layout .addWidget (QtWidgets .QLabel (" " ))
441450
442- bitrate_group_box .setLayout (bitrate_box_layout )
451+ if not disable_bitrate :
452+ bitrate_group_box .setLayout (bitrate_box_layout )
443453 qp_group_box .setLayout (qp_box_layout )
444454
445455 layout .addWidget (qp_group_box , 0 , 0 )
446- layout .addWidget (bitrate_group_box , 1 , 0 )
456+ if not disable_bitrate :
457+ layout .addWidget (bitrate_group_box , 1 , 0 )
447458
448459 if not add_qp :
449460 qp_group_box .hide ()
@@ -550,7 +561,7 @@ def reload(self):
550561 if widget_name in ("x265_params" , "svtav1_params" , "vvc_params" ):
551562 data = ":" .join (data )
552563 self .widgets [widget_name ].setText (str (data ) or "" )
553- if getattr (self , "qp_radio " , None ):
564+ if getattr (self , "mode " , None ):
554565 bitrate = getattr (self .app .fastflix .current_video .video_settings .video_encoder_settings , "bitrate" , None )
555566 if bitrate :
556567 self .mode = "Bitrate"
@@ -565,8 +576,11 @@ def reload(self):
565576 self .widgets .custom_bitrate .setText (bitrate .rstrip ("k" ))
566577 else :
567578 self .mode = self .qp_name
568- self .qp_radio .setChecked (True )
569- self .bitrate_radio .setChecked (False )
579+ try :
580+ self .qp_radio .setChecked (True )
581+ self .bitrate_radio .setChecked (False )
582+ except Exception :
583+ pass
570584 qp = str (getattr (self .app .fastflix .current_video .video_settings .video_encoder_settings , self .qp_name ))
571585 for i , rec in enumerate (self .recommended_qps ):
572586 if rec .startswith (qp ):
0 commit comments