mirror of
https://github.com/staxrip/staxrip.git
synced 2026-10-24 02:08:48 +08:00
269 lines
11 KiB
VB.net
269 lines
11 KiB
VB.net
|
|
Imports StaxRip.UI
|
|
|
|
Public Class x264Control
|
|
Inherits UserControl
|
|
|
|
#Region " Designer "
|
|
<DebuggerNonUserCode()>
|
|
Protected Overrides Sub Dispose(disposing As Boolean)
|
|
If disposing AndAlso components IsNot Nothing Then
|
|
components.Dispose()
|
|
End If
|
|
|
|
MyBase.Dispose(disposing)
|
|
End Sub
|
|
|
|
Friend WithEvents lv As StaxRip.UI.ListViewEx
|
|
Friend WithEvents blConfigCodec As ButtonLabel
|
|
Friend WithEvents llConfigContainer As ButtonLabel
|
|
Friend WithEvents llCompCheck As ButtonLabel
|
|
|
|
Private components As System.ComponentModel.IContainer
|
|
|
|
<DebuggerStepThrough()>
|
|
Private Sub InitializeComponent()
|
|
Me.blConfigCodec = New StaxRip.UI.ButtonLabel()
|
|
Me.llConfigContainer = New StaxRip.UI.ButtonLabel()
|
|
Me.llCompCheck = New StaxRip.UI.ButtonLabel()
|
|
Me.lv = New StaxRip.UI.ListViewEx()
|
|
Me.SuspendLayout()
|
|
'
|
|
'blConfigCodec
|
|
'
|
|
Me.blConfigCodec.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles)
|
|
Me.blConfigCodec.AutoSize = True
|
|
Me.blConfigCodec.BackColor = System.Drawing.SystemColors.Window
|
|
Me.blConfigCodec.ForeColor = System.Drawing.Color.DimGray
|
|
Me.blConfigCodec.LinkColor = System.Drawing.Color.DimGray
|
|
Me.blConfigCodec.Location = New System.Drawing.Point(3, 223)
|
|
Me.blConfigCodec.Margin = New System.Windows.Forms.Padding(3)
|
|
Me.blConfigCodec.Name = "blConfigCodec"
|
|
Me.blConfigCodec.Size = New System.Drawing.Size(128, 37)
|
|
Me.blConfigCodec.TabIndex = 1
|
|
Me.blConfigCodec.TabStop = True
|
|
Me.blConfigCodec.Text = "Options"
|
|
'
|
|
'llConfigContainer
|
|
'
|
|
Me.llConfigContainer.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
|
|
Me.llConfigContainer.AutoSize = True
|
|
Me.llConfigContainer.BackColor = System.Drawing.SystemColors.Window
|
|
Me.llConfigContainer.ForeColor = System.Drawing.Color.DimGray
|
|
Me.llConfigContainer.LinkColor = System.Drawing.Color.DimGray
|
|
Me.llConfigContainer.Location = New System.Drawing.Point(280, 223)
|
|
Me.llConfigContainer.Margin = New System.Windows.Forms.Padding(3)
|
|
Me.llConfigContainer.Name = "llConfigContainer"
|
|
Me.llConfigContainer.Size = New System.Drawing.Size(276, 37)
|
|
Me.llConfigContainer.TabIndex = 2
|
|
Me.llConfigContainer.TabStop = True
|
|
Me.llConfigContainer.Text = "Container Options"
|
|
'
|
|
'llCompCheck
|
|
'
|
|
Me.llCompCheck.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles)
|
|
Me.llCompCheck.AutoSize = True
|
|
Me.llCompCheck.BackColor = System.Drawing.SystemColors.Window
|
|
Me.llCompCheck.ForeColor = System.Drawing.Color.DimGray
|
|
Me.llCompCheck.LinkColor = System.Drawing.Color.DimGray
|
|
Me.llCompCheck.Location = New System.Drawing.Point(3, 180)
|
|
Me.llCompCheck.Margin = New System.Windows.Forms.Padding(3)
|
|
Me.llCompCheck.Name = "llCompCheck"
|
|
Me.llCompCheck.Size = New System.Drawing.Size(399, 37)
|
|
Me.llCompCheck.TabIndex = 3
|
|
Me.llCompCheck.TabStop = True
|
|
Me.llCompCheck.Text = "Run Compressibility Check"
|
|
'
|
|
'lv
|
|
'
|
|
Me.lv.Dock = System.Windows.Forms.DockStyle.Fill
|
|
Me.lv.HideSelection = False
|
|
Me.lv.Location = New System.Drawing.Point(0, 0)
|
|
Me.lv.Name = "lv"
|
|
Me.lv.Size = New System.Drawing.Size(559, 263)
|
|
Me.lv.TabIndex = 0
|
|
Me.lv.UseCompatibleStateImageBehavior = False
|
|
'
|
|
'x264Control
|
|
'
|
|
Me.AutoScaleDimensions = New System.Drawing.SizeF(288.0!, 288.0!)
|
|
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi
|
|
Me.Controls.Add(Me.llConfigContainer)
|
|
Me.Controls.Add(Me.blConfigCodec)
|
|
Me.Controls.Add(Me.llCompCheck)
|
|
Me.Controls.Add(Me.lv)
|
|
Me.Name = "x264Control"
|
|
Me.Size = New System.Drawing.Size(559, 263)
|
|
Me.ResumeLayout(False)
|
|
Me.PerformLayout()
|
|
|
|
End Sub
|
|
|
|
#End Region
|
|
|
|
Private Encoder As x264Enc
|
|
Private Params As x264Params
|
|
|
|
Private cms As ContextMenuStripEx
|
|
Private QualityDefinitions As List(Of QualityItem)
|
|
|
|
Sub New(enc As x264Enc)
|
|
MyBase.New()
|
|
InitializeComponent()
|
|
|
|
components = New System.ComponentModel.Container()
|
|
|
|
QualityDefinitions = New List(Of QualityItem) From {
|
|
New QualityItem(14, "Super High", "Super high quality and file size)"),
|
|
New QualityItem(16, "Very High", "Very high quality and file size)"),
|
|
New QualityItem(18, "Higher", "Higher quality and file size)"),
|
|
New QualityItem(20, "High", "High quality and file size)"),
|
|
New QualityItem(22, "Medium", "Medium quality and file size)"),
|
|
New QualityItem(24, "Low", "Low quality and file size)"),
|
|
New QualityItem(26, "Lower", "Lower quality and file size)"),
|
|
New QualityItem(28, "Very Low", "Very low quality and file size)"),
|
|
New QualityItem(30, "Super Low", "Super low quality and file size)")}
|
|
|
|
Encoder = enc
|
|
Params = Encoder.Params
|
|
|
|
cms = New ContextMenuStripEx(components)
|
|
cms.Font = New Font("Segoe UI", 9 * s.UIScaleFactor)
|
|
|
|
lv.View = View.Details
|
|
lv.HeaderStyle = ColumnHeaderStyle.None
|
|
lv.FullRowSelect = True
|
|
lv.MultiSelect = False
|
|
lv.ContextMenuStrip = cms
|
|
lv.ShowContextMenuOnLeftClick = True
|
|
|
|
UpdateControls()
|
|
AddHandler lv.UpdateContextMenu, AddressOf UpdateMenu
|
|
End Sub
|
|
|
|
Protected Overrides Sub OnLayout(e As LayoutEventArgs)
|
|
MyBase.OnLayout(e)
|
|
|
|
If lv.Columns.Count = 0 Then
|
|
lv.Columns.AddRange({New ColumnHeader, New ColumnHeader})
|
|
End If
|
|
|
|
lv.Columns(0).Width = CInt(Width * (32 / 100))
|
|
lv.Columns(1).Width = CInt(Width * (66 / 100))
|
|
|
|
'couldn't get scaling to work trying everything
|
|
blConfigCodec.Left = 5
|
|
blConfigCodec.Top = Height - blConfigCodec.Height - 5
|
|
|
|
llCompCheck.Left = 5
|
|
llCompCheck.Top = Height - blConfigCodec.Height - llCompCheck.Height - 10
|
|
|
|
llConfigContainer.Left = Width - llConfigContainer.Width - 5
|
|
llConfigContainer.Top = Height - llConfigContainer.Height - 5
|
|
End Sub
|
|
|
|
Sub UpdateMenu()
|
|
cms.Items.ClearAndDisplose
|
|
Dim offset = If(Params.Mode.Value = x264RateMode.Quality, 0, 1)
|
|
|
|
If lv.SelectedItems.Count > 0 Then
|
|
Select Case lv.SelectedIndices(0)
|
|
Case 0 - offset
|
|
For Each i In QualityDefinitions
|
|
cms.Items.Add(New ActionMenuItem(i.Value & " - " + i.Text + " ", Sub() SetQuality(i.Value), i.Tooltip) With {.Font = If(Params.Quant.Value = i.Value, New Font(Font.FontFamily, 9 * s.UIScaleFactor, FontStyle.Bold), New Font(Font.FontFamily, 9 * s.UIScaleFactor))})
|
|
Next
|
|
Case 1 - offset
|
|
For x = 0 To Params.Preset.Options.Length - 1
|
|
Dim temp = x
|
|
cms.Items.Add(New ActionMenuItem(Params.Preset.Options(x) + " ", Sub() SetPreset(temp), "x264 slower compares to x265 medium") With {.Font = If(Params.Preset.Value = x, New Font(Font.FontFamily, 9 * s.UIScaleFactor, FontStyle.Bold), New Font(Font.FontFamily, 9 * s.UIScaleFactor))})
|
|
Next
|
|
Case 2 - offset
|
|
For x = 0 To Params.Tune.Options.Length - 1
|
|
Dim temp = x
|
|
cms.Items.Add(New ActionMenuItem(Params.Tune.Options(x) + " ", Sub() SetTune(temp)) With {.Font = If(Params.Tune.Value = x, New Font(Font.FontFamily, 9 * s.UIScaleFactor, FontStyle.Bold), New Font(Font.FontFamily, 9 * s.UIScaleFactor))})
|
|
Next
|
|
End Select
|
|
End If
|
|
End Sub
|
|
|
|
Sub SetQuality(v As Single)
|
|
Params.Quant.Value = v
|
|
lv.Items(0).SubItems(1).Text = GetQualityCaption(v)
|
|
lv.Items(0).Selected = False
|
|
UpdateControls()
|
|
End Sub
|
|
|
|
Sub SetPreset(value As Integer)
|
|
Dim offset = If(Params.Mode.Value = x264RateMode.Quality, 0, 1)
|
|
|
|
Params.Preset.Value = value
|
|
Params.ApplyValues(True)
|
|
Params.ApplyValues(False)
|
|
|
|
lv.Items(1 - offset).SubItems(1).Text = value.ToString
|
|
lv.Items(1 - offset).Selected = False
|
|
|
|
UpdateControls()
|
|
End Sub
|
|
|
|
Sub SetTune(value As Integer)
|
|
Dim offset = If(Params.Mode.Value = x264RateMode.Quality, 0, 1)
|
|
Params.Tune.Value = value
|
|
Params.ApplyValues(True)
|
|
Params.ApplyValues(False)
|
|
lv.Items(2 - offset).SubItems(1).Text = value.ToString
|
|
lv.Items(2 - offset).Selected = False
|
|
UpdateControls()
|
|
End Sub
|
|
|
|
Function GetQualityCaption(value As Double) As String
|
|
For Each i In QualityDefinitions
|
|
If i.Value = value Then
|
|
Return value & " - " + i.Text
|
|
End If
|
|
Next
|
|
|
|
Return value.ToString
|
|
End Function
|
|
|
|
Sub UpdateControls()
|
|
If Params.Mode.Value = x264RateMode.Quality AndAlso lv.Items.Count < 4 Then
|
|
lv.Items.Clear()
|
|
lv.Items.Add(New ListViewItem({"Quality", GetQualityCaption(Params.Quant.Value)}))
|
|
lv.Items.Add(New ListViewItem({"Preset", Params.Preset.OptionText}))
|
|
lv.Items.Add(New ListViewItem({"Tune", Params.Tune.OptionText}))
|
|
ElseIf Params.Mode.Value <> 2 AndAlso lv.Items.Count <> 3 Then
|
|
lv.Items.Clear()
|
|
lv.Items.Add(New ListViewItem({"Preset", Params.Preset.OptionText}))
|
|
lv.Items.Add(New ListViewItem({"Tune", Params.Tune.OptionText}))
|
|
End If
|
|
|
|
Dim offset = If(Params.Mode.Value = x264RateMode.Quality, 0, 1)
|
|
llCompCheck.Visible = Params.Mode.Value = x264RateMode.TwoPass Or Params.Mode.Value = x264RateMode.ThreePass
|
|
End Sub
|
|
|
|
Sub llConfigCodec_Click(sender As Object, e As EventArgs) Handles blConfigCodec.Click
|
|
Encoder.ShowConfigDialog()
|
|
End Sub
|
|
|
|
Sub llConfigContainer_Click(sender As Object, e As EventArgs) Handles llConfigContainer.Click
|
|
Encoder.OpenMuxerConfigDialog()
|
|
End Sub
|
|
|
|
Sub llCompCheck_Click(sender As Object, e As EventArgs) Handles llCompCheck.Click
|
|
Encoder.RunCompCheck()
|
|
End Sub
|
|
|
|
Public Class QualityItem
|
|
Property Value As Single
|
|
Property Text As String
|
|
Property Tooltip As String
|
|
|
|
Sub New(value As Single, text As String, tooltip As String)
|
|
Me.Value = value
|
|
Me.Text = text
|
|
Me.Tooltip = tooltip
|
|
End Sub
|
|
End Class
|
|
End Class
|