mirror of
https://gitlab.com/gabmus/envision.git
synced 2025-07-09 10:31:34 +00:00
feat: update wivrn config to new spec
This commit is contained in:
parent
03de81d2fb
commit
65dcded5c7
4 changed files with 52 additions and 54 deletions
|
@ -79,8 +79,6 @@ pub struct WivrnConfEncoder {
|
||||||
pub encoder: Encoder,
|
pub encoder: Encoder,
|
||||||
pub codec: Codec,
|
pub codec: Codec,
|
||||||
#[serde(skip_serializing_if = "Option::is_none")]
|
#[serde(skip_serializing_if = "Option::is_none")]
|
||||||
pub bitrate: Option<u32>,
|
|
||||||
#[serde(skip_serializing_if = "Option::is_none")]
|
|
||||||
pub width: Option<f32>,
|
pub width: Option<f32>,
|
||||||
#[serde(skip_serializing_if = "Option::is_none")]
|
#[serde(skip_serializing_if = "Option::is_none")]
|
||||||
pub height: Option<f32>,
|
pub height: Option<f32>,
|
||||||
|
@ -97,11 +95,10 @@ impl Default for WivrnConfEncoder {
|
||||||
Self {
|
Self {
|
||||||
encoder: Encoder::X264,
|
encoder: Encoder::X264,
|
||||||
codec: Codec::H264,
|
codec: Codec::H264,
|
||||||
bitrate: None,
|
width: Some(1.0),
|
||||||
width: None,
|
height: Some(1.0),
|
||||||
height: None,
|
offset_x: Some(0.0),
|
||||||
offset_x: None,
|
offset_y: Some(0.0),
|
||||||
offset_y: None,
|
|
||||||
group: None,
|
group: None,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -111,6 +108,8 @@ impl Default for WivrnConfEncoder {
|
||||||
pub struct WivrnConfig {
|
pub struct WivrnConfig {
|
||||||
#[serde(skip_serializing_if = "Option::is_none")]
|
#[serde(skip_serializing_if = "Option::is_none")]
|
||||||
pub scale: Option<[f32; 2]>,
|
pub scale: Option<[f32; 2]>,
|
||||||
|
#[serde(skip_serializing_if = "Option::is_none")]
|
||||||
|
pub bitrate: Option<u32>,
|
||||||
pub encoders: Vec<WivrnConfEncoder>,
|
pub encoders: Vec<WivrnConfEncoder>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -118,16 +117,8 @@ impl Default for WivrnConfig {
|
||||||
fn default() -> Self {
|
fn default() -> Self {
|
||||||
Self {
|
Self {
|
||||||
scale: Some([0.8, 0.8]),
|
scale: Some([0.8, 0.8]),
|
||||||
encoders: vec![WivrnConfEncoder {
|
bitrate: Some(50000000),
|
||||||
encoder: Encoder::X264,
|
encoders: vec![WivrnConfEncoder::default()],
|
||||||
codec: Codec::H264,
|
|
||||||
bitrate: Some(100000000),
|
|
||||||
width: Some(1.0),
|
|
||||||
height: Some(1.0),
|
|
||||||
offset_x: Some(0.0),
|
|
||||||
offset_y: Some(0.0),
|
|
||||||
group: None,
|
|
||||||
}],
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -167,7 +158,7 @@ mod tests {
|
||||||
assert_eq!(conf.encoders.len(), 1);
|
assert_eq!(conf.encoders.len(), 1);
|
||||||
assert_eq!(conf.encoders.get(0).unwrap().encoder, Encoder::X264);
|
assert_eq!(conf.encoders.get(0).unwrap().encoder, Encoder::X264);
|
||||||
assert_eq!(conf.encoders.get(0).unwrap().codec, Codec::H264);
|
assert_eq!(conf.encoders.get(0).unwrap().codec, Codec::H264);
|
||||||
assert_eq!(conf.encoders.get(0).unwrap().bitrate, Some(100000000));
|
assert_eq!(conf.bitrate, Some(100000000));
|
||||||
assert_eq!(conf.encoders.get(0).unwrap().width, Some(1.0));
|
assert_eq!(conf.encoders.get(0).unwrap().width, Some(1.0));
|
||||||
assert_eq!(conf.encoders.get(0).unwrap().height, Some(1.0));
|
assert_eq!(conf.encoders.get(0).unwrap().height, Some(1.0));
|
||||||
assert_eq!(conf.encoders.get(0).unwrap().offset_x, Some(0.0));
|
assert_eq!(conf.encoders.get(0).unwrap().offset_x, Some(0.0));
|
||||||
|
|
|
@ -22,7 +22,6 @@ pub struct WivrnEncoderModel {
|
||||||
pub enum WivrnEncoderModelMsg {
|
pub enum WivrnEncoderModelMsg {
|
||||||
EncoderChanged(u32),
|
EncoderChanged(u32),
|
||||||
CodecChanged(u32),
|
CodecChanged(u32),
|
||||||
BitrateChanged(Option<u32>),
|
|
||||||
WidthChanged(Option<f32>),
|
WidthChanged(Option<f32>),
|
||||||
HeightChanged(Option<f32>),
|
HeightChanged(Option<f32>),
|
||||||
OffsetXChanged(Option<f32>),
|
OffsetXChanged(Option<f32>),
|
||||||
|
@ -85,33 +84,6 @@ impl AsyncFactoryComponent for WivrnEncoderModel {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
) -> adw::ComboRow,
|
) -> adw::ComboRow,
|
||||||
add: bitrate_row = &number_entry_row(
|
|
||||||
"Bitrate (Mbps)",
|
|
||||||
&self.encoder_conf.bitrate
|
|
||||||
.and_then(|n| if let Some(mbits) = bits_to_mbits(n) {
|
|
||||||
Some(mbits.to_string())
|
|
||||||
} else {
|
|
||||||
None
|
|
||||||
})
|
|
||||||
.unwrap_or_default(),
|
|
||||||
false,
|
|
||||||
{
|
|
||||||
let sender = sender.clone();
|
|
||||||
move |row| {
|
|
||||||
let txt = row.text();
|
|
||||||
sender.input(Self::Input::BitrateChanged(
|
|
||||||
if txt.is_empty() {
|
|
||||||
None
|
|
||||||
} else {
|
|
||||||
match txt.parse::<u32>() {
|
|
||||||
Ok(bits) => bits_from_mbits(bits),
|
|
||||||
Err(e) => None,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
) -> adw::EntryRow,
|
|
||||||
add: width_row = &spin_row(
|
add: width_row = &spin_row(
|
||||||
"Width",
|
"Width",
|
||||||
None,
|
None,
|
||||||
|
@ -203,9 +175,6 @@ impl AsyncFactoryComponent for WivrnEncoderModel {
|
||||||
Self::Input::CodecChanged(idx) => {
|
Self::Input::CodecChanged(idx) => {
|
||||||
self.encoder_conf.codec = Codec::as_vec().get(idx as usize).unwrap().clone();
|
self.encoder_conf.codec = Codec::as_vec().get(idx as usize).unwrap().clone();
|
||||||
}
|
}
|
||||||
Self::Input::BitrateChanged(val) => {
|
|
||||||
self.encoder_conf.bitrate = val;
|
|
||||||
}
|
|
||||||
Self::Input::WidthChanged(val) => {
|
Self::Input::WidthChanged(val) => {
|
||||||
self.encoder_conf.width = val;
|
self.encoder_conf.width = val;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,13 @@
|
||||||
use super::factories::wivrn_encoder_group_factory::{WivrnEncoderModel, WivrnEncoderModelInit};
|
use super::{
|
||||||
|
factories::wivrn_encoder_group_factory::{WivrnEncoderModel, WivrnEncoderModelInit},
|
||||||
|
util::bits_from_mbits,
|
||||||
|
};
|
||||||
use crate::{
|
use crate::{
|
||||||
file_builders::wivrn_config::{dump_wivrn_config, get_wivrn_config, WivrnConfig},
|
file_builders::wivrn_config::{dump_wivrn_config, get_wivrn_config, WivrnConfig},
|
||||||
ui::preference_rows::spin_row,
|
ui::{
|
||||||
|
preference_rows::{number_entry_row, spin_row},
|
||||||
|
util::bits_to_mbits,
|
||||||
|
},
|
||||||
};
|
};
|
||||||
use adw::prelude::*;
|
use adw::prelude::*;
|
||||||
use relm4::{factory::AsyncFactoryVecDeque, prelude::*};
|
use relm4::{factory::AsyncFactoryVecDeque, prelude::*};
|
||||||
|
@ -17,6 +23,8 @@ pub struct WivrnConfEditor {
|
||||||
pub scalex_row: Option<adw::SpinRow>,
|
pub scalex_row: Option<adw::SpinRow>,
|
||||||
#[tracker::do_not_track]
|
#[tracker::do_not_track]
|
||||||
pub scaley_row: Option<adw::SpinRow>,
|
pub scaley_row: Option<adw::SpinRow>,
|
||||||
|
#[tracker::do_not_track]
|
||||||
|
bitrate_row: Option<adw::EntryRow>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
|
@ -101,6 +109,24 @@ impl SimpleComponent for WivrnConfEditor {
|
||||||
move |_| {}
|
move |_| {}
|
||||||
) -> adw::SpinRow,
|
) -> adw::SpinRow,
|
||||||
},
|
},
|
||||||
|
add: bitrategrp = &adw::PreferencesGroup {
|
||||||
|
set_title: "Bitrate",
|
||||||
|
add: bitrate_row = &number_entry_row(
|
||||||
|
"Bitrate (Mbps)",
|
||||||
|
&model.conf.bitrate
|
||||||
|
.and_then(|n| if let Some(mbits) = bits_to_mbits(n) {
|
||||||
|
Some(mbits.to_string())
|
||||||
|
} else {
|
||||||
|
None
|
||||||
|
})
|
||||||
|
.unwrap_or_default(),
|
||||||
|
false,
|
||||||
|
{
|
||||||
|
let sender = sender.clone();
|
||||||
|
move |_| {}
|
||||||
|
}
|
||||||
|
) -> adw::EntryRow,
|
||||||
|
},
|
||||||
add: encodersrgp = &adw::PreferencesGroup {
|
add: encodersrgp = &adw::PreferencesGroup {
|
||||||
set_title: "Encoders",
|
set_title: "Encoders",
|
||||||
adw::ActionRow {
|
adw::ActionRow {
|
||||||
|
@ -133,8 +159,18 @@ impl SimpleComponent for WivrnConfEditor {
|
||||||
Self::Input::Save => {
|
Self::Input::Save => {
|
||||||
let x = self.scalex_row.as_ref().unwrap().adjustment().value();
|
let x = self.scalex_row.as_ref().unwrap().adjustment().value();
|
||||||
let y = self.scaley_row.as_ref().unwrap().adjustment().value();
|
let y = self.scaley_row.as_ref().unwrap().adjustment().value();
|
||||||
Some([x as f32, y as f32]);
|
self.conf.scale = Some([x as f32, y as f32]);
|
||||||
|
self.conf.bitrate = {
|
||||||
|
let txt = self.bitrate_row.as_ref().unwrap().text();
|
||||||
|
if txt.is_empty() {
|
||||||
|
None
|
||||||
|
} else {
|
||||||
|
match txt.parse::<u32>() {
|
||||||
|
Ok(mbits) => bits_from_mbits(mbits),
|
||||||
|
Err(_) => None,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
self.conf.encoders = self
|
self.conf.encoders = self
|
||||||
.encoder_models
|
.encoder_models
|
||||||
.as_ref()
|
.as_ref()
|
||||||
|
@ -180,6 +216,7 @@ impl SimpleComponent for WivrnConfEditor {
|
||||||
win: None,
|
win: None,
|
||||||
scalex_row: None,
|
scalex_row: None,
|
||||||
scaley_row: None,
|
scaley_row: None,
|
||||||
|
bitrate_row: None,
|
||||||
tracker: 0,
|
tracker: 0,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -187,6 +224,7 @@ impl SimpleComponent for WivrnConfEditor {
|
||||||
|
|
||||||
model.scalex_row = Some(widgets.scalex_row.clone());
|
model.scalex_row = Some(widgets.scalex_row.clone());
|
||||||
model.scaley_row = Some(widgets.scaley_row.clone());
|
model.scaley_row = Some(widgets.scaley_row.clone());
|
||||||
|
model.bitrate_row = Some(widgets.bitrate_row.clone());
|
||||||
|
|
||||||
let mut encoder_models: AsyncFactoryVecDeque<WivrnEncoderModel> =
|
let mut encoder_models: AsyncFactoryVecDeque<WivrnEncoderModel> =
|
||||||
AsyncFactoryVecDeque::new(widgets.pref_page.clone(), sender.input_sender());
|
AsyncFactoryVecDeque::new(widgets.pref_page.clone(), sender.input_sender());
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
{
|
{
|
||||||
"scale": [0.8, 0.8],
|
"scale": [0.8, 0.8],
|
||||||
|
"bitrate": 100000000,
|
||||||
"encoders": [
|
"encoders": [
|
||||||
{
|
{
|
||||||
"encoder": "x264",
|
"encoder": "x264",
|
||||||
"codec": "h264",
|
"codec": "h264",
|
||||||
"bitrate": 100000000,
|
|
||||||
"width": 1.0,
|
"width": 1.0,
|
||||||
"height": 1.0,
|
"height": 1.0,
|
||||||
"offset_x": 0.0,
|
"offset_x": 0.0,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue