1
0
mirror of https://github.com/marek-g/it9910hd_fusefs.git synced 2026-05-06 02:11:10 +09:00

Add brightness / contrast / saturation / hue settings.

This commit is contained in:
Marek G
2019-08-23 22:46:12 +02:00
parent 3febff66ae
commit 62293cb45b
6 changed files with 112 additions and 17 deletions

View File

@@ -29,7 +29,7 @@ sudo udevadm control --reload
```bash ```bash
mkdir ./video 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 ## Play video

Binary file not shown.

View File

@@ -4,7 +4,7 @@
mkdir ./video 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 mpv -hwdec=auto ./video/hdmi_stream.ts

View File

@@ -2,7 +2,7 @@
mkdir ./video 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 mpv -hwdec=auto --record-file=./video.ts ./video/hdmi_stream.ts

View File

@@ -23,6 +23,10 @@ impl IT9910Driver {
bitrate: u32, bitrate: u32,
audio_src: u32, audio_src: u32,
video_src: u32, video_src: u32,
brightness: i32,
contrast: i32,
hue: i32,
saturation: i32,
) -> Result<(), String> { ) -> Result<(), String> {
//self.debug_query_time(1)?; //self.debug_query_time(1)?;
//self.set_pc_grabber(0)?; //self.set_pc_grabber(0)?;
@@ -53,7 +57,10 @@ impl IT9910Driver {
self.set_pc_grabber2(device_model, i, width, height, bitrate, fps)?; 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)?; self.set_state(2)?;
@@ -125,6 +132,50 @@ impl IT9910Driver {
Ok(()) 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> { fn set_pc_grabber(&mut self, start: i32) -> Result<(), String> {
let mut buf = [0u8; 16 + 4 * 3]; let mut buf = [0u8; 16 + 4 * 3];

View File

@@ -66,7 +66,11 @@ struct IT9910FS {
bitrate: u32, bitrate: u32,
audio_src: u32, audio_src: u32,
video_src: u32, video_src: u32,
//buffer_max_len: u32, brightness: i32,
constrast: i32,
hue: i32,
saturation: i32,
data_receiver: Option<Receiver<Vec<u8>>>, data_receiver: Option<Receiver<Vec<u8>>>,
terminate_sender: Option<Sender<()>>, terminate_sender: Option<Sender<()>>,
thread_ended_receiver: Option<Receiver<()>>, thread_ended_receiver: Option<Receiver<()>>,
@@ -87,7 +91,10 @@ impl IT9910FS {
bitrate: u32, bitrate: u32,
audio_src: u32, audio_src: u32,
video_src: u32, video_src: u32,
//buffer_max_len: u32, brightness: i32,
constrast: i32,
hue: i32,
saturation: i32,
) -> Result<Self, String> { ) -> Result<Self, String> {
Ok(IT9910FS { Ok(IT9910FS {
width: width, width: width,
@@ -96,7 +103,11 @@ impl IT9910FS {
bitrate: bitrate, bitrate: bitrate,
audio_src: audio_src, audio_src: audio_src,
video_src: video_src, video_src: video_src,
//buffer_max_len: buffer_max_len, brightness: brightness,
constrast: constrast,
hue: hue,
saturation: saturation,
data_receiver: None, data_receiver: None,
terminate_sender: None, terminate_sender: None,
thread_ended_receiver: None, thread_ended_receiver: None,
@@ -178,6 +189,10 @@ impl Filesystem for IT9910FS {
let bitrate = self.bitrate; let bitrate = self.bitrate;
let audio_src = self.audio_src; let audio_src = self.audio_src;
let video_src = self.video_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 || { thread::spawn(move || {
let thread_id = thread_native_id(); let thread_id = thread_native_id();
@@ -200,6 +215,10 @@ impl Filesystem for IT9910FS {
bitrate, bitrate,
audio_src, audio_src,
video_src, video_src,
brightness,
contrast,
hue,
saturation,
) { ) {
eprintln!("IT9910 thread error: {}", err); eprintln!("IT9910 thread error: {}", err);
} }
@@ -341,6 +360,10 @@ pub fn run(
bitrate: u32, bitrate: u32,
audio_src: u32, audio_src: u32,
video_src: u32, video_src: u32,
brightness: i32,
constrast: i32,
hue: i32,
saturation: i32,
) -> Result<(), String> { ) -> Result<(), String> {
let mut it_driver = match IT9910Driver::open() { let mut it_driver = match IT9910Driver::open() {
Ok(it_driver) => it_driver, 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)); return Err(format!("Unable to start IT9910 device: {}", err));
} }
@@ -431,13 +456,30 @@ fn main() -> Result<(), String> {
.long("video_src") .long("video_src")
.default_value("4"), .default_value("4"),
) )
/*.arg( .arg(
Arg::with_name("buffer_len") Arg::with_name("brightness")
.help("buffer size in MB") .help("brightness, range: -100..100")
.short("l") .long("brightness")
.long("buffer_len") .default_value("0"),
)
.arg(
Arg::with_name("contrast")
.help("contrast, range: 0..1000")
.long("contrast")
.default_value("100"), .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(
Arg::with_name("dir") Arg::with_name("dir")
.help("mountpoint for video filesystem") .help("mountpoint for video filesystem")
@@ -452,7 +494,10 @@ fn main() -> Result<(), String> {
let bitrate = value_t!(matches, "bitrate", u32).unwrap_or(20000); let bitrate = value_t!(matches, "bitrate", u32).unwrap_or(20000);
let audio_src = value_t!(matches, "audio_src", u32).unwrap_or(2); 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 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(); let mountpoint = matches.value_of("dir").unwrap();
println!("IT9910HD FuseFS."); println!("IT9910HD FuseFS.");
@@ -461,7 +506,6 @@ fn main() -> Result<(), String> {
width, height, fps, bitrate width, height, fps, bitrate
); );
println!("Audio Src: {}, video src: {}", audio_src, video_src); println!("Audio Src: {}, video src: {}", audio_src, video_src);
//println!("Buffer: {} MB", buffer_len);
println!("--------"); println!("--------");
let options = ["-o", "ro", "-o", "fsname=it9910fs"] let options = ["-o", "ro", "-o", "fsname=it9910fs"]
@@ -470,7 +514,7 @@ fn main() -> Result<(), String> {
.collect::<Vec<&OsStr>>(); .collect::<Vec<&OsStr>>();
let it9910fs = IT9910FS::new( 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(); fuse::mount(it9910fs, mountpoint, &options).unwrap();