Le 29/06/2022 à 23:49, Juan Antonio Zuloaga Mellino a écrit :
Hi. I've an ezcap295hd. It's an usb video grabber based on the IT9910
chipset manufactured by ITE Tech. Inc.
I wasn't able to find linux support for it. Is anybody working on it?
I did some reverse engineering on my IT9910 based video grabber, a
generic model labeled "Awisio Game Capture v5".
I wrote a ugly Rust program to test my findings:
https://github.com/Bonstra/it9910-stream-example
For my device, it is enough to output the MPEG TS stream to stdout, and
pipe it into mpv.
It is possible that it won't work for other IT9910 devices because of
differences in the firmware.
There is still some work to do to understand the meaning of various data
blobs used as-is in the test program.
I also attempted to list all the USB properties I could find. I attached
that tentative list to this email. Stay away from the firmware update
properties :)
I don't plan on writing a Linux driver, at least not until I understand
the inner workings of that device.
I hope the resources I provided will help.
Regards
--
Hugo
= USB property requests =
Offset Name Size Description
0x00 len 4 Length of full property request
0x04 opcode 2 Operation code
0x06 sig 2 0x9910
0x08 operation 4 0x1 = GET, 0x2 = SET
0x0c seq 2 Sequence number
0x0e sig 2 0x9910
0x10 data len-16 Data
== Opcodes ==
=== Reboot (0x1) ===
Length: 0x10
Supported operations:
GET (1): Unknown
SET (2): Yes
=== Get/Set state (0x2) ===
Length: 0x14
Supported operations:
GET (1): Unknown
SET (2): Yes
Offset Name Size Description
0x10 ? 4 ?
=== Get/Set source (0x3) ===
Length: 0x18
Supported operations:
GET (1): Yes
SET (2): Yes
Offset Name Size Description
0x10 audio_source 4 Audio source:
0: Digital 1
1: Digital 2 (reserved)
2: Analog
0x14 video_source 4 Video source:
0: Digital
1: Analog YrYbY
2: Analog composite
3: Analog S/Video
4: Analog RGB
=== Set firmware size (0x5) ===
Length: 0x14
Supported operations:
GET (1): Unknown
SET (2): Yes
Offset Name Size Description
0x10 firmware_size 4 Firmware size, I guess
=== Set firmware data (0x6) ===
Length: 0x10 min, 0x200 max
Supported operations:
GET (1): Unknown
SET (2): Yes
Offset Name Size Description
0x10 firmware_data 0 to 0x1f0 Firmware data
=== Get firmware status (0x8) ===
Length: 0x14
Supported operations:
GET (1): Yes
SET (2): Unlikely
Offset Name Size Description
0x10 firmware_status 4 Firmware status, I guess
=== Get profile (0xa) ===
Length: 0x10, 0x14
Supported operations:
GET (1): Yes
SET (2): ?
Request (0x10 bytes):
Offset Name Size Description
Response (0x14 bytes):
Offset Name Size Description
0x10 profile 0x4 Device profile (features, etc...)
BIT(1) ?
BIT(0) ?
=== Get/Set brightness (0x101) ===
Length: 0x18
Supported operations:
GET (1): Yes
SET (2): Yes
Offset Name Size Description
0x10 unk 4 0
0x14 brightness 4 Brightness value (0-100)
=== Get/Set contrast (0x102) ===
Length: 0x18
Supported operations:
GET (1): Yes
SET (2): Yes
Offset Name Size Description
0x10 unk 4 0
0x14 contrast 4 Contrast value (0-100)
=== Get/Set hue (0x103) ===
Length: 0x18
Supported operations:
GET (1): Yes
SET (2): Yes
Offset Name Size Description
0x10 unk 4 0
0x14 hue 4 Hue value (0-100)
=== Get/Set saturation (0x104) ===
Length: 0x18
Supported operations:
GET (1): Yes
SET (2): Yes
Offset Name Size Description
0x10 unk 4 0
0x14 hue 4 Saturation value (0-100)
=== ? (0x200) ===
Length: 0x14
Supported operations:
GET (1): ?
SET (2): Yes
Offset Name Size Description
=== Get video compression info (0x201) ===
Length: 0x1c
Supported operations:
GET (1): Yes
SET (2): Unknown
Offset Name Size Description
0x0 unk 4 Stream index?
0x4 key_framerate 4 DefaultKeyFrameRate (DefaultPFrameRate is DefaultKeyFrameRate - 1)
0x8 quality 4 DefaultQuality
=== Get video compression keyframe rate (0x202) ===
Length: 0x18
Supported operations:
GET (1): Yes
SET (2): Yes
Offset Name Size Description
0x0 stream_idx 4 Stream index
0x4 keyframe_rate 4 Keyframe rate
=== Get video compression quality (0x203) ===
Length: 0x18
Supported operations:
GET (1): Yes
SET (2): Yes
Offset Name Size Description
0x0 stream_idx 4 Stream index
0x4 quality 4 Quality value from 0 (worst) to 10000 (best)
=== ? (0x2f0) ===
Length: 0x9e
Supported operations:
GET (1): Yes
SET (2): ?
Offset Name Size Description
=== Get/Set PC grabber (0xe001) ===
Length: 0x1c,0x4c,0x200
Supported operations:
GET (1): Yes
SET (2): Yes
Offset Name Size Description
=== Get timestamp? (0xf001) ===
Get elapsed milliseconds since last get timestamp request.
Length: 0x14
Supported operations:
GET (1): Yes
SET (2): ?
Offset Name Size Description
0x00 millis 4 Number of elapsed milliseconds since last call