├── .gitattributes
├── .gitignore
├── MetaQuestBitrateRegistryEditor.sln
├── README.md
└── WindowsFormsApp1
├── App.config
├── Form1.Designer.cs
├── Form1.cs
├── Form1.resx
├── MetaQuestBitrateRegistryEditor.csproj
├── Program.cs
├── Properties
├── AssemblyInfo.cs
├── Resources.Designer.cs
├── Resources.resx
├── Settings.Designer.cs
└── Settings.settings
└── resources
├── off-button.png
└── on-button.png
/.gitattributes:
--------------------------------------------------------------------------------
1 | * text=auto eol=auto
2 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | .vs
2 | bin/
3 | obj/
4 |
--------------------------------------------------------------------------------
/MetaQuestBitrateRegistryEditor.sln:
--------------------------------------------------------------------------------
1 |
2 | Microsoft Visual Studio Solution File, Format Version 12.00
3 | # Visual Studio Version 17
4 | VisualStudioVersion = 17.5.33516.290
5 | MinimumVisualStudioVersion = 10.0.40219.1
6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MetaQuestBitrateRegistryEditor", "WindowsFormsApp1\MetaQuestBitrateRegistryEditor.csproj", "{3EEA4AB2-EDFA-4CCA-9D5F-2F7B2E79EEA3}"
7 | EndProject
8 | Global
9 | GlobalSection(SolutionConfigurationPlatforms) = preSolution
10 | Debug|Any CPU = Debug|Any CPU
11 | Debug|x64 = Debug|x64
12 | Release|Any CPU = Release|Any CPU
13 | Release|x64 = Release|x64
14 | EndGlobalSection
15 | GlobalSection(ProjectConfigurationPlatforms) = postSolution
16 | {3EEA4AB2-EDFA-4CCA-9D5F-2F7B2E79EEA3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
17 | {3EEA4AB2-EDFA-4CCA-9D5F-2F7B2E79EEA3}.Debug|Any CPU.Build.0 = Debug|Any CPU
18 | {3EEA4AB2-EDFA-4CCA-9D5F-2F7B2E79EEA3}.Debug|x64.ActiveCfg = Debug|x64
19 | {3EEA4AB2-EDFA-4CCA-9D5F-2F7B2E79EEA3}.Debug|x64.Build.0 = Debug|x64
20 | {3EEA4AB2-EDFA-4CCA-9D5F-2F7B2E79EEA3}.Release|Any CPU.ActiveCfg = Release|Any CPU
21 | {3EEA4AB2-EDFA-4CCA-9D5F-2F7B2E79EEA3}.Release|Any CPU.Build.0 = Release|Any CPU
22 | {3EEA4AB2-EDFA-4CCA-9D5F-2F7B2E79EEA3}.Release|x64.ActiveCfg = Release|x64
23 | {3EEA4AB2-EDFA-4CCA-9D5F-2F7B2E79EEA3}.Release|x64.Build.0 = Release|x64
24 | EndGlobalSection
25 | GlobalSection(SolutionProperties) = preSolution
26 | HideSolutionNode = FALSE
27 | EndGlobalSection
28 | GlobalSection(ExtensibilityGlobals) = postSolution
29 | SolutionGuid = {BFB534C4-7A3A-4EA4-850B-FCBC654E9E17}
30 | EndGlobalSection
31 | EndGlobal
32 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # MetaQuestBitrateRegistryEditor
2 |
3 | Simple Meta Quest bitrate registry editor.
4 |
5 |
6 |
--------------------------------------------------------------------------------
/WindowsFormsApp1/App.config:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/WindowsFormsApp1/Form1.Designer.cs:
--------------------------------------------------------------------------------
1 | namespace WindowsFormsApp1
2 | {
3 | partial class Form1
4 | {
5 | ///
6 | /// 필수 디자이너 변수입니다.
7 | ///
8 | private System.ComponentModel.IContainer components = null;
9 |
10 | ///
11 | /// 사용 중인 모든 리소스를 정리합니다.
12 | ///
13 | /// 관리되는 리소스를 삭제해야 하면 true이고, 그렇지 않으면 false입니다.
14 | protected override void Dispose(bool disposing)
15 | {
16 | if (disposing && (components != null))
17 | {
18 | components.Dispose();
19 | }
20 | base.Dispose(disposing);
21 | }
22 |
23 | #region Windows Form 디자이너에서 생성한 코드
24 |
25 | ///
26 | /// 디자이너 지원에 필요한 메서드입니다.
27 | /// 이 메서드의 내용을 코드 편집기로 수정하지 마세요.
28 | ///
29 | private void InitializeComponent()
30 | {
31 | this.bitrateTextBox = new System.Windows.Forms.TextBox();
32 | this.dbmTextBox = new System.Windows.Forms.TextBox();
33 | this.label1 = new System.Windows.Forms.Label();
34 | this.label2 = new System.Windows.Forms.Label();
35 | this.restoreBtn = new System.Windows.Forms.Button();
36 | this.aswOffBtn = new System.Windows.Forms.Button();
37 | this.label3 = new System.Windows.Forms.Label();
38 | this.hevcBtn = new System.Windows.Forms.Button();
39 | this.dbrBtn = new System.Windows.Forms.Button();
40 | this.label4 = new System.Windows.Forms.Label();
41 | this.perfHudOffBtn = new System.Windows.Forms.Button();
42 | this.perfHudOnBtn = new System.Windows.Forms.Button();
43 | this.sharpeningComboBox = new System.Windows.Forms.ComboBox();
44 | this.label5 = new System.Windows.Forms.Label();
45 | this.SuspendLayout();
46 | //
47 | // bitrateTextBox
48 | //
49 | this.bitrateTextBox.Location = new System.Drawing.Point(338, 44);
50 | this.bitrateTextBox.Name = "bitrateTextBox";
51 | this.bitrateTextBox.Size = new System.Drawing.Size(80, 28);
52 | this.bitrateTextBox.TabIndex = 0;
53 | this.bitrateTextBox.KeyDown += new System.Windows.Forms.KeyEventHandler(this.textBox_KeyDown);
54 | this.bitrateTextBox.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.textBox_KeyPress);
55 | this.bitrateTextBox.Leave += new System.EventHandler(this.bitrateTextBox_Leave);
56 | //
57 | // dbmTextBox
58 | //
59 | this.dbmTextBox.Location = new System.Drawing.Point(338, 205);
60 | this.dbmTextBox.Name = "dbmTextBox";
61 | this.dbmTextBox.Size = new System.Drawing.Size(80, 28);
62 | this.dbmTextBox.TabIndex = 1;
63 | this.dbmTextBox.KeyDown += new System.Windows.Forms.KeyEventHandler(this.textBox_KeyDown);
64 | this.dbmTextBox.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.textBox_KeyPress);
65 | this.dbmTextBox.Leave += new System.EventHandler(this.dbmTextBox_Leave);
66 | //
67 | // label1
68 | //
69 | this.label1.AutoSize = true;
70 | this.label1.Font = new System.Drawing.Font("Segoe UI", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
71 | this.label1.Location = new System.Drawing.Point(195, 44);
72 | this.label1.Name = "label1";
73 | this.label1.Size = new System.Drawing.Size(137, 28);
74 | this.label1.TabIndex = 5;
75 | this.label1.Text = "bitrate (Mbps)";
76 | //
77 | // label2
78 | //
79 | this.label2.AutoSize = true;
80 | this.label2.Font = new System.Drawing.Font("Segoe UI", 10F);
81 | this.label2.Location = new System.Drawing.Point(73, 200);
82 | this.label2.Name = "label2";
83 | this.label2.Size = new System.Drawing.Size(259, 28);
84 | this.label2.TabIndex = 13;
85 | this.label2.Text = "Dynamic Bitrate Max (Mbps)";
86 | //
87 | // restoreBtn
88 | //
89 | this.restoreBtn.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
90 | this.restoreBtn.Location = new System.Drawing.Point(24, 449);
91 | this.restoreBtn.Name = "restoreBtn";
92 | this.restoreBtn.Size = new System.Drawing.Size(544, 90);
93 | this.restoreBtn.TabIndex = 14;
94 | this.restoreBtn.Text = "Restore All\r\n(delete BitrateMbps, HEVC, DBR, DBRMax registry values)";
95 | this.restoreBtn.UseVisualStyleBackColor = true;
96 | this.restoreBtn.Click += new System.EventHandler(this.restoreBtn_Click);
97 | //
98 | // aswOffBtn
99 | //
100 | this.aswOffBtn.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
101 | this.aswOffBtn.Location = new System.Drawing.Point(187, 387);
102 | this.aswOffBtn.Name = "aswOffBtn";
103 | this.aswOffBtn.Size = new System.Drawing.Size(230, 47);
104 | this.aswOffBtn.TabIndex = 15;
105 | this.aswOffBtn.Text = "ASW off";
106 | this.aswOffBtn.UseVisualStyleBackColor = true;
107 | this.aswOffBtn.Click += new System.EventHandler(this.aswOffBtn_Click);
108 | //
109 | // label3
110 | //
111 | this.label3.AutoSize = true;
112 | this.label3.Font = new System.Drawing.Font("Segoe UI", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
113 | this.label3.Location = new System.Drawing.Point(195, 95);
114 | this.label3.Name = "label3";
115 | this.label3.Size = new System.Drawing.Size(60, 28);
116 | this.label3.TabIndex = 16;
117 | this.label3.Text = "HEVC";
118 | //
119 | // hevcBtn
120 | //
121 | this.hevcBtn.BackColor = System.Drawing.Color.Transparent;
122 | this.hevcBtn.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center;
123 | this.hevcBtn.FlatAppearance.BorderSize = 0;
124 | this.hevcBtn.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
125 | this.hevcBtn.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
126 | this.hevcBtn.Location = new System.Drawing.Point(352, 90);
127 | this.hevcBtn.Margin = new System.Windows.Forms.Padding(0);
128 | this.hevcBtn.Name = "hevcBtn";
129 | this.hevcBtn.Size = new System.Drawing.Size(74, 46);
130 | this.hevcBtn.TabIndex = 8;
131 | this.hevcBtn.UseVisualStyleBackColor = false;
132 | this.hevcBtn.Click += new System.EventHandler(this.hevcBtn_Click);
133 | //
134 | // dbrBtn
135 | //
136 | this.dbrBtn.BackColor = System.Drawing.Color.Transparent;
137 | this.dbrBtn.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center;
138 | this.dbrBtn.FlatAppearance.BorderSize = 0;
139 | this.dbrBtn.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
140 | this.dbrBtn.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
141 | this.dbrBtn.Location = new System.Drawing.Point(352, 139);
142 | this.dbrBtn.Margin = new System.Windows.Forms.Padding(0);
143 | this.dbrBtn.Name = "dbrBtn";
144 | this.dbrBtn.Size = new System.Drawing.Size(74, 46);
145 | this.dbrBtn.TabIndex = 17;
146 | this.dbrBtn.UseVisualStyleBackColor = false;
147 | this.dbrBtn.Click += new System.EventHandler(this.dbrBtn_Click);
148 | //
149 | // label4
150 | //
151 | this.label4.AutoSize = true;
152 | this.label4.Font = new System.Drawing.Font("Segoe UI", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
153 | this.label4.Location = new System.Drawing.Point(182, 147);
154 | this.label4.Name = "label4";
155 | this.label4.Size = new System.Drawing.Size(150, 28);
156 | this.label4.TabIndex = 18;
157 | this.label4.Text = "Dynamic Bitrate";
158 | //
159 | // perfHudOffBtn
160 | //
161 | this.perfHudOffBtn.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
162 | this.perfHudOffBtn.Location = new System.Drawing.Point(147, 323);
163 | this.perfHudOffBtn.Name = "perfHudOffBtn";
164 | this.perfHudOffBtn.Size = new System.Drawing.Size(145, 47);
165 | this.perfHudOffBtn.TabIndex = 19;
166 | this.perfHudOffBtn.Text = "Perf HUD off";
167 | this.perfHudOffBtn.UseVisualStyleBackColor = true;
168 | this.perfHudOffBtn.Click += new System.EventHandler(this.perfHudOffBtn_Click);
169 | //
170 | // perfHudOnBtn
171 | //
172 | this.perfHudOnBtn.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
173 | this.perfHudOnBtn.Location = new System.Drawing.Point(314, 323);
174 | this.perfHudOnBtn.Name = "perfHudOnBtn";
175 | this.perfHudOnBtn.Size = new System.Drawing.Size(145, 47);
176 | this.perfHudOnBtn.TabIndex = 20;
177 | this.perfHudOnBtn.Text = "Perf HUD on";
178 | this.perfHudOnBtn.UseVisualStyleBackColor = true;
179 | this.perfHudOnBtn.Click += new System.EventHandler(this.perfHudOnBtn_Click);
180 | //
181 | // sharpeningComboBox
182 | //
183 | this.sharpeningComboBox.FormattingEnabled = true;
184 | this.sharpeningComboBox.Items.AddRange(new object[] {
185 | "Disabled",
186 | "Normal",
187 | "Quality"});
188 | this.sharpeningComboBox.Location = new System.Drawing.Point(338, 249);
189 | this.sharpeningComboBox.Name = "sharpeningComboBox";
190 | this.sharpeningComboBox.Size = new System.Drawing.Size(121, 26);
191 | this.sharpeningComboBox.TabIndex = 21;
192 | this.sharpeningComboBox.SelectedIndexChanged += new System.EventHandler(this.sharpeningComboBox_SelectedIndexChanged);
193 | //
194 | // label5
195 | //
196 | this.label5.AutoSize = true;
197 | this.label5.Font = new System.Drawing.Font("Segoe UI", 10F);
198 | this.label5.Location = new System.Drawing.Point(220, 244);
199 | this.label5.Name = "label5";
200 | this.label5.Size = new System.Drawing.Size(112, 28);
201 | this.label5.TabIndex = 22;
202 | this.label5.Text = "Sharpening";
203 | //
204 | // Form1
205 | //
206 | this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 18F);
207 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
208 | this.ClientSize = new System.Drawing.Size(597, 551);
209 | this.Controls.Add(this.label5);
210 | this.Controls.Add(this.sharpeningComboBox);
211 | this.Controls.Add(this.perfHudOnBtn);
212 | this.Controls.Add(this.perfHudOffBtn);
213 | this.Controls.Add(this.label4);
214 | this.Controls.Add(this.dbrBtn);
215 | this.Controls.Add(this.label3);
216 | this.Controls.Add(this.aswOffBtn);
217 | this.Controls.Add(this.restoreBtn);
218 | this.Controls.Add(this.label2);
219 | this.Controls.Add(this.hevcBtn);
220 | this.Controls.Add(this.label1);
221 | this.Controls.Add(this.dbmTextBox);
222 | this.Controls.Add(this.bitrateTextBox);
223 | this.Name = "Form1";
224 | this.Text = "Meta Quest Bitrate Registry Editor 0.2.1";
225 | this.Load += new System.EventHandler(this.Form1_Load);
226 | this.Click += new System.EventHandler(this.Form1_Click);
227 | this.ResumeLayout(false);
228 | this.PerformLayout();
229 |
230 | }
231 |
232 | #endregion
233 |
234 | private System.Windows.Forms.TextBox bitrateTextBox;
235 | private System.Windows.Forms.TextBox dbmTextBox;
236 | private System.Windows.Forms.Label label1;
237 | private System.Windows.Forms.Button hevcBtn;
238 | private System.Windows.Forms.Label label2;
239 | private System.Windows.Forms.Button restoreBtn;
240 | private System.Windows.Forms.Button aswOffBtn;
241 | private System.Windows.Forms.Label label3;
242 | private System.Windows.Forms.Button dbrBtn;
243 | private System.Windows.Forms.Label label4;
244 | private System.Windows.Forms.Button perfHudOffBtn;
245 | private System.Windows.Forms.Button perfHudOnBtn;
246 | private System.Windows.Forms.ComboBox sharpeningComboBox;
247 | private System.Windows.Forms.Label label5;
248 | }
249 | }
250 |
251 |
--------------------------------------------------------------------------------
/WindowsFormsApp1/Form1.cs:
--------------------------------------------------------------------------------
1 | using Microsoft.Win32;
2 | using System;
3 | using System.Diagnostics;
4 | using System.Windows.Forms;
5 |
6 | namespace WindowsFormsApp1
7 | {
8 |
9 | public partial class Form1 : Form
10 | {
11 | private const string OculusRegKey = "HKEY_CURRENT_USER\\SOFTWARE\\Oculus\\RemoteHeadset";
12 | private const string OdtCli = "C:\\Program Files\\Oculus\\Support\\oculus-diagnostics\\OculusDebugToolCLI.exe\"";
13 | private const string BitrateMbpsValueName = "BitrateMbps";
14 | private const string HevcValueName = "HEVC";
15 | private const string DbrValueName = "DBR";
16 | private const string DbrMaxValueName = "DBRMax";
17 | private const string SharpeningValueName = "LinkSharpeningEnabled";
18 |
19 | private Boolean hevcToggle;
20 | private Boolean dbrToggle;
21 |
22 | public Form1()
23 | {
24 | InitializeComponent();
25 |
26 | Object bitrateValue = Registry.GetValue(OculusRegKey, BitrateMbpsValueName, null);
27 | if (bitrateValue != null && bitrateValue is int)
28 | {
29 | bitrateTextBox.Text = bitrateValue.ToString();
30 | }
31 |
32 | Object dbrMaxValue = Registry.GetValue(OculusRegKey, DbrMaxValueName, null);
33 | if (dbrMaxValue != null && dbrMaxValue is int)
34 | {
35 | dbmTextBox.Text = dbrMaxValue.ToString();
36 | }
37 |
38 | Object hevcValue = Registry.GetValue(OculusRegKey, HevcValueName, null);
39 | if (hevcValue != null && hevcValue is int && int.Parse(hevcValue.ToString()) == 0)
40 | {
41 | hevcToggle = false;
42 | hevcBtn.BackgroundImage = MetaQuestBitrateRegistryEditor.Properties.Resources.off_button;
43 | }
44 | else
45 | {
46 | hevcToggle = true;
47 | hevcBtn.BackgroundImage = MetaQuestBitrateRegistryEditor.Properties.Resources.on_button;
48 | }
49 |
50 | Object dbrValue = Registry.GetValue(OculusRegKey, DbrValueName, null);
51 | if (dbrValue != null && dbrValue is int && int.Parse(dbrValue.ToString()) == 1)
52 | {
53 | dbrValue = true;
54 | dbrBtn.BackgroundImage = MetaQuestBitrateRegistryEditor.Properties.Resources.on_button;
55 | }
56 | else
57 | {
58 | dbrValue = false;
59 | dbrBtn.BackgroundImage = MetaQuestBitrateRegistryEditor.Properties.Resources.off_button;
60 | }
61 |
62 | Object sharpeningValue = Registry.GetValue(OculusRegKey, SharpeningValueName, null);
63 | if (sharpeningValue != null && sharpeningValue is int)
64 | {
65 | string sharpeningStrValue;
66 | if ((int) sharpeningValue == 1)
67 | {
68 | sharpeningStrValue = "Disabled";
69 | }
70 | else if ((int)sharpeningValue == 2)
71 | {
72 | sharpeningStrValue = "Normal";
73 | }
74 | else
75 | {
76 | sharpeningStrValue = "Quality";
77 | }
78 | sharpeningComboBox.SelectedItem = sharpeningStrValue;
79 | }
80 | }
81 |
82 | private void Form1_Click(object sender, EventArgs e)
83 | {
84 | this.ActiveControl = null;
85 | }
86 |
87 | private void textBox_KeyDown(object sender, KeyEventArgs e)
88 | {
89 | if (e.KeyCode == Keys.Enter)
90 | {
91 | this.ActiveControl = null;
92 | }
93 | }
94 |
95 | private void textBox_KeyPress(object sender, KeyPressEventArgs e)
96 | {
97 | // Allow only numeric characters and control characters (such as backspace)
98 | if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar))
99 | {
100 | e.Handled = true;
101 | }
102 | }
103 |
104 | private void bitrateTextBox_Leave(object sender, EventArgs e)
105 | {
106 | if (!String.IsNullOrEmpty(bitrateTextBox.Text))
107 | {
108 | Registry.SetValue(OculusRegKey, BitrateMbpsValueName, int.Parse(bitrateTextBox.Text));
109 | }
110 | }
111 |
112 | private void dbmTextBox_Leave(object sender, EventArgs e)
113 | {
114 | Registry.SetValue(OculusRegKey, DbrMaxValueName, int.Parse(dbmTextBox.Text));
115 | }
116 |
117 | private void Form1_Load(object sender, EventArgs e)
118 | {
119 |
120 | }
121 |
122 | private void hevcBtn_Click(object sender, EventArgs e)
123 | {
124 | hevcToggle = !hevcToggle;
125 | hevcBtn.BackgroundImage = hevcToggle ? MetaQuestBitrateRegistryEditor.Properties.Resources.on_button
126 | : MetaQuestBitrateRegistryEditor.Properties.Resources.off_button;
127 | Registry.SetValue(OculusRegKey, HevcValueName, hevcToggle ? 1 : 0);
128 | }
129 |
130 | private void dbrBtn_Click(object sender, EventArgs e)
131 | {
132 | dbrToggle = !dbrToggle;
133 | dbrBtn.BackgroundImage = dbrToggle ? MetaQuestBitrateRegistryEditor.Properties.Resources.on_button
134 | : MetaQuestBitrateRegistryEditor.Properties.Resources.off_button;
135 | Registry.SetValue(OculusRegKey, DbrValueName, dbrToggle ? 1 : 0);
136 | }
137 |
138 | private void perfHudOffBtn_Click(object sender, EventArgs e)
139 | {
140 | string command = "echo perfhud reset | \"" + OdtCli;
141 |
142 | ProcessStartInfo startInfo = new ProcessStartInfo();
143 | startInfo.FileName = "cmd.exe";
144 | startInfo.Arguments = "/c " + command;
145 | startInfo.UseShellExecute = false;
146 | startInfo.CreateNoWindow = true;
147 |
148 | Process.Start(startInfo);
149 | }
150 |
151 | private void perfHudOnBtn_Click(object sender, EventArgs e)
152 | {
153 | string command = "echo perfhud set-mode 7 | \"" + OdtCli;
154 |
155 | ProcessStartInfo startInfo = new ProcessStartInfo();
156 | startInfo.FileName = "cmd.exe";
157 | startInfo.Arguments = "/c " + command;
158 | startInfo.UseShellExecute = false;
159 | startInfo.CreateNoWindow = true;
160 |
161 | Process.Start(startInfo);
162 | }
163 |
164 |
165 | private void restoreBtn_Click(object sender, EventArgs e)
166 | {
167 | RegistryKey key = Registry.CurrentUser.OpenSubKey(@"SOFTWARE\\Oculus\\RemoteHeadset", true);
168 |
169 | if (key == null)
170 | {
171 | return;
172 | }
173 |
174 | if (key.GetValue(BitrateMbpsValueName) != null)
175 | {
176 | key.DeleteValue(BitrateMbpsValueName);
177 | }
178 |
179 | if (key.GetValue(HevcValueName) != null)
180 | {
181 | key.DeleteValue(HevcValueName);
182 | }
183 |
184 | if (key.GetValue(DbrValueName) != null)
185 | {
186 | key.DeleteValue(DbrValueName);
187 | }
188 |
189 | if (key.GetValue(DbrMaxValueName) != null)
190 | {
191 | key.DeleteValue(DbrMaxValueName);
192 | }
193 |
194 | key?.Close();
195 |
196 | bitrateTextBox.Text = "";
197 | dbmTextBox.Text = "";
198 | hevcToggle = true;
199 | hevcBtn.BackgroundImage = MetaQuestBitrateRegistryEditor.Properties.Resources.on_button;
200 | dbrToggle = false;
201 | dbrBtn.BackgroundImage = MetaQuestBitrateRegistryEditor.Properties.Resources.off_button;
202 | }
203 |
204 | private void aswOffBtn_Click(object sender, EventArgs e)
205 | {
206 | string command = "echo server:asw.Off | \"" + OdtCli;
207 |
208 | ProcessStartInfo startInfo = new ProcessStartInfo();
209 | startInfo.FileName = "cmd.exe";
210 | startInfo.Arguments = "/c " + command; // "/c" flag tells cmd to execute the command and exit
211 | startInfo.UseShellExecute = false;
212 | startInfo.RedirectStandardOutput = true;
213 | startInfo.CreateNoWindow = true;
214 |
215 | Process.Start(startInfo);
216 | }
217 |
218 | private void sharpeningComboBox_SelectedIndexChanged(object sender, EventArgs e)
219 | {
220 | string selectedValue = sharpeningComboBox.SelectedItem.ToString();
221 | int sharpeningValue;
222 | if (selectedValue.Equals("Disabled"))
223 | {
224 | sharpeningValue = 1;
225 | }
226 | else if (selectedValue.Equals("Normal"))
227 | {
228 | sharpeningValue = 2;
229 | } else
230 | {
231 | sharpeningValue = 3;
232 | }
233 | Registry.SetValue(OculusRegKey, SharpeningValueName, sharpeningValue);
234 | }
235 | }
236 | }
237 |
--------------------------------------------------------------------------------
/WindowsFormsApp1/Form1.resx:
--------------------------------------------------------------------------------
1 |
2 |
3 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 | text/microsoft-resx
110 |
111 |
112 | 2.0
113 |
114 |
115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
116 |
117 |
118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
119 |
120 |
--------------------------------------------------------------------------------
/WindowsFormsApp1/MetaQuestBitrateRegistryEditor.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Debug
6 | AnyCPU
7 | {3EEA4AB2-EDFA-4CCA-9D5F-2F7B2E79EEA3}
8 | WinExe
9 | MetaQuestBitrateRegistryEditor
10 | MetaQuestBitrateRegistryEditor
11 | v4.7.2
12 | 512
13 | true
14 | true
15 |
16 |
17 | AnyCPU
18 | true
19 | full
20 | false
21 | bin\Debug\
22 | DEBUG;TRACE
23 | prompt
24 | 4
25 |
26 |
27 | AnyCPU
28 | pdbonly
29 | true
30 | bin\Release\
31 | TRACE
32 | prompt
33 | 4
34 |
35 |
36 | true
37 | bin\x64\Debug\
38 | DEBUG;TRACE
39 | full
40 | x64
41 | 7.3
42 | prompt
43 | true
44 |
45 |
46 | bin\x64\Release\
47 | TRACE
48 | true
49 | pdbonly
50 | x64
51 | 7.3
52 | prompt
53 | true
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 | Form
71 |
72 |
73 | Form1.cs
74 |
75 |
76 |
77 |
78 | Form1.cs
79 |
80 |
81 | ResXFileCodeGenerator
82 | Resources.Designer.cs
83 | Designer
84 |
85 |
86 | True
87 | Resources.resx
88 | True
89 |
90 |
91 | SettingsSingleFileGenerator
92 | Settings.Designer.cs
93 |
94 |
95 | True
96 | Settings.settings
97 | True
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
110 |
--------------------------------------------------------------------------------
/WindowsFormsApp1/Program.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Threading.Tasks;
5 | using System.Windows.Forms;
6 |
7 | namespace WindowsFormsApp1
8 | {
9 | internal static class Program
10 | {
11 | ///
12 | /// 해당 애플리케이션의 주 진입점입니다.
13 | ///
14 | [STAThread]
15 | static void Main()
16 | {
17 | Application.EnableVisualStyles();
18 | Application.SetCompatibleTextRenderingDefault(false);
19 | Application.Run(new Form1());
20 | }
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/WindowsFormsApp1/Properties/AssemblyInfo.cs:
--------------------------------------------------------------------------------
1 | using System.Reflection;
2 | using System.Runtime.CompilerServices;
3 | using System.Runtime.InteropServices;
4 |
5 | // 어셈블리에 대한 일반 정보는 다음 특성 집합을 통해
6 | // 제어됩니다. 어셈블리와 관련된 정보를 수정하려면
7 | // 이러한 특성 값을 변경하세요.
8 | [assembly: AssemblyTitle("WindowsFormsApp1")]
9 | [assembly: AssemblyDescription("")]
10 | [assembly: AssemblyConfiguration("")]
11 | [assembly: AssemblyCompany("")]
12 | [assembly: AssemblyProduct("WindowsFormsApp1")]
13 | [assembly: AssemblyCopyright("Copyright © 2023")]
14 | [assembly: AssemblyTrademark("")]
15 | [assembly: AssemblyCulture("")]
16 |
17 | // ComVisible을 false로 설정하면 이 어셈블리의 형식이 COM 구성 요소에
18 | // 표시되지 않습니다. COM에서 이 어셈블리의 형식에 액세스하려면
19 | // 해당 형식에 대해 ComVisible 특성을 true로 설정하세요.
20 | [assembly: ComVisible(false)]
21 |
22 | // 이 프로젝트가 COM에 노출되는 경우 다음 GUID는 typelib의 ID를 나타냅니다.
23 | [assembly: Guid("3eea4ab2-edfa-4cca-9d5f-2f7b2e79eea3")]
24 |
25 | // 어셈블리의 버전 정보는 다음 네 가지 값으로 구성됩니다.
26 | //
27 | // 주 버전
28 | // 부 버전
29 | // 빌드 번호
30 | // 수정 버전
31 | //
32 | // 모든 값을 지정하거나 아래와 같이 '*'를 사용하여 빌드 번호 및 수정 번호를
33 | // 기본값으로 할 수 있습니다.
34 | // [assembly: AssemblyVersion("1.0.*")]
35 | [assembly: AssemblyVersion("1.0.0.0")]
36 | [assembly: AssemblyFileVersion("1.0.0.0")]
37 |
--------------------------------------------------------------------------------
/WindowsFormsApp1/Properties/Resources.Designer.cs:
--------------------------------------------------------------------------------
1 | //------------------------------------------------------------------------------
2 | //
3 | // 이 코드는 도구를 사용하여 생성되었습니다.
4 | // 런타임 버전:4.0.30319.42000
5 | //
6 | // 파일 내용을 변경하면 잘못된 동작이 발생할 수 있으며, 코드를 다시 생성하면
7 | // 이러한 변경 내용이 손실됩니다.
8 | //
9 | //------------------------------------------------------------------------------
10 |
11 | namespace MetaQuestBitrateRegistryEditor.Properties {
12 | using System;
13 |
14 |
15 | ///
16 | /// 지역화된 문자열 등을 찾기 위한 강력한 형식의 리소스 클래스입니다.
17 | ///
18 | // 이 클래스는 ResGen 또는 Visual Studio와 같은 도구를 통해 StronglyTypedResourceBuilder
19 | // 클래스에서 자동으로 생성되었습니다.
20 | // 멤버를 추가하거나 제거하려면 .ResX 파일을 편집한 다음 /str 옵션을 사용하여 ResGen을
21 | // 다시 실행하거나 VS 프로젝트를 다시 빌드하십시오.
22 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
23 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
24 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
25 | internal class Resources {
26 |
27 | private static global::System.Resources.ResourceManager resourceMan;
28 |
29 | private static global::System.Globalization.CultureInfo resourceCulture;
30 |
31 | [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
32 | internal Resources() {
33 | }
34 |
35 | ///
36 | /// 이 클래스에서 사용하는 캐시된 ResourceManager 인스턴스를 반환합니다.
37 | ///
38 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
39 | internal static global::System.Resources.ResourceManager ResourceManager {
40 | get {
41 | if (object.ReferenceEquals(resourceMan, null)) {
42 | global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("MetaQuestBitrateRegistryEditor.Properties.Resources", typeof(Resources).Assembly);
43 | resourceMan = temp;
44 | }
45 | return resourceMan;
46 | }
47 | }
48 |
49 | ///
50 | /// 이 강력한 형식의 리소스 클래스를 사용하여 모든 리소스 조회에 대해 현재 스레드의 CurrentUICulture 속성을
51 | /// 재정의합니다.
52 | ///
53 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
54 | internal static global::System.Globalization.CultureInfo Culture {
55 | get {
56 | return resourceCulture;
57 | }
58 | set {
59 | resourceCulture = value;
60 | }
61 | }
62 |
63 | ///
64 | /// System.Drawing.Bitmap 형식의 지역화된 리소스를 찾습니다.
65 | ///
66 | internal static System.Drawing.Bitmap off_button {
67 | get {
68 | object obj = ResourceManager.GetObject("off-button", resourceCulture);
69 | return ((System.Drawing.Bitmap)(obj));
70 | }
71 | }
72 |
73 | ///
74 | /// System.Drawing.Bitmap 형식의 지역화된 리소스를 찾습니다.
75 | ///
76 | internal static System.Drawing.Bitmap on_button {
77 | get {
78 | object obj = ResourceManager.GetObject("on-button", resourceCulture);
79 | return ((System.Drawing.Bitmap)(obj));
80 | }
81 | }
82 | }
83 | }
84 |
--------------------------------------------------------------------------------
/WindowsFormsApp1/Properties/Resources.resx:
--------------------------------------------------------------------------------
1 |
2 |
3 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 | text/microsoft-resx
110 |
111 |
112 | 2.0
113 |
114 |
115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
116 |
117 |
118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
119 |
120 |
121 |
122 | ..\resources\off-button.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
123 |
124 |
125 | ..\resources\on-button.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
126 |
127 |
--------------------------------------------------------------------------------
/WindowsFormsApp1/Properties/Settings.Designer.cs:
--------------------------------------------------------------------------------
1 | //------------------------------------------------------------------------------
2 | //
3 | // 이 코드는 도구를 사용하여 생성되었습니다.
4 | // 런타임 버전:4.0.30319.42000
5 | //
6 | // 파일 내용을 변경하면 잘못된 동작이 발생할 수 있으며, 코드를 다시 생성하면
7 | // 이러한 변경 내용이 손실됩니다.
8 | //
9 | //------------------------------------------------------------------------------
10 |
11 | namespace MetaQuestBitrateRegistryEditor.Properties {
12 |
13 |
14 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
15 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.5.0.0")]
16 | internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
17 |
18 | private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
19 |
20 | public static Settings Default {
21 | get {
22 | return defaultInstance;
23 | }
24 | }
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/WindowsFormsApp1/Properties/Settings.settings:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/WindowsFormsApp1/resources/off-button.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CHUNx3/MetaQuestBitrateRegistryEditor/eb62f2fff7e8e9fb3cea33a57ad6903d4bbbf92e/WindowsFormsApp1/resources/off-button.png
--------------------------------------------------------------------------------
/WindowsFormsApp1/resources/on-button.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CHUNx3/MetaQuestBitrateRegistryEditor/eb62f2fff7e8e9fb3cea33a57ad6903d4bbbf92e/WindowsFormsApp1/resources/on-button.png
--------------------------------------------------------------------------------