[Cin] ms2130 HDMI-USB3 UHD capture card - not quite as expected?
Terje J. Hanssen
terjejhanssen at gmail.com
Thu Mar 9 18:36:05 CET 2023
Den 09.03.2023 09:13, skrev Andrew Randrianasulu:
>
>
> чт, 9 мар. 2023 г., 11:07 Terje J. Hanssen <terjejhanssen at gmail.com>:
>
>
>
> Den 25.02.2023 21:30, skrev Andrew Randrianasulu:
>>
>>
>> сб, 25 февр. 2023 г., 23:25 Terje J. Hanssen
>> <terjejhanssen at gmail.com>:
>>
>>
>>
>> Den 25.02.2023 19:27, skrev Andrew Randrianasulu:
>>>
>>>
>>> сб, 25 февр. 2023 г., 21:19 Terje J. Hanssen via Cin
>>> <cin at lists.cinelerra-gg.org>:
>>>
>>> So I have received the ms2130 HDMI-USB3 capture card.
>>> The A/D AV converter & SV-HDMI/adapter is not received
>>> so far, and I have not avialable my HDV camcorder (on
>>> service) to output HDMI video stream with.
>>>
>>> Yet, I have initially run some verification tests on the
>>> ms2130 HDMI-USB3 UHD capture card alone, for what they
>>> are worth.
>>>
>>> As "UHD" (and/or USB3) is mostly generic used to
>>> identify this card (while ms2130 almost not), the some
>>> output is piped and stripped with grep "UHD".
>>>
>>> ----------------
>>>
>>> dmesg | grep UHD
>>> [ 2.798210] usb 2-5: Product: USB3.0 UHD
>>> [ 2.827772] hid-generic 0003:345F:2130.0005:
>>> hiddev97,hidraw4: USB HID v1.10 Device [MACROSILICON
>>> USB3.0 UHD] on usb-0000:00:14.0-5/input4
>>> [ 4.805554] usb 2-5: Found UVC 1.00 device USB3.0
>>> UHD (345f:2130)
>>>
>>>
>>> udevadm info /dev/video* | egrep
>>> 'DEVNAME|ID_V4L_PRODUCT'
>>> E: DEVNAME=/dev/video0
>>> E: ID_V4L_PRODUCT=USB 2.0 Camera: HD 720P Webcam
>>> E: DEVNAME=/dev/video1
>>> E: ID_V4L_PRODUCT=USB 2.0 Camera: HD 720P Webcam
>>> E: DEVNAME=/dev/video2
>>> E: ID_V4L_PRODUCT=USB3.0 UHD: USB3.0 UHD
>>> E: DEVNAME=/dev/video3
>>> E: ID_V4L_PRODUCT=USB3.0 UHD: USB3.0 UHD
>>>
>>>
>>> udevadm info /dev/video* | egrep UHD
>>> S:
>>> v4l/by-id/usb-MACROSILICON_USB3.0_UHD_20210623-video-index0
>>> E: ID_V4L_PRODUCT=USB3.0 UHD: USB3.0 UHD
>>> E: ID_MODEL=USB3.0_UHD
>>> E: ID_MODEL_ENC=USB3.0\x20UHD
>>> E: ID_SERIAL=MACROSILICON_USB3.0_UHD_20210623
>>> E:
>>> DEVLINKS=/dev/v4l/by-id/usb-MACROSILICON_USB3.0_UHD_20210623-video-index0
>>> /dev/v4l/by-path/pci-0000:00:14.0-usb-0:5:1.0-video-index0
>>> S:
>>> v4l/by-id/usb-MACROSILICON_USB3.0_UHD_20210623-video-index1
>>> E: ID_V4L_PRODUCT=USB3.0 UHD: USB3.0 UHD
>>> E: ID_MODEL=USB3.0_UHD
>>> E: ID_MODEL_ENC=USB3.0\x20UHD
>>> E: ID_SERIAL=MACROSILICON_USB3.0_UHD_20210623
>>> E:
>>> DEVLINKS=/dev/v4l/by-path/pci-0000:00:14.0-usb-0:5:1.0-video-index1
>>> /dev/v4l/by-id/usb-MACROSILICON_USB3.0_UHD_20210623-video-index1
>>>
>>>
>>> lsusb | grep UHD
>>> Bus 002 Device 004: ID 345f:2130 MACROSILICON USB3.0 UHD
>>>
>>> cat /proc/asound/cards | grep UHD
>>> 2 [UHD ]: USB-Audio - USB3.0 UHD
>>> MACROSILICON USB3.0 UHD at usb-0000:00:14.0-5, super
>>> speed
>>>
>>> ll /dev/video*
>>> crw-rw----+ 1 root video 81, 0 feb. 25 14:15
>>> /dev/video0
>>> crw-rw----+ 1 root video 81, 1 feb. 25 14:15
>>> /dev/video1
>>> crw-rw----+ 1 root video 81, 2 feb. 25 14:15
>>> /dev/video2
>>> crw-rw----+ 1 root video 81, 3 feb. 25 14:15
>>> /dev/video3
>>>
>>> ---------------------
>>>
>>> v4l2-ctl --list-devices
>>> USB 2.0 Camera: HD 720P Webcam (usb-0000:00:14.0-11):
>>> /dev/video0
>>> /dev/video1
>>>
>>> USB3.0 UHD: USB3.0 UHD (usb-0000:00:14.0-5):
>>> /dev/video2
>>> /dev/video3
>>>
>>> -----------
>>>
>>> v4l2-ctl --list-formats-ext
>>> ioctl: VIDIOC_ENUM_FMT
>>> Index : 0
>>> Type : Video Capture
>>> Pixel Format: 'YUYV'
>>> Name : YUYV 4:2:2
>>> Size: Discrete 640x480
>>> Interval: Discrete 0.030s (33.000 fps)
>>> Interval: Discrete 0.067s (15.000 fps)
>>> Size: Discrete 1280x720
>>> Interval: Discrete 0.100s (10.000 fps)
>>> Size: Discrete 640x360
>>> Interval: Discrete 0.030s (33.000 fps)
>>> Interval: Discrete 0.067s (15.000 fps)
>>> ................
>>> Index : 1
>>> Type : Video Capture
>>> Pixel Format: 'MJPG' (compressed)
>>> Name : Motion-JPEG
>>> Size: Discrete 640x480
>>> Interval: Discrete 0.030s (33.000 fps)
>>> Interval: Discrete 0.067s (15.000 fps)
>>> Size: Discrete 1280x720
>>> Interval: Discrete 0.030s (33.000 fps)
>>> Interval: Discrete 0.067s (15.000 fps)
>>> Size: Discrete 640x360
>>> Interval: Discrete 0.030s (33.000 fps)
>>> Interval: Discrete 0.067s (15.000 fps)
>>> ......................
>>>
>>>
>>>
>>> As the above doesn't list any 1920x1080 resolution, I
>>> wonder if it list just format for the usb2 webcam and
>>> not for ms2130 capture card?
>>>
>>>
>>>
>>> Yeah, looking at how webcam listed first it makes sense. Try
>>> to instruct v4l2-ctl to use another device? (my guess it
>>> will be "-d" switch but I can be wrong! Manyal or "--help"
>>> output is better guide ..)
>>
>> Be aware that "v4l2-ctl --list-formats-ext" was the same (I
>> think) as used for the previous ms2109 Hama card, and I
>> thought formats for all connected devices were listed then.
>> Obviously there is a default (or first device) used, when no
>> device is specified, so thank you for the tip.
>>
>> By help of google and "superuser" I found out that actually
>> both "-D -d /dev/video2" are needed to get both frame sizes
>> and fps listed:
>>
>> v4l2-ctl -D -d /dev/video2 --list-formats-ext
>> Driver Info (not using libv4l2):
>> Driver name : uvcvideo
>> Card type : USB3.0 UHD: USB3.0 UHD
>> Bus info : usb-0000:00:14.0-5
>> Driver version: 5.14.21
>> Capabilities : 0x84A00001
>> Video Capture
>> Metadata Capture
>> Streaming
>> Extended Pix Format
>> Device Capabilities
>> Device Caps : 0x04200001
>> Video Capture
>> Streaming
>> Extended Pix Format
>> ioctl: VIDIOC_ENUM_FMT
>> Index : 0
>> Type : Video Capture
>> Pixel Format: 'YUYV'
>> Name : YUYV 4:2:2
>> Size: Discrete 1920x1080
>> Interval: Discrete 0.017s (60.000
>> fps)
>> Interval: Discrete 0.020s (50.000
>> fps)
>> Interval: Discrete 0.033s (30.000
>> fps)
>> Interval: Discrete 0.050s (20.000
>> fps)
>> Interval: Discrete 0.100s (10.000
>> fps)
>> ............
>>
>> Size: Discrete 1280x720
>> Interval: Discrete 0.017s (60.000
>> fps)
>> Interval: Discrete 0.020s (50.000
>> fps)
>> Interval: Discrete 0.033s (30.000
>> fps)
>> Interval: Discrete 0.050s (20.000
>> fps)
>> Interval: Discrete 0.100s (10.000
>> fps)
>> ...............
>>
>> Size: Discrete 720x576
>> Interval: Discrete 0.017s (60.000
>> fps)
>> Interval: Discrete 0.020s (50.000
>> fps)
>> Interval: Discrete 0.033s (30.000
>> fps)
>> Interval: Discrete 0.050s (20.000
>> fps)
>> Interval: Discrete 0.100s (10.000
>> fps)
>> ................
>>
>>
>>
>>>
>>> -------------------------------------
>>>
>>> Try also ffplay to list supported formats for a
>>> video4linux2 device:
>>>
>>> ffplay -hide_banner -f v4l2 -list_formats all
>>> /dev/video2
>>> [video4linux2,v4l2 @ 0x7f8280000cc0] Raw :
>>> yuyv422 : YUYV 4:2:2 : 1920x1080 1600x1200
>>> 1360x768 1280x1024 1280x960 1280x720 1024x768
>>> 800x600 720x576 720x480 640x480
>>> /dev/video2: Immediate exit requested
>>> nan : 0.000 fd= 0 aq= 0KB vq= 0KB sq= 0B
>>> f=0/0
>>>
>>>
>>>
>>> this one at least list all formats but not their framerates ...
>>>
>>>
>>>
>>>
>>> ffplay -hide_banner -f v4l2 -list_formats all
>>> /dev/video3
>>> [video4linux2,v4l2 @ 0x7f3bd0000cc0]
>>> ioctl(VIDIOC_G_INPUT): Inappropriate ioctl for device
>>> /dev/video3: Inappropriate ioctl for device
>>>
>>>
>>> -------------
>>>
>>> I am not sure about what the following command really
>>> does, but it was described to
>>>
>>> "Grab and record the input of a video4linux2 device,
>>> leave the frame rate and size as previously set:"
>>>
>>> ffmpeg -hide_banner -f v4l2 -input_format yuyv422 -i
>>> /dev/video2 out_test.mpeg
>>>
>>> [video4linux2,v4l2 @ 0x55c22212cfc0] Dequeued v4l2
>>> buffer contains corrupted data (0 bytes).
>>> Input #0, video4linux2,v4l2, from '/dev/video2':
>>> Duration: N/A, start: 0.000000, bitrate: 1990656 kb/s
>>> Stream #0:0: Video: rawvideo (YUY2 / 0x32595559),
>>> yuyv422, 1920x1080, 1990656 kb/s, 60 fps, 60 tbr,
>>> 1000k tbn
>>> Stream mapping:
>>> Stream #0:0 -> #0:0 (rawvideo (native) ->
>>> mpeg1video (native))
>>> Press [q] to stop, [?] for help
>>> [video4linux2,v4l2 @ 0x55c22212cfc0] Dequeued v4l2
>>> buffer contains corrupted data (0 bytes).
>>> Last message repeated 30 times
>>> [mpeg @ 0x55c22214f800] VBV buffer size not set,
>>> using default size of 230KB
>>> If you want the mpeg file to be compliant to some
>>> specification
>>> Like DVD, VCD or others, make sure you set the
>>> correct buffer size
>>> Output #0, mpeg, to 'out_test.mpeg':
>>> Metadata:
>>> encoder : Lavf59.27.100
>>> Stream #0:0: Video: mpeg1video, yuv420p(tv,
>>> progressive), 1920x1080, q=2-31, 200 kb/s, 60 fps,
>>> 90k tbn
>>> Metadata:
>>> encoder : Lavc59.37.100 mpeg1video
>>> Side data:
>>> cpb: bitrate max/min/avg: 0/0/200000 buffer
>>> size: 0 vbv_delay: N/A
>>> frame= 1628 fps= 60 q=2.0 Lsize= 4702kB
>>> time=03:13:19.68 bitrate= 3.3kbits/s speed= 427x
>>> video:4675kB audio:0kB subtitle:0kB other
>>> streams:0kB global headers:0kB muxing overhead:
>>> 0.572162%
>>> Exiting normally, received signal 2.
>>>
>>>
>>>
>>> try 30 fps instead of 60?
>>
>> Like this?
>> But shouldn't a 422 and not a 420 output format be created?
>>
>>
>> it seems in some cases ffmpeg not geared towards preserving most
>> information, just picks up most commonly defined/first pixel
>> format. Try mpeg2video as output codec, and/or specify pixel
>> format (pix_fmt) more explicitly before output's filename?
>
Could you possibly examplify the latter?
If things work as hoped in another thread, I want to test if analog
Hi8/S-video directly to digital DVD-Video.mpg and SD-BD-Video.mpg is
possible.
That is bypass the extra step to DV format conversion and compression.
>> Also you can try 'copy' video codec and meet absolutely enormous
>> test file.
>>
>>
>> ffmpeg -hide_banner -f v4l2 -input_format yuyv422
>> -video_size 1920x1080 -framerate 30 -t 10 -i /dev/video2
>> out_1920x1024.mpeg
>> [video4linux2,v4l2 @ 0x564d7d7c3040] Dequeued v4l2 buffer
>> contains corrupted data (0 bytes).
>> Input #0, video4linux2,v4l2, from '/dev/video2':
>> Duration: N/A, start: 0.000000, bitrate: 995328 kb/s
>> Stream #0:0: Video: rawvideo (YUY2 / 0x32595559),
>> yuyv422, 1920x1080, 995328 kb/s, 30 fps, 30 tbr, 1000k tbn
>> Stream mapping:
>> Stream #0:0 -> #0:0 (rawvideo (native) -> mpeg1video
>> (native))
>> Press [q] to stop, [?] for help
>> [video4linux2,v4l2 @ 0x564d7d7c3040] Dequeued v4l2 buffer
>> contains corrupted data (0 bytes).
>> Last message repeated 30 times
>> [mpeg @ 0x564d7d7e5a80] VBV buffer size not set, using
>> default size of 230KB
>> If you want the mpeg file to be compliant to some
>> specification
>> Like DVD, VCD or others, make sure you set the correct
>> buffer size
>> Output #0, mpeg, to 'out_1920x1024.mpeg':
>> Metadata:
>> encoder : Lavf59.27.100
>> Stream #0:0: Video: mpeg1video, yuv420p(tv,
>> progressive), 1920x1080, q=2-31, 200 kb/s, 30 fps, 90k tbn
>> Metadata:
>> encoder : Lavc59.37.100 mpeg1video
>> Side data:
>> cpb: bitrate max/min/avg: 0/0/200000 buffer size: 0
>> vbv_delay: N/A
>> frame= 301 fps= 30 q=1.6 Lsize= 896kB
>> time=06:56:05.30 bitrate= 0.3kbits/s speed=2.47e+03x
>> video:890kB audio:0kB subtitle:0kB other streams:0kB
>> global headers:0kB muxing overhead: 0.710403%
>>
>> -----------
>> ffprobe -hide_banner out_1920x1024.mpeg
>> Input #0, mpeg, from 'out_1920x1024.mpeg':
>> Duration: 00:00:10.03, start: 24955.333333, bitrate:
>> 731 kb/s
>> Stream #0:0[0x1e0]: Video: mpeg1video, yuv420p(tv),
>> 1920x1080 [SAR 1:1 DAR 16:9], 104857 kb/s, 30 fps, 30
>> tbr, 90k tbn
>>
>> ------------
>> mediainfo out_1920x1024.mpeg
>> General
>> Complete name : out_1920x1024.mpeg
>> Format : MPEG-PS
>> File size : 896 KiB
>> Duration : 10 s 33 ms
>> Overall bit rate mode : Variable
>> Overall bit rate : 732 kb/s
>>
>> Video
>> ID : 224 (0xE0)
>> Format : MPEG Video
>> Format version : Version 1
>> Format settings, BVOP : No
>> Format settings, Matrix : Default
>> Format settings, GOP : N=12
>> Duration : 10 s 33 ms
>> Bit rate mode : Variable
>> Bit rate : 717 kb/s
>> Width : 1 920 pixels
>> Height : 1 080 pixels
>> Display aspect ratio : 16:9
>> Frame rate : 30.000 FPS
>> Color space : YUV
>> Chroma subsampling : 4:2:0
>> Bit depth : 8 bits
>> Scan type : Progressive
>> Compression mode : Lossy
>> Bits/(Pixel*Frame) : 0.012
>> Time code of first frame : 00:00:00:00
>> Time code source : Group of
>> pictures header
>> GOP, Open/Closed : Open
>> GOP, Open/Closed of first frame : Closed
>> Stream size : 878 KiB (98%)
>>
>
> Alsa identifier for ms2130?
>
> I'm ready to test with the analog camcorder connectedto
> A/D-adapter + ms210 capture, but first a question about the Alsa
> hw: identifier for the latter.
>
> For the Hama ms2109 I used
> ffmpeg -f alsa -ac 2 -i hw:CARD=MS2109,DEV=0
>
> For ms2130 UHD card
>
> arecord -l
>
> **** List of CAPTURE Hardware Devices ****
> ......
> card 3: UHD [USB3.0 UHD], device 0: USB Audio [USB Audio]
> Subdevices: 1/1
> Subdevice #0: subdevice #0
>
> arecord -L
>
> .....
> sysdefault:CARD=UHD
> USB3.0 UHD, USB Audio
> Default Audio Device
> front:CARD=UHD,DEV=0
> USB3.0 UHD, USB Audio
> Front output / input
>
> Suggestion to
>
> ffmpeg -f alsa -ac 2 -i hw:?
> ===
>
>
> just omit hw alsa part (but not -f alsa) so it defaults to sysdefault ? :)
>
> also, try 3:0 (card 3, subdevice 0)
>
> also, may be try /dev/snd/pcm*c devices
1) Test to generate a fake alsa audio file with ms2130
ffmpeg -hide_banner -f alsa -t 30 out.wav
Output #0, alsa, to 'out.wav':
Output file #0 does not contain any stream
That is, it doesn't work without identifying ms2130 card#3, because
there ar sysdefaults for each card I expect
ffmpeg -hide_banner -f alsa -i hw:3 -t 30 out.wav
Guessed Channel Layout for Input Stream #0.0 : stereo
Input #0, alsa, from 'hw:3':
Duration: N/A, start: 1678372304.209057, bitrate: 1536 kb/s
Stream #0:0: Audio: pcm_s16le, 48000 Hz, stereo, s16, 1536 kb/s
Stream mapping:
Stream #0:0 -> #0:0 (pcm_s16le (native) -> pcm_s16le (native))
Press [q] to stop, [?] for help
Output #0, wav, to 'out.wav':
Metadata:
ISFT : Lavf59.27.100
Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 48000 Hz,
stereo, s16, 1536 kb/s
Metadata:
encoder : Lavc59.37.100 pcm_s16le
size= 5625kB time=00:00:30.00 bitrate=1536.1kbits/s speed= 1x
video:0kB audio:5625kB subtitle:0kB other streams:0kB global
headers:0kB muxing overhead: 0.001354%
ffprobe -hide_banner out.wav
Input #0, wav, from 'out.wav':
Metadata:
encoder : Lavf59.27.100
Duration: 00:00:30.00, bitrate: 1536 kb/s
Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 48000 Hz,
2 channels, s16, 1536 kb/s
------------
2) Tests to generate fake Video with actual frame sizes and alsa audio
packaged as ff1.mkv
25 fps (pal) is automatically changed to supported 30 fps - I just
wonder if that will matter drawback for future playback, editing etc?
ffmpeg -hide_banner -f alsa -ac 2 -i hw:3 -f v4l2 -framerate 25
-video_size 720x576 -i /dev/video2 -codec:v ffv1 -level 3 -codec:a
pcm_s16le -f matroska 720x576_ms2130_ffv1.mkv
ffprobe -hide_banner 720x576_ms2130_ffv1.mkv
Input #0, matroska,webm, from '720x576_ms2130_ffv1.mkv':
Metadata:
ENCODER : Lavf59.27.100
Duration: 00:00:13.07, start: 0.000000, bitrate: 1028 kb/s
Stream #0:0: Video: ffv1 (FFV1 / 0x31564646), yuv422p(tv,
progressive), 720x576, 30 fps, 30 tbr, 1k tbn
Metadata:
ENCODER : Lavc59.37.100 ffv1
DURATION : 00:00:13.066000000
Stream #0:1: Audio: pcm_s16le, 48000 Hz, 2 channels, s16, 1536 kb/s
Metadata:
ENCODER : Lavc59.37.100 pcm_s16le
DURATION : 00:00:13.036000000
---------------
ffmpeg -hide_banner -f alsa -ac 2 -i hw:3 -f v4l2 -framerate 25
-video_size 1280x720 -i /dev/video2 -codec:v ffv1 -level 3 -codec:a
pcm_s16le -f matroska 1280x720_ms2130_ffv1.mkv
ffprobe -hide_banner 1280x720_ms2130_ffv1.mkv
Input #0, matroska,webm, from '1280x720_ms2130_ffv1.mkv':
Metadata:
ENCODER : Lavf59.27.100
Duration: 08:51:10.37, start: 0.000000, bitrate: 0 kb/s
Stream #0:0: Video: ffv1 (FFV1 / 0x31564646), yuv422p(tv,
progressive), 1280x720, 30 fps, 30 tbr, 1k tbn
Metadata:
ENCODER : Lavc59.37.100 ffv1
DURATION : 08:51:10.366000000
Stream #0:1: Audio: pcm_s16le, 48000 Hz, 2 channels, s16, 1536 kb/s
Metadata:
ENCODER : Lavc59.37.100 pcm_s16le
DURATION : 00:00:11.924000000
-------------
ffmpeg -hide_banner -f alsa -ac 2 -i hw:3 -f v4l2 -framerate 25
-video_size 1920x1080 -i /dev/video2 -codec:v ffv1 -level 3 -codec:a
pcm_s16le -f matroska 1920x1080_ms2130_ffv1.mkv
ffprobe -hide_banner 1920x1080_ms2130_ffv1.mkv
[matroska,webm @ 0x56077d8b8f00] Could not find codec parameters for
stream 0 (Video: ffv1 (FFV1 / 0x31564646), none(tv, progressive),
1920x1080): unspecified pixel format
Consider increasing the value for the 'analyzeduration' (0) and
'probesize' (5000000) options
Input #0, matroska,webm, from '1920x1080_ms2130_ffv1.mkv':
Metadata:
ENCODER : Lavf59.27.100
Duration: 09:01:55.87, start: 0.000000, bitrate: 0 kb/s
Stream #0:0: Video: ffv1 (FFV1 / 0x31564646), none(tv,
progressive), 1920x1080, 30 fps, 30 tbr, 1k tbn
Metadata:
ENCODER : Lavc59.37.100 ffv1
DURATION : 09:01:55.866000000
Stream #0:1: Audio: pcm_s16le, 48000 Hz, 2 channels, s16, 1536 kb/s
Metadata:
ENCODER : Lavc59.37.100 pcm_s16le
DURATION : 00:00:10.232000000
----------------
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.cinelerra-gg.org/pipermail/cin/attachments/20230309/35d1db42/attachment-0001.htm>
More information about the Cin
mailing list