You've already forked it9910hd_fusefs
mirror of
https://github.com/marek-g/it9910hd_fusefs.git
synced 2026-05-05 18:01:19 +09:00
Add brightness / contrast / saturation / hue settings.
This commit is contained in:
@@ -29,7 +29,7 @@ sudo udevadm control --reload
|
||||
|
||||
```bash
|
||||
mkdir ./video
|
||||
./it9910hd_fusefs ./video --width 1920 --height 1080 --fps 30 --bitrate 52000 --audio_src 2 --video_src 4
|
||||
./it9910hd_fusefs ./video --width 1920 --height 1080 --fps 30 --bitrate 52000 --audio_src 2 --video_src 4 --brightness=0 --contrast=100 --saturation=100 --hue=0
|
||||
```
|
||||
|
||||
## Play video
|
||||
|
||||
Binary file not shown.
2
bin/play
2
bin/play
@@ -4,7 +4,7 @@
|
||||
|
||||
mkdir ./video
|
||||
|
||||
./it9910hd_fusefs ./video --width 1920 --height 1080 --fps 30 --bitrate 52000 --audio_src 2 --video_src 4 &
|
||||
./it9910hd_fusefs ./video --width 1920 --height 1080 --fps 30 --bitrate 52000 --audio_src 2 --video_src 4 --brightness=0 --contrast=100 --saturation=100 --hue=0 &
|
||||
|
||||
mpv -hwdec=auto ./video/hdmi_stream.ts
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
mkdir ./video
|
||||
|
||||
./it9910hd_fusefs ./video --width 1920 --height 1080 --fps 25 --bitrate 20000 --audio_src 2 --video_src 4 &
|
||||
./it9910hd_fusefs ./video --width 1920 --height 1080 --fps 25 --bitrate 20000 --audio_src 2 --video_src 4 --brightness=0 --contrast=100 --saturation=100 --hue=0 &
|
||||
|
||||
mpv -hwdec=auto --record-file=./video.ts ./video/hdmi_stream.ts
|
||||
|
||||
|
||||
@@ -23,6 +23,10 @@ impl IT9910Driver {
|
||||
bitrate: u32,
|
||||
audio_src: u32,
|
||||
video_src: u32,
|
||||
brightness: i32,
|
||||
contrast: i32,
|
||||
hue: i32,
|
||||
saturation: i32,
|
||||
) -> Result<(), String> {
|
||||
//self.debug_query_time(1)?;
|
||||
//self.set_pc_grabber(0)?;
|
||||
@@ -53,7 +57,10 @@ impl IT9910Driver {
|
||||
self.set_pc_grabber2(device_model, i, width, height, bitrate, fps)?;
|
||||
}
|
||||
|
||||
//self.debug_query_time(1)?;
|
||||
self.set_brightness(brightness)?;
|
||||
self.set_contrast(contrast)?;
|
||||
self.set_hue(hue)?;
|
||||
self.set_saturation(saturation)?;
|
||||
|
||||
self.set_state(2)?;
|
||||
|
||||
@@ -125,6 +132,50 @@ impl IT9910Driver {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn set_brightness(&mut self, brightness: i32) -> Result<(), String> {
|
||||
let mut buf = [0u8; 16 + 4 * 2];
|
||||
|
||||
write_le_i32(&mut buf[16..20], 0);
|
||||
write_le_i32(&mut buf[20..24], brightness);
|
||||
|
||||
let _received = self.send_command(&mut buf, 0x99100101, 2)?;
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn set_contrast(&mut self, contrast: i32) -> Result<(), String> {
|
||||
let mut buf = [0u8; 16 + 4 * 2];
|
||||
|
||||
write_le_i32(&mut buf[16..20], 0);
|
||||
write_le_i32(&mut buf[20..24], contrast);
|
||||
|
||||
let _received = self.send_command(&mut buf, 0x99100102, 2)?;
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn set_hue(&mut self, hue: i32) -> Result<(), String> {
|
||||
let mut buf = [0u8; 16 + 4 * 2];
|
||||
|
||||
write_le_i32(&mut buf[16..20], 0);
|
||||
write_le_i32(&mut buf[20..24], hue);
|
||||
|
||||
let _received = self.send_command(&mut buf, 0x99100103, 2)?;
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn set_saturation(&mut self, set_saturation: i32) -> Result<(), String> {
|
||||
let mut buf = [0u8; 16 + 4 * 2];
|
||||
|
||||
write_le_i32(&mut buf[16..20], 0);
|
||||
write_le_i32(&mut buf[20..24], set_saturation);
|
||||
|
||||
let _received = self.send_command(&mut buf, 0x99100104, 2)?;
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn set_pc_grabber(&mut self, start: i32) -> Result<(), String> {
|
||||
let mut buf = [0u8; 16 + 4 * 3];
|
||||
|
||||
|
||||
70
src/main.rs
70
src/main.rs
@@ -66,7 +66,11 @@ struct IT9910FS {
|
||||
bitrate: u32,
|
||||
audio_src: u32,
|
||||
video_src: u32,
|
||||
//buffer_max_len: u32,
|
||||
brightness: i32,
|
||||
constrast: i32,
|
||||
hue: i32,
|
||||
saturation: i32,
|
||||
|
||||
data_receiver: Option<Receiver<Vec<u8>>>,
|
||||
terminate_sender: Option<Sender<()>>,
|
||||
thread_ended_receiver: Option<Receiver<()>>,
|
||||
@@ -87,7 +91,10 @@ impl IT9910FS {
|
||||
bitrate: u32,
|
||||
audio_src: u32,
|
||||
video_src: u32,
|
||||
//buffer_max_len: u32,
|
||||
brightness: i32,
|
||||
constrast: i32,
|
||||
hue: i32,
|
||||
saturation: i32,
|
||||
) -> Result<Self, String> {
|
||||
Ok(IT9910FS {
|
||||
width: width,
|
||||
@@ -96,7 +103,11 @@ impl IT9910FS {
|
||||
bitrate: bitrate,
|
||||
audio_src: audio_src,
|
||||
video_src: video_src,
|
||||
//buffer_max_len: buffer_max_len,
|
||||
brightness: brightness,
|
||||
constrast: constrast,
|
||||
hue: hue,
|
||||
saturation: saturation,
|
||||
|
||||
data_receiver: None,
|
||||
terminate_sender: None,
|
||||
thread_ended_receiver: None,
|
||||
@@ -178,6 +189,10 @@ impl Filesystem for IT9910FS {
|
||||
let bitrate = self.bitrate;
|
||||
let audio_src = self.audio_src;
|
||||
let video_src = self.video_src;
|
||||
let brightness = self.brightness;
|
||||
let contrast = self.constrast;
|
||||
let hue = self.hue;
|
||||
let saturation = self.saturation;
|
||||
|
||||
thread::spawn(move || {
|
||||
let thread_id = thread_native_id();
|
||||
@@ -200,6 +215,10 @@ impl Filesystem for IT9910FS {
|
||||
bitrate,
|
||||
audio_src,
|
||||
video_src,
|
||||
brightness,
|
||||
contrast,
|
||||
hue,
|
||||
saturation,
|
||||
) {
|
||||
eprintln!("IT9910 thread error: {}", err);
|
||||
}
|
||||
@@ -341,6 +360,10 @@ pub fn run(
|
||||
bitrate: u32,
|
||||
audio_src: u32,
|
||||
video_src: u32,
|
||||
brightness: i32,
|
||||
constrast: i32,
|
||||
hue: i32,
|
||||
saturation: i32,
|
||||
) -> Result<(), String> {
|
||||
let mut it_driver = match IT9910Driver::open() {
|
||||
Ok(it_driver) => it_driver,
|
||||
@@ -349,7 +372,9 @@ pub fn run(
|
||||
}
|
||||
};
|
||||
|
||||
if let Err(err) = it_driver.start(width, height, fps, bitrate, audio_src, video_src) {
|
||||
if let Err(err) = it_driver.start(
|
||||
width, height, fps, bitrate, audio_src, video_src, brightness, constrast, hue, saturation,
|
||||
) {
|
||||
return Err(format!("Unable to start IT9910 device: {}", err));
|
||||
}
|
||||
|
||||
@@ -431,13 +456,30 @@ fn main() -> Result<(), String> {
|
||||
.long("video_src")
|
||||
.default_value("4"),
|
||||
)
|
||||
/*.arg(
|
||||
Arg::with_name("buffer_len")
|
||||
.help("buffer size in MB")
|
||||
.short("l")
|
||||
.long("buffer_len")
|
||||
.arg(
|
||||
Arg::with_name("brightness")
|
||||
.help("brightness, range: -100..100")
|
||||
.long("brightness")
|
||||
.default_value("0"),
|
||||
)
|
||||
.arg(
|
||||
Arg::with_name("contrast")
|
||||
.help("contrast, range: 0..1000")
|
||||
.long("contrast")
|
||||
.default_value("100"),
|
||||
)*/
|
||||
)
|
||||
.arg(
|
||||
Arg::with_name("hue")
|
||||
.help("hue, range: 0..360")
|
||||
.long("hue")
|
||||
.default_value("0"),
|
||||
)
|
||||
.arg(
|
||||
Arg::with_name("saturation")
|
||||
.help("saturation, range: 0..1000")
|
||||
.long("saturation")
|
||||
.default_value("100"),
|
||||
)
|
||||
.arg(
|
||||
Arg::with_name("dir")
|
||||
.help("mountpoint for video filesystem")
|
||||
@@ -452,7 +494,10 @@ fn main() -> Result<(), String> {
|
||||
let bitrate = value_t!(matches, "bitrate", u32).unwrap_or(20000);
|
||||
let audio_src = value_t!(matches, "audio_src", u32).unwrap_or(2);
|
||||
let video_src = value_t!(matches, "video_src", u32).unwrap_or(4);
|
||||
//let buffer_len = value_t!(matches, "buffer_len", u32).unwrap_or(100);
|
||||
let brightness = value_t!(matches, "brightness", i32).unwrap_or(0);
|
||||
let contrast = value_t!(matches, "contrast", i32).unwrap_or(0);
|
||||
let hue = value_t!(matches, "hue", i32).unwrap_or(0);
|
||||
let saturation = value_t!(matches, "saturation", i32).unwrap_or(0);
|
||||
let mountpoint = matches.value_of("dir").unwrap();
|
||||
|
||||
println!("IT9910HD FuseFS.");
|
||||
@@ -461,7 +506,6 @@ fn main() -> Result<(), String> {
|
||||
width, height, fps, bitrate
|
||||
);
|
||||
println!("Audio Src: {}, video src: {}", audio_src, video_src);
|
||||
//println!("Buffer: {} MB", buffer_len);
|
||||
println!("--------");
|
||||
|
||||
let options = ["-o", "ro", "-o", "fsname=it9910fs"]
|
||||
@@ -470,7 +514,7 @@ fn main() -> Result<(), String> {
|
||||
.collect::<Vec<&OsStr>>();
|
||||
|
||||
let it9910fs = IT9910FS::new(
|
||||
width, height, fps, bitrate, audio_src, video_src, //buffer_len,
|
||||
width, height, fps, bitrate, audio_src, video_src, brightness, contrast, hue, saturation,
|
||||
)?;
|
||||
|
||||
fuse::mount(it9910fs, mountpoint, &options).unwrap();
|
||||
|
||||
Reference in New Issue
Block a user