SM-A325N UVC streaming fails on both ISOC and Bulk paths
Summary
On Samsung SM-A325N, UVC descriptor parsing and Probe/Commit negotiation succeed, but UVC streaming fails at the transport stage. The failure is reproducible with both ISOC-only UVC cameras and Bulk UVC cameras, but the failure mode differs by transfer type.
The same cameras and modes work on devices such as SM-G977N, SM-G960N, and SM-S916N.
Affected Device
| Field |
Value |
| Model |
SM-A325N |
| Device family |
Samsung Galaxy A32 series |
| Android |
Android 13 |
| Suspected area |
SM-A325N USB host controller behavior or Samsung/MediaTek vendor kernel USB stack |
Devices Verified with the Same Camera and Modes
| Model |
Device |
SoC |
SoC vendor |
Android range |
Representative kernel / USB stack |
USB host controller family |
UVC result |
| SM-S916N |
Samsung Galaxy S23+ |
Snapdragon 8 Gen 2 for Galaxy |
Qualcomm |
Android 13~16 |
Linux 5.10+ / Qualcomm vendor kernel |
Qualcomm + DWC3 |
UVC streaming OK |
| SM-G977N |
Samsung Galaxy S10 5G |
Exynos 9820 |
Samsung Electronics |
Android 9~12 |
Linux 4.14 / Samsung vendor kernel |
Exynos + DWC3 |
UVC streaming OK |
| SM-G960N |
Samsung Galaxy S9 |
Exynos 9810 |
Samsung Electronics |
Android 8~10 |
Linux 4.9 / Samsung vendor kernel |
Exynos + DWC3 |
UVC streaming OK |
ISOC Failure Pattern
For an ISOC UVC camera, Android descriptor parsing shows only an ISOC VideoStreaming endpoint:
interface config=0 index=1 id=1 alt=0 class=14 subclass=2 protocol=0 endpoints=0
interface config=0 index=2 id=1 alt=1 class=14 subclass=2 protocol=0 endpoints=1
endpoint interface=1 alt=1 index=0 address=0x85 type=ISOC direction=IN maxPacket=1024 interval=1
The native stream starts and callbacks arrive, but MJPEG payloads are frequently incomplete or malformed:
rejecting invalid MJPEG frame callback=... width=1280 height=720 bytes=...
Additional temporary ISOC payload diagnostics showed that frames were often assembled from incomplete UVC payloads. Observed patterns included:
- FID changes while the previous frame buffer still had data, but no EOF had been observed yet.
- EOF-marked frames whose MJPEG data still lacked a valid EOI marker (
FF D9).
- Payloads beginning with zero-filled bytes such as
00 00 00 00, where a valid UVC payload header was expected.
- Invalid MJPEG frames that started with a valid SOI marker (
FF D8) but ended without an EOI marker (FF D9).
These patterns suggest that ISOC transfers were reaching user space, but UVC payload boundaries or frame contents were not reliable on SM-A325N.
Bulk Failure Pattern
For a Bulk UVC camera, Android descriptor parsing shows a VideoStreaming Bulk IN endpoint:
interface config=0 index=1 id=1 alt=0 class=14 subclass=2 protocol=0 endpoints=1
endpoint interface=1 alt=0 index=0 address=0x83 type=BULK direction=IN maxPacket=512 interval=0
using bulk endpoint=0x83 payload=102656 transfer_bufs=100
transfer callback status=0 actual_length=8972 iso_packets=0 running=1
BULK_PAYLOAD actual_length=8972 running=1 endpoint_packets=0
PAYLOAD payload_len=8972 header_len=12 data_len=8960 header_info=0x0c fid=0 eof=0 got_bytes=0 maxFrame=614400
transfer callback status=0 actual_length=12 iso_packets=0 running=1
BULK_PAYLOAD actual_length=12 running=1 endpoint_packets=0
PAYLOAD payload_len=12 header_len=12 data_len=0 header_info=0x0e fid=0 eof=1 got_bytes=8960 maxFrame=614400
For the same mode, Bulk transfers are submitted successfully, but no Bulk IN data arrives before timeout:
using bulk endpoint=0x83 payload=102656 transfer_bufs=100
libusb_submit_transfer ok transfer_id=0
...
transfer callback status=3 actual_length=0 iso_packets=0 running=0
status=3 is LIBUSB_TRANSFER_TIMED_OUT.
Temporary Negotiation Comparison
During a temporary negotiation diagnostic build, MJPEG 640x480 @ 30fps negotiated the same effective stream control values on SM-G977N and SM-A325N.
Working case (SM-G977N):
probe after GET_CUR if=1 format=1 frame=14 interval=333333 maxFrame=614400 maxPayload=102656 hint=0x0000 quality=0 delay=0 clock=288000000 framing=0x00
commit stored if=1 format=1 frame=14 interval=333333 maxFrame=614400 maxPayload=102656 hint=0x0000 quality=0 delay=0 clock=288000000 framing=0x00
using bulk endpoint=0x83 payload=102656 transfer_bufs=100
Affected case (SM-A325N):
probe after GET_CUR if=1 format=1 frame=14 interval=333333 maxFrame=614400 maxPayload=102656 hint=0x0000 quality=0 delay=0 clock=288000000 framing=0x00
commit stored if=1 format=1 frame=14 interval=333333 maxFrame=614400 maxPayload=102656 hint=0x0000 quality=0 delay=0 clock=288000000 framing=0x00
using bulk endpoint=0x83 payload=102656 transfer_bufs=100
Despite identical negotiation and endpoint selection, SM-A325N does not receive Bulk payload completions.
Current Conclusion
SM-A325N appears to have a UVC streaming compatibility issue at the USB host controller or Samsung/MediaTek vendor kernel USB stack. The issue is observed through the Android libusb/libuvc transport path, but the same libusb/libuvc code path works on other devices tested with the same camera and modes.
The observed behavior is not limited to one transfer type:
- ISOC UVC: stream starts and payloads arrive, but payloads are frequently malformed or incomplete, causing invalid MJPEG frames.
- Bulk UVC: descriptor, Probe/Commit, endpoint selection, and transfer submission succeed, but Bulk IN data completion does not arrive and transfers time out.
This suggests the problem is below the application decode path and likely below libuvc frame conversion. The issue appears after successful descriptor parsing and stream negotiation, at the point where USB transport data should be delivered to user space.
SM-A325N UVC streaming fails on both ISOC and Bulk paths
Summary
On Samsung SM-A325N, UVC descriptor parsing and Probe/Commit negotiation succeed, but UVC streaming fails at the transport stage. The failure is reproducible with both ISOC-only UVC cameras and Bulk UVC cameras, but the failure mode differs by transfer type.
The same cameras and modes work on devices such as SM-G977N, SM-G960N, and SM-S916N.
Affected Device
Devices Verified with the Same Camera and Modes
ISOC Failure Pattern
For an ISOC UVC camera, Android descriptor parsing shows only an ISOC VideoStreaming endpoint:
The native stream starts and callbacks arrive, but MJPEG payloads are frequently incomplete or malformed:
Additional temporary ISOC payload diagnostics showed that frames were often assembled from incomplete UVC payloads. Observed patterns included:
FF D9).00 00 00 00, where a valid UVC payload header was expected.FF D8) but ended without an EOI marker (FF D9).These patterns suggest that ISOC transfers were reaching user space, but UVC payload boundaries or frame contents were not reliable on SM-A325N.
Bulk Failure Pattern
For a Bulk UVC camera, Android descriptor parsing shows a VideoStreaming Bulk IN endpoint:
For the same mode, Bulk transfers are submitted successfully, but no Bulk IN data arrives before timeout:
status=3isLIBUSB_TRANSFER_TIMED_OUT.Temporary Negotiation Comparison
During a temporary negotiation diagnostic build,
MJPEG 640x480 @ 30fpsnegotiated the same effective stream control values on SM-G977N and SM-A325N.Working case (SM-G977N):
Affected case (SM-A325N):
Despite identical negotiation and endpoint selection, SM-A325N does not receive Bulk payload completions.
Current Conclusion
SM-A325N appears to have a UVC streaming compatibility issue at the USB host controller or Samsung/MediaTek vendor kernel USB stack. The issue is observed through the Android libusb/libuvc transport path, but the same libusb/libuvc code path works on other devices tested with the same camera and modes.
The observed behavior is not limited to one transfer type:
This suggests the problem is below the application decode path and likely below libuvc frame conversion. The issue appears after successful descriptor parsing and stream negotiation, at the point where USB transport data should be delivered to user space.