From f92888fc7a36d776ba7d65102e25485f8c764990 Mon Sep 17 00:00:00 2001 From: Markus Kaczmarek Date: Sun, 6 Dec 2020 11:24:00 +0100 Subject: [PATCH 1/9] Update Makefile Build flags according to ErikPitkos gcc optimisations (https://github.com/geerlingguy/pi-webcam/issues/19) --- Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index ccf5a34..d416aa6 100644 --- a/Makefile +++ b/Makefile @@ -4,8 +4,8 @@ KERNEL_DIR ?= /usr/src/linux CC := $(CROSS_COMPILE)gcc KERNEL_INCLUDE := -I$(KERNEL_DIR)/include -I$(KERNEL_DIR)/arch/$(ARCH)/include -CFLAGS := -W -Wall -g $(KERNEL_INCLUDE) -LDFLAGS := -g +CFLAGS := -W -Wall -O3 $(KERNEL_INCLUDE) +LDFLAGS := -O3 all: uvc-gadget From 8f0a859e4375832327d580cda51d4761fbc6029c Mon Sep 17 00:00:00 2001 From: Markus Kaczmarek Date: Thu, 10 Dec 2020 10:32:30 +0100 Subject: [PATCH 2/9] Default to 1080p --- multi-gadget.sh | 60 ++++++++++++++++++++++++------------------------- 1 file changed, 30 insertions(+), 30 deletions(-) diff --git a/multi-gadget.sh b/multi-gadget.sh index 2fd474a..e22b0bf 100755 --- a/multi-gadget.sh +++ b/multi-gadget.sh @@ -26,47 +26,47 @@ mkdir -p /sys/kernel/config/usb_gadget/pi4/functions/uvc.usb0/control/header/h ln -s /sys/kernel/config/usb_gadget/pi4/functions/uvc.usb0/control/header/h /sys/kernel/config/usb_gadget/pi4/functions/uvc.usb0/control/class/fs # For 720p: -mkdir -p /sys/kernel/config/usb_gadget/pi4/functions/uvc.usb0/streaming/mjpeg/m/720p -cat < /sys/kernel/config/usb_gadget/pi4/functions/uvc.usb0/streaming/mjpeg/m/720p/dwFrameInterval -5000000 -EOF -cat < /sys/kernel/config/usb_gadget/pi4/functions/uvc.usb0/streaming/mjpeg/m/720p/wWidth -1280 -EOF -cat < /sys/kernel/config/usb_gadget/pi4/functions/uvc.usb0/streaming/mjpeg/m/720p/wHeight -720 -EOF -cat < /sys/kernel/config/usb_gadget/pi4/functions/uvc.usb0/streaming/mjpeg/m/720p/dwMinBitRate -10000000 -EOF -cat < /sys/kernel/config/usb_gadget/pi4/functions/uvc.usb0/streaming/mjpeg/m/720p/dwMaxBitRate -100000000 -EOF -cat < /sys/kernel/config/usb_gadget/pi4/functions/uvc.usb0/streaming/mjpeg/m/720p/dwMaxVideoFrameBufferSize -7372800 -EOF - -# For 1080p: -# mkdir -p /sys/kernel/config/usb_gadget/pi4/functions/uvc.usb0/streaming/mjpeg/m/1080p -# cat < /sys/kernel/config/usb_gadget/pi4/functions/uvc.usb0/streaming/mjpeg/m/1080p/dwFrameInterval +# mkdir -p /sys/kernel/config/usb_gadget/pi4/functions/uvc.usb0/streaming/mjpeg/m/720p +# cat < /sys/kernel/config/usb_gadget/pi4/functions/uvc.usb0/streaming/mjpeg/m/720p/dwFrameInterval # 5000000 # EOF -# cat < /sys/kernel/config/usb_gadget/pi4/functions/uvc.usb0/streaming/mjpeg/m/1080p/wWidth -# 1920 +# cat < /sys/kernel/config/usb_gadget/pi4/functions/uvc.usb0/streaming/mjpeg/m/720p/wWidth +# 1280 # EOF -# cat < /sys/kernel/config/usb_gadget/pi4/functions/uvc.usb0/streaming/mjpeg/m/1080p/wHeight -# 1080 +# cat < /sys/kernel/config/usb_gadget/pi4/functions/uvc.usb0/streaming/mjpeg/m/720p/wHeight +# 720 # EOF -# cat < /sys/kernel/config/usb_gadget/pi4/functions/uvc.usb0/streaming/mjpeg/m/1080p/dwMinBitRate +# cat < /sys/kernel/config/usb_gadget/pi4/functions/uvc.usb0/streaming/mjpeg/m/720p/dwMinBitRate # 10000000 # EOF -# cat < /sys/kernel/config/usb_gadget/pi4/functions/uvc.usb0/streaming/mjpeg/m/1080p/dwMaxBitRate +# cat < /sys/kernel/config/usb_gadget/pi4/functions/uvc.usb0/streaming/mjpeg/m/720p/dwMaxBitRate # 100000000 # EOF -# cat < /sys/kernel/config/usb_gadget/pi4/functions/uvc.usb0/streaming/mjpeg/m/1080p/dwMaxVideoFrameBufferSize +# cat < /sys/kernel/config/usb_gadget/pi4/functions/uvc.usb0/streaming/mjpeg/m/720p/dwMaxVideoFrameBufferSize # 7372800 # EOF +# For 1080p: +mkdir -p /sys/kernel/config/usb_gadget/pi4/functions/uvc.usb0/streaming/mjpeg/m/1080p +cat < /sys/kernel/config/usb_gadget/pi4/functions/uvc.usb0/streaming/mjpeg/m/1080p/dwFrameInterval +5000000 +EOF +cat < /sys/kernel/config/usb_gadget/pi4/functions/uvc.usb0/streaming/mjpeg/m/1080p/wWidth +1920 +EOF +cat < /sys/kernel/config/usb_gadget/pi4/functions/uvc.usb0/streaming/mjpeg/m/1080p/wHeight +1080 +EOF +cat < /sys/kernel/config/usb_gadget/pi4/functions/uvc.usb0/streaming/mjpeg/m/1080p/dwMinBitRate +10000000 +EOF +cat < /sys/kernel/config/usb_gadget/pi4/functions/uvc.usb0/streaming/mjpeg/m/1080p/dwMaxBitRate +100000000 +EOF +cat < /sys/kernel/config/usb_gadget/pi4/functions/uvc.usb0/streaming/mjpeg/m/1080p/dwMaxVideoFrameBufferSize +7372800 +EOF + mkdir /sys/kernel/config/usb_gadget/pi4/functions/uvc.usb0/streaming/header/h cd /sys/kernel/config/usb_gadget/pi4/functions/uvc.usb0/streaming/header/h ln -s ../../mjpeg/m From 72ac8d76ed5acafff9f7cc3778addbbf22afb68b Mon Sep 17 00:00:00 2001 From: Markus Kaczmarek Date: Thu, 10 Dec 2020 17:27:47 +0100 Subject: [PATCH 3/9] Default to 1080p --- piwebcam | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/piwebcam b/piwebcam index 5075169..d439563 100755 --- a/piwebcam +++ b/piwebcam @@ -10,6 +10,6 @@ sudo /home/pi/uvc-gadget/multi-gadget.sh /usr/bin/v4l2-ctl -c video_bitrate=25000000 # For 720p: -sudo /home/pi/uvc-gadget/uvc-gadget -f1 -s1 -r0 -u /dev/video1 -v /dev/video0 +# sudo /home/pi/uvc-gadget/uvc-gadget -f1 -s1 -r0 -u /dev/video1 -v /dev/video0 # For 1080p: -# sudo /home/pi/uvc-gadget/uvc-gadget -f1 -s1 -r1 -u /dev/video1 -v /dev/video0 +sudo /home/pi/uvc-gadget/uvc-gadget -f1 -s1 -r1 -u /dev/video1 -v /dev/video0 From 2d209b51ce2fac271d05002bfda8e7636fbef826 Mon Sep 17 00:00:00 2001 From: Markus Kaczmarek Date: Fri, 11 Dec 2020 13:34:12 +0100 Subject: [PATCH 4/9] Build optimisations for 1080p Default to 1080p with the option to go back to 720p. --- Makefile | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index d416aa6..05cc660 100644 --- a/Makefile +++ b/Makefile @@ -4,8 +4,13 @@ KERNEL_DIR ?= /usr/src/linux CC := $(CROSS_COMPILE)gcc KERNEL_INCLUDE := -I$(KERNEL_DIR)/include -I$(KERNEL_DIR)/arch/$(ARCH)/include +# For 720p +#CFLAGS := -W -Wall -g $(KERNEL_INCLUDE) +#LDFLAGS := -g + +# For 1080p CFLAGS := -W -Wall -O3 $(KERNEL_INCLUDE) -LDFLAGS := -O3 +LDFLAGS := -O3g all: uvc-gadget From b4a49b79f9029d3ff810dd0acbb16b97e38588e3 Mon Sep 17 00:00:00 2001 From: Markus Kaczmarek Date: Thu, 17 Dec 2020 09:01:42 +0100 Subject: [PATCH 5/9] FPS fix for Teams, Google Meet, etc. Changed dwFrameInterval from 5000000 to 333333 --- multi-gadget.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/multi-gadget.sh b/multi-gadget.sh index e22b0bf..d4406ef 100755 --- a/multi-gadget.sh +++ b/multi-gadget.sh @@ -28,7 +28,7 @@ ln -s /sys/kernel/config/usb_gadget/pi4/functions/uvc.usb0/control/header/h /sys # For 720p: # mkdir -p /sys/kernel/config/usb_gadget/pi4/functions/uvc.usb0/streaming/mjpeg/m/720p # cat < /sys/kernel/config/usb_gadget/pi4/functions/uvc.usb0/streaming/mjpeg/m/720p/dwFrameInterval -# 5000000 +# 333333 # EOF # cat < /sys/kernel/config/usb_gadget/pi4/functions/uvc.usb0/streaming/mjpeg/m/720p/wWidth # 1280 @@ -49,7 +49,7 @@ ln -s /sys/kernel/config/usb_gadget/pi4/functions/uvc.usb0/control/header/h /sys # For 1080p: mkdir -p /sys/kernel/config/usb_gadget/pi4/functions/uvc.usb0/streaming/mjpeg/m/1080p cat < /sys/kernel/config/usb_gadget/pi4/functions/uvc.usb0/streaming/mjpeg/m/1080p/dwFrameInterval -5000000 +333333 EOF cat < /sys/kernel/config/usb_gadget/pi4/functions/uvc.usb0/streaming/mjpeg/m/1080p/wWidth 1920 From 73224835654707388e0298bc31225fafa3d3749c Mon Sep 17 00:00:00 2001 From: Markus Kaczmarek Date: Fri, 18 Dec 2020 11:22:10 +0100 Subject: [PATCH 6/9] Reverted to 720p as default --- piwebcam | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/piwebcam b/piwebcam index d439563..172ce3e 100755 --- a/piwebcam +++ b/piwebcam @@ -10,6 +10,6 @@ sudo /home/pi/uvc-gadget/multi-gadget.sh /usr/bin/v4l2-ctl -c video_bitrate=25000000 # For 720p: -# sudo /home/pi/uvc-gadget/uvc-gadget -f1 -s1 -r0 -u /dev/video1 -v /dev/video0 +sudo /home/pi/uvc-gadget/uvc-gadget -f1 -s1 -r0 -u /dev/video1 -v /dev/video0 # For 1080p: -sudo /home/pi/uvc-gadget/uvc-gadget -f1 -s1 -r1 -u /dev/video1 -v /dev/video0 +#sudo /home/pi/uvc-gadget/uvc-gadget -f1 -s1 -r1 -u /dev/video1 -v /dev/video0 From cfbcdbbeda57ed3f7e45e0184d3f803007bf13e8 Mon Sep 17 00:00:00 2001 From: Markus Kaczmarek Date: Fri, 18 Dec 2020 11:29:32 +0100 Subject: [PATCH 7/9] Reverted to 720p as default Keeping dwFrameInterval to ensure compatibility with Teams, etc. --- multi-gadget.sh | 60 ++++++++++++++++++++++++------------------------- 1 file changed, 30 insertions(+), 30 deletions(-) diff --git a/multi-gadget.sh b/multi-gadget.sh index d4406ef..65cb8ed 100755 --- a/multi-gadget.sh +++ b/multi-gadget.sh @@ -26,47 +26,47 @@ mkdir -p /sys/kernel/config/usb_gadget/pi4/functions/uvc.usb0/control/header/h ln -s /sys/kernel/config/usb_gadget/pi4/functions/uvc.usb0/control/header/h /sys/kernel/config/usb_gadget/pi4/functions/uvc.usb0/control/class/fs # For 720p: -# mkdir -p /sys/kernel/config/usb_gadget/pi4/functions/uvc.usb0/streaming/mjpeg/m/720p -# cat < /sys/kernel/config/usb_gadget/pi4/functions/uvc.usb0/streaming/mjpeg/m/720p/dwFrameInterval -# 333333 -# EOF -# cat < /sys/kernel/config/usb_gadget/pi4/functions/uvc.usb0/streaming/mjpeg/m/720p/wWidth -# 1280 -# EOF -# cat < /sys/kernel/config/usb_gadget/pi4/functions/uvc.usb0/streaming/mjpeg/m/720p/wHeight -# 720 -# EOF -# cat < /sys/kernel/config/usb_gadget/pi4/functions/uvc.usb0/streaming/mjpeg/m/720p/dwMinBitRate -# 10000000 -# EOF -# cat < /sys/kernel/config/usb_gadget/pi4/functions/uvc.usb0/streaming/mjpeg/m/720p/dwMaxBitRate -# 100000000 -# EOF -# cat < /sys/kernel/config/usb_gadget/pi4/functions/uvc.usb0/streaming/mjpeg/m/720p/dwMaxVideoFrameBufferSize -# 7372800 -# EOF - -# For 1080p: -mkdir -p /sys/kernel/config/usb_gadget/pi4/functions/uvc.usb0/streaming/mjpeg/m/1080p -cat < /sys/kernel/config/usb_gadget/pi4/functions/uvc.usb0/streaming/mjpeg/m/1080p/dwFrameInterval +mkdir -p /sys/kernel/config/usb_gadget/pi4/functions/uvc.usb0/streaming/mjpeg/m/720p +cat < /sys/kernel/config/usb_gadget/pi4/functions/uvc.usb0/streaming/mjpeg/m/720p/dwFrameInterval 333333 EOF -cat < /sys/kernel/config/usb_gadget/pi4/functions/uvc.usb0/streaming/mjpeg/m/1080p/wWidth -1920 +cat < /sys/kernel/config/usb_gadget/pi4/functions/uvc.usb0/streaming/mjpeg/m/720p/wWidth +1280 EOF -cat < /sys/kernel/config/usb_gadget/pi4/functions/uvc.usb0/streaming/mjpeg/m/1080p/wHeight -1080 +cat < /sys/kernel/config/usb_gadget/pi4/functions/uvc.usb0/streaming/mjpeg/m/720p/wHeight +720 EOF -cat < /sys/kernel/config/usb_gadget/pi4/functions/uvc.usb0/streaming/mjpeg/m/1080p/dwMinBitRate +cat < /sys/kernel/config/usb_gadget/pi4/functions/uvc.usb0/streaming/mjpeg/m/720p/dwMinBitRate 10000000 EOF -cat < /sys/kernel/config/usb_gadget/pi4/functions/uvc.usb0/streaming/mjpeg/m/1080p/dwMaxBitRate +cat < /sys/kernel/config/usb_gadget/pi4/functions/uvc.usb0/streaming/mjpeg/m/720p/dwMaxBitRate 100000000 EOF -cat < /sys/kernel/config/usb_gadget/pi4/functions/uvc.usb0/streaming/mjpeg/m/1080p/dwMaxVideoFrameBufferSize +cat < /sys/kernel/config/usb_gadget/pi4/functions/uvc.usb0/streaming/mjpeg/m/720p/dwMaxVideoFrameBufferSize 7372800 EOF +# For 1080p: +# mkdir -p /sys/kernel/config/usb_gadget/pi4/functions/uvc.usb0/streaming/mjpeg/m/1080p +# cat < /sys/kernel/config/usb_gadget/pi4/functions/uvc.usb0/streaming/mjpeg/m/1080p/dwFrameInterval +# 333333 +# EOF +# cat < /sys/kernel/config/usb_gadget/pi4/functions/uvc.usb0/streaming/mjpeg/m/1080p/wWidth +# 1920 +# EOF +# cat < /sys/kernel/config/usb_gadget/pi4/functions/uvc.usb0/streaming/mjpeg/m/1080p/wHeight +# 1080 +# EOF +# cat < /sys/kernel/config/usb_gadget/pi4/functions/uvc.usb0/streaming/mjpeg/m/1080p/dwMinBitRate +# 10000000 +# EOF +# cat < /sys/kernel/config/usb_gadget/pi4/functions/uvc.usb0/streaming/mjpeg/m/1080p/dwMaxBitRate +# 100000000 +# EOF +# cat < /sys/kernel/config/usb_gadget/pi4/functions/uvc.usb0/streaming/mjpeg/m/1080p/dwMaxVideoFrameBufferSize +# 7372800 +# EOF + mkdir /sys/kernel/config/usb_gadget/pi4/functions/uvc.usb0/streaming/header/h cd /sys/kernel/config/usb_gadget/pi4/functions/uvc.usb0/streaming/header/h ln -s ../../mjpeg/m From 3232790cc0f6d094e59e6543299fc3734d9f3275 Mon Sep 17 00:00:00 2001 From: Jeff Geerling Date: Mon, 18 Jan 2021 17:13:11 -0600 Subject: [PATCH 8/9] Revert Makefile changes in PR. --- Makefile | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/Makefile b/Makefile index 05cc660..9c8e8c6 100644 --- a/Makefile +++ b/Makefile @@ -4,13 +4,14 @@ KERNEL_DIR ?= /usr/src/linux CC := $(CROSS_COMPILE)gcc KERNEL_INCLUDE := -I$(KERNEL_DIR)/include -I$(KERNEL_DIR)/arch/$(ARCH)/include + # For 720p -#CFLAGS := -W -Wall -g $(KERNEL_INCLUDE) -#LDFLAGS := -g +CFLAGS := -W -Wall -g $(KERNEL_INCLUDE) +LDFLAGS := -g # For 1080p -CFLAGS := -W -Wall -O3 $(KERNEL_INCLUDE) -LDFLAGS := -O3g +#CFLAGS := -W -Wall -O3 $(KERNEL_INCLUDE) +#LDFLAGS := -O3g all: uvc-gadget From 08faad2d644090147c02a55c1a25124ba833d364 Mon Sep 17 00:00:00 2001 From: Jeff Geerling Date: Mon, 18 Jan 2021 17:18:13 -0600 Subject: [PATCH 9/9] Include optimizations for GCC build. --- Makefile | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/Makefile b/Makefile index 9c8e8c6..3a4e763 100644 --- a/Makefile +++ b/Makefile @@ -4,14 +4,8 @@ KERNEL_DIR ?= /usr/src/linux CC := $(CROSS_COMPILE)gcc KERNEL_INCLUDE := -I$(KERNEL_DIR)/include -I$(KERNEL_DIR)/arch/$(ARCH)/include - -# For 720p -CFLAGS := -W -Wall -g $(KERNEL_INCLUDE) -LDFLAGS := -g - -# For 1080p -#CFLAGS := -W -Wall -O3 $(KERNEL_INCLUDE) -#LDFLAGS := -O3g +CFLAGS := -W -Wall -O3 $(KERNEL_INCLUDE) +LDFLAGS := -O3g all: uvc-gadget