* Fwd: Help supporting IT9910 chipset
[not found] <CALFMp8vtr3jjGApAoehc4vuS9mNprtGqrRd2+tSfCHbTTKj4og@mail.gmail.com>
@ 2022-06-29 21:49 ` Juan Antonio Zuloaga Mellino
2022-07-07 18:06 ` Hugo "Bonstra" Grostabussiat
0 siblings, 1 reply; 2+ messages in thread
From: Juan Antonio Zuloaga Mellino @ 2022-06-29 21:49 UTC (permalink / raw)
To: linux-media
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?
The chipset and device vendors were not helpful providing usb specs.
But I attempted to reverse the usb communication on windows and it
doesn't seem too complex.
It has 3 endpoints, I inferred that it works as follows:
ENDPOINT 1 Bulk OUT: Control Output
ENDPOINT 2 Bulk IN: Control Input
ENDPOINT 3 Bulk OUT: MPEG-TS Stream
So far I was able to extract and play the video stream from a pcapng.
I've some experience writing USB user space applications, but no
experience writing kernel modules nor with the video4linux api.
If nobody is working on this chipset I'd like to attempt to write a
driver for it.
Also, does anybody know of a module for a device similar to this one
that I could base my driver on? It would be of great help.
I'll leave lsusb output and attach a pcapng in case anybody wants to
check it out.
Regards.
Juan Zuloaga
/**********************************/
pcapng: https://drive.google.com/file/d/1SCSLbJPqrUZKC7QXBO_En-p6JBcy_nTG/view?usp=sharing
/*********************************/
Bus 003 Device 026: ID 048d:9910 Integrated Technology Express, Inc.
IT9910 chipset based grabber
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 2.00
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x048d Integrated Technology Express, Inc.
idProduct 0x9910 IT9910 chipset based grabber
bcdDevice 1.00
iManufacturer 1 ITE TECH. INC.
iProduct 2 ezcap HD Capture
iSerial 3
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 0x0027
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 500mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 3
bInterfaceClass 255 Vendor Specific Class
bInterfaceSubClass 0
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0200 1x 512 bytes
bInterval 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0200 1x 512 bytes
bInterval 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x83 EP 3 IN
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0200 1x 512 bytes
bInterval 0
Device Qualifier (for other device speed):
bLength 10
bDescriptorType 6
bcdUSB 2.00
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
bNumConfigurations 1
Device Status: 0x0000
(Bus Powered)
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: Fwd: Help supporting IT9910 chipset
2022-06-29 21:49 ` Fwd: Help supporting IT9910 chipset Juan Antonio Zuloaga Mellino
@ 2022-07-07 18:06 ` Hugo "Bonstra" Grostabussiat
0 siblings, 0 replies; 2+ messages in thread
From: Hugo "Bonstra" Grostabussiat @ 2022-07-07 18:06 UTC (permalink / raw)
To: Juan Antonio Zuloaga Mellino; +Cc: linux-media
[-- Attachment #1: Type: text/plain, Size: 1103 bytes --]
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
[-- Attachment #2: it9910-usb-props.txt --]
[-- Type: text/plain, Size: 3744 bytes --]
= 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
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2022-07-07 18:15 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
[not found] <CALFMp8vtr3jjGApAoehc4vuS9mNprtGqrRd2+tSfCHbTTKj4og@mail.gmail.com>
2022-06-29 21:49 ` Fwd: Help supporting IT9910 chipset Juan Antonio Zuloaga Mellino
2022-07-07 18:06 ` Hugo "Bonstra" Grostabussiat
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.