Re: Fwd: Help supporting IT9910 chipset

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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


[Index of Archives]     [Linux Input]     [Video for Linux]     [Gstreamer Embedded]     [Mplayer Users]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]

  Powered by Linux