Files
root-virtualcam/post-fs-data.sh
T
jory 6bd51ff38b Fix v4l2loopback exclusive_caps, YU12->NV21 conversion, cameraserver crash
- Add exclusive_caps=0 to v4l2loopback insmod params to allow multiple
  simultaneous readers (HAL + verification capture)
- Fix YU12->NV21 pixel format conversion in V4L2 reader thread
- Fix YUYV->NV21 conversion as well
- Fix cameraserver crash by setting inputBuffer.streamId = -1
- Enable Hal Buffer Manager for requestStreamBuffers support
- Add JPEG_MAX_SIZE and JPEG_AVAILABLE_THUMBNAIL_SIZES metadata
- Add availableRequestKeys and availableResultKeys metadata
- Fix consumerUsage=0 for output streams (Camera3Device requirement)
- Fix metadata buffer overflow (2048->4096 bytes)
2026-05-14 21:19:41 +02:00

53 lines
2.1 KiB
Bash
Executable File

#!/system/bin/sh
MODDIR=${0%/*}
exec >> "$MODDIR/boot.log" 2>&1
echo "[$(date)] post-fs-data starting"
# Stop the stock Google camera HAL so it doesn't re-register its cameras.
# This is an APEX-managed service that auto-restarts, so we need to keep it down.
setprop ctl.stop vendor.camera-provider-2-7-google 2>/dev/null || true
kill -9 $(pgrep -f camera-provider-2-7-google) 2>/dev/null || true
# Reload v4l2loopback (rmmod first to clear stale params like exclusive_caps)
rmmod v4l2loopback 2>/dev/null || true
sleep 1
timeout 10 insmod "$MODDIR/v4l2loopback.ko" devices=2 video_nr=0,1 card_label="VirtualCam" exclusive_caps=0 2>/dev/null || echo "[$(date)] insmod timed out or failed"
# Copy provider binary and AIDL libs
PROVIDER_DST="/data/local/tmp/virtual_camera_provider"
LIB_DST="/data/local/tmp/virtualcam_libs"
cp "$MODDIR/vendor/bin/virtual_camera_provider" "$PROVIDER_DST" 2>/dev/null || true
chmod 755 "$PROVIDER_DST" 2>/dev/null || true
mkdir -p "$LIB_DST" 2>/dev/null || true
cp "$MODDIR/vendor/lib64"/*.so "$LIB_DST/" 2>/dev/null || true
# Start our provider
if [ -x "$PROVIDER_DST" ]; then
nohup env LD_LIBRARY_PATH="$LIB_DST" "$PROVIDER_DST" \
-d /dev/video0 -w 1920 -h 1080 -i virtual \
</dev/null >/dev/null 2>&1 &
echo "[$(date)] provider started"
fi
# Fork a background watchdog to keep the stock HAL dead
(
while sleep 30; do
# Re-kill stock HAL if it came back
if pgrep -f camera-provider-2-7-google >/dev/null 2>&1; then
setprop ctl.stop vendor.camera-provider-2-7-google 2>/dev/null || true
kill -9 $(pgrep -f camera-provider-2-7-google) 2>/dev/null || true
echo "[$(date)] re-killed stock HAL"
fi
# Restart our provider if it died
if ! pgrep -f virtual_camera_provider >/dev/null 2>&1; then
if [ -x "$PROVIDER_DST" ]; then
nohup env LD_LIBRARY_PATH="$LIB_DST" "$PROVIDER_DST" \
-d /dev/video0 -w 1920 -h 1080 -i virtual \
</dev/null >/dev/null 2>&1 &
echo "[$(date)] provider restarted"
fi
fi
done
) &
echo "[$(date)] post-fs-data done"