made some good changes
This commit is contained in:
+40
-45
@@ -3,51 +3,46 @@ 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"
|
||||
# Boot-time restore from /data/local/tmp/ (bypasses broken modules_update overlay)
|
||||
# But only if the local file is valid - checks device_info returns valid JSON
|
||||
if [ -f "/data/local/tmp/control.sh" ]; then
|
||||
TEST=$(sh "/data/local/tmp/control.sh" device_info 2>/dev/null)
|
||||
case "$TEST" in
|
||||
'{"model'*)
|
||||
cp "/data/local/tmp/control.sh" "$MODDIR/control.sh" && chmod 755 "$MODDIR/control.sh"
|
||||
echo "[$(date)] restored control.sh from /data/local/tmp" ;;
|
||||
*)
|
||||
echo "[$(date)] /data/local/tmp/control.sh invalid, keeping module version ($(echo "$TEST" | head -c40))" ;;
|
||||
esac
|
||||
fi
|
||||
for f in service.sh post-fs-data.sh; do
|
||||
if [ -f "/data/local/tmp/$f" ]; then
|
||||
cp "/data/local/tmp/$f" "$MODDIR/$f" && chmod 755 "$MODDIR/$f"
|
||||
echo "[$(date)] restored $f from /data/local/tmp"
|
||||
fi
|
||||
done
|
||||
if [ -f /data/local/tmp/webui_index.html ]; then
|
||||
cp /data/local/tmp/webui_index.html "$MODDIR/webroot/index.html" 2>/dev/null
|
||||
fi
|
||||
if [ -f /data/local/tmp/webui_script.js ]; then
|
||||
cp /data/local/tmp/webui_script.js "$MODDIR/webroot/script.js" 2>/dev/null
|
||||
fi
|
||||
if [ -f /data/local/tmp/webui_style.css ]; then
|
||||
cp /data/local/tmp/webui_style.css "$MODDIR/webroot/style.css" 2>/dev/null
|
||||
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
|
||||
) &
|
||||
# Copy provider binary and libs (no kernel module loading, no stock HAL killing)
|
||||
PROVIDER_DST="/data/local/tmp/virtual_camera_provider"
|
||||
LIB_DST="/data/local/tmp/virtualcam_libs"
|
||||
mkdir -p "$LIB_DST" 2>/dev/null
|
||||
cp "$MODDIR/vendor/bin/virtual_camera_provider" "$PROVIDER_DST" 2>/dev/null || true
|
||||
chmod 755 "$PROVIDER_DST" 2>/dev/null || true
|
||||
cp "$MODDIR/vendor/lib64"/*.so "$LIB_DST/" 2>/dev/null || true
|
||||
|
||||
echo "[$(date)] post-fs-data done"
|
||||
# Start provider in background (failure won't block boot)
|
||||
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
|
||||
|
||||
echo "[$(date)] post-fs-data done"
|
||||
|
||||
Reference in New Issue
Block a user