# Video overlay use cases Source: [https://docs.qualcomm.com/doc/80-70020-50/topic/overlay-use-cases.html](https://docs.qualcomm.com/doc/80-70020-50/topic/overlay-use-cases.html) The pipelines show the use cases for video overlay. These use cases use the `dest-rect` property coordinates from the *overlay-mask* property of the [qtivoverlay](https://docs.qualcomm.com/doc/80-70020-50/topic/qtioverlay.html) plugin. Before you run the use cases, ensure that you complete the preconditions mentioned in [Run multimedia use cases](https://docs.qualcomm.com/doc/80-70020-50/topic/multimedia-use-cases.html). Note: The commands in the following use cases use the 720p resolution. To change the resolution, update the respective `dest-rect` property coordinates in the command for that resolution. For more information, see [qtivoverlay](https://docs.qualcomm.com/doc/80-70020-50/topic/qtioverlay.html). ## User text overlay Source: [https://docs.qualcomm.com/doc/80-70020-50/topic/overlay-use-cases.html](https://docs.qualcomm.com/doc/80-70020-50/topic/overlay-use-cases.html) This use case overlays text on a video stream. Run the following use cases on the target device: - Overlay on a video: setprop persist.overlay.use_c2d_blit 2Copy to clipboard gst-launch-1.0 filesrc location=/opt/Animals_000_720p_180s_30FPS.mp4 ! qtdemux ! queue ! h264parse ! v4l2h264dec capture-io-mode=4 output-io-mode=4 ! qtioverlay overlay-text="text0, text=\"Qualcomm\ Intelligence\", color=(uint)0xFFFF00FF, dest-rect=<160, 624, 944, 50>;" ! waylandsink fullscreen=trueCopy to clipboard Figure : Pipeline for text overlay on video–file source - Overlay on a live stream from a camera: setprop persist.overlay.use_c2d_blit 2Copy to clipboard gst-launch-1.0 -e qtiqmmfsrc name=camsrc video_0::type=video video_1::type=preview ! video/x-raw,format=NV12,width=1920,height=1080,framerate=30/1 ! qtioverlay overlay-text="text0, text=\"Qualcomm\ Intelligence\", color=(uint)0xFFFF00FF, dest-rect=<160, 624, 944, 50>;" ! waylandsink fullscreen=trueCopy to clipboard Figure : Pipeline for text overlay on video–camera source ## Date and time overlay Source: [https://docs.qualcomm.com/doc/80-70020-50/topic/overlay-use-cases.html](https://docs.qualcomm.com/doc/80-70020-50/topic/overlay-use-cases.html) This use case shows the date (in MMDDYYYY) and time (in HHMMSS) to be overlaid on the video stream. Run the following use cases on the target device: - Overlay on a video: setprop persist.overlay.use_c2d_blit 2Copy to clipboard gst-launch-1.0 filesrc location=/opt/.mp4 ! qtdemux ! queue ! h264parse ! v4l2h264dec capture-io-mode=4 output-io-mode=4 ! qtioverlay overlay-date="date0, date-format=\"MMDDYYYY\", time-format=\"HHMMSS_24HR\", color=(uint)0xFF00FFFF, dest-rect=<400, 400, 256, 80>;" ! waylandsink fullscreen=trueCopy to clipboard Figure : Pipeline for text date and time overlay on video–file source - Overlay on a live stream from a camera: setprop persist.overlay.use_c2d_blit 2Copy to clipboard gst-launch-1.0 -e qtiqmmfsrc name=camsrc video_0::type=video video_1::type=preview ! video/x-raw,format=NV12,width=1920,height=1080,framerate=30/1 ! qtioverlay overlay-date="date0, date-format=\"MMDDYYYY\", time-format= \"HHMMSS_24HR\", color=(uint)0xFF00FFFF, dest-rect=<400, 400, 256, 80>;" ! waylandsink fullscreen=trueCopy to clipboard Figure : Pipeline for text date and time overlay on video–camera source ## Static image overlay Source: [https://docs.qualcomm.com/doc/80-70020-50/topic/overlay-use-cases.html](https://docs.qualcomm.com/doc/80-70020-50/topic/overlay-use-cases.html) This use case shows how to overlay a static image on a video stream. 1. In the terminal of the Linux host computer, run the following command to push the static image to the target device: scp -r .rgba root@[DEVICE IP-ADDR]:/optCopy to clipboard 2. Run the use cases on the target device: - Overlay on a video: setprop persist.overlay.use_c2d_blit 2Copy to clipboard gst-launch-1.0 filesrc location=/opt/.mp4 ! qtdemux ! queue ! h264parse ! v4l2h264dec capture-io-mode=4 output-io-mode=4 ! qtioverlay overlay-simg="image0, image=\"/opt/overlay_test_464_109.rgba\", resolution=<464, 109>, dest-rect=<140, 130, 464, 109>;" ! waylandsink fullscreen=trueCopy to clipboard Figure : Pipeline for static image overlay on video–file source - Overlay on alive stream from a camera: setprop persist.overlay.use_c2d_blit 2Copy to clipboard gst-launch-1.0 -e qtiqmmfsrc name=camsrc video_0::type=video video_1::type=preview ! video/x-raw,format=NV12,width=1920,height=1080,framerate=30/1 ! qtioverlay overlay-simg="image0, image=\"/opt/overlay_test_464_109.rgba\", resolution=<464, 109>, dest-rect=<140, 130, 464, 109>;" ! waylandsink fullscreen=trueCopy to clipboard Figure : Pipeline for static image overlay on video–camera source ## Bounding box overlay Source: [https://docs.qualcomm.com/doc/80-70020-50/topic/overlay-use-cases.html](https://docs.qualcomm.com/doc/80-70020-50/topic/overlay-use-cases.html) This use case shows how to overlay a bounding box with a label on the video stream. Run the following use cases on the target device: - Overlay on a video: setprop persist.overlay.use_c2d_blit 2Copy to clipboard gst-launch-1.0 -e qtiqmmfsrc name=camsrc video_0::type=video video_1::type=preview ! video/x-raw,format=NV12,width=1920,height=1080,framerate=30/1 ! qtioverlay overlay-simg="image0, image=\"/opt/overlay_test_464_109.rgba\", resolution=<464, 109>, dest-rect=<140, 130, 464, 109>;" ! waylandsink fullscreen=trueCopy to clipboard Figure : Pipeline for bounding box overlay on video–file source - Overlay on a live stream from a camera: setprop persist.overlay.use_c2d_blit 2Copy to clipboard gst-launch-1.0 -e qtiqmmfsrc name=camsrc video_0::type=video video_1::type=preview ! video/x-raw,format=NV12,width=1920,height=1080,framerate=30/1 ! qtioverlay overlay-simg="image0, image=\"/opt/overlay_test_464_109.rgba\", resolution=<464, 109>, dest-rect=<140, 130, 464, 109>;" ! waylandsink fullscreen=trueCopy to clipboard Figure : Pipeline for bounding box overlay on video–camera source ## Inverse privacy mask Source: [https://docs.qualcomm.com/doc/80-70020-50/topic/overlay-use-cases.html](https://docs.qualcomm.com/doc/80-70020-50/topic/overlay-use-cases.html) This use case shows how to overlay the inverse privacy mask on the video stream. The inverse privacy mask is applied on all other regions except the *circle* in the *overlay-mask* property. Run the following use cases on the target device: - Overlay on a video: setprop persist.overlay.use_c2d_blit 2Copy to clipboard gst-launch-1.0 -e qtiqmmfsrc name=camsrc video_0::type=video video_1::type=preview ! video/x-raw,format=NV12,width=1920,height=1080,framerate=30/1 ! qtioverlay overlay-simg="image0, image=\"/opt/overlay_test_464_109.rgba\", resolution=<464, 109>, dest-rect=<140, 130, 464, 109>;" ! waylandsink fullscreen=trueCopy to clipboard Figure : Pipeline for inverse privacy mask overlay on video–file source - Overlay on a live stream from a camera: setprop persist.overlay.use_c2d_blit 2Copy to clipboard gst-launch-1.0 -e qtiqmmfsrc ! video/x-raw,format=NV12,width=1920,height=1080,framerate=30/1 ! qtioverlay overlay-mask="mask0, circle=<960, 540, 400>, inverse=true, dest-rect=<0, 0, 1920, 1080>, color=0x202020FF" ! waylandsink fullscreen=trueCopy to clipboard Figure : Pipeline for inverse privacy mask overlay on video–camera source ## Non-inverse privacy mask Source: [https://docs.qualcomm.com/doc/80-70020-50/topic/overlay-use-cases.html](https://docs.qualcomm.com/doc/80-70020-50/topic/overlay-use-cases.html) This use case shows how to overlay the non-inverse privacy mask on the video stream. Run the following use cases on the target device: - Overlay on a video: setprop persist.overlay.use_c2d_blit 2Copy to clipboard gst-launch-1.0 filesrc location=/opt/.mp4 ! qtdemux ! queue ! h264parse ! v4l2h264dec capture-io-mode=4 output-io-mode=4 ! qtioverlay overlay-mask="mask0, circle=<640, 360, 200>, dest-rect=<0, 0, 1280, 720>, color=0x202020FF" ! waylandsink fullscreen=trueCopy to clipboard Figure : Pipeline for non-inverse privacy mask overlay on video–file source - Overlay on a live stream from a camera: setprop persist.overlay.use_c2d_blit 2Copy to clipboard gst-launch-1.0 -e qtiqmmfsrc ! video/x-raw,format=NV12,width=1920,height=1080,framerate=30/1 ! qtioverlay overlay-mask="mask0, circle=<960, 540, 400>, dest-rect=<0, 0, 1920, 1080>, color=0x202020FF" ! waylandsink fullscreen=trueCopy to clipboard Figure : Pipeline for non-inverse privacy mask overlay on video–camera source ## Polygon privacy mask Source: [https://docs.qualcomm.com/doc/80-70020-50/topic/overlay-use-cases.html](https://docs.qualcomm.com/doc/80-70020-50/topic/overlay-use-cases.html) A polygon privacy mask allows you to create privacy zones on an image using a polygonal shape. Using a polygon allows you to make the masking smoother and more exact. - The polygon privacy mask is applied to the region enclosed within the polygon. - The inverse polygon privacy mask is applied to all regions except the one enclosed within the polygon. Before you begin, run the following commands on the target device to configure the display: export XDG_RUNTIME_DIR=/dev/socket/weston && export WAYLAND_DISPLAY=wayland-1Copy to clipboard setprop persist.overlay.use_c2d_blit 2Copy to clipboard Run the following use cases on the target device. ### Enable polygon privacy mask - File source: gst-launch-1.0 filesrc location=/opt/.mp4 ! qtdemux ! queue ! h264parse ! v4l2h264dec capture-io-mode=4 output-io-mode=4 ! qtioverlay overlay-mask="mask0, polygon=<5, <360, 640, 780, 500, 300>, <360, 540, 180, 180, 100>>, dest-rect=<0, 0, 1280, 720>, color=0x202020FF" ! waylandsink fullscreen=trueCopy to clipboard - Camera: gst-launch-1.0 -e qtiqmmfsrc ! video/x-raw,format=NV12,width=1920,height=1080,framerate=30/1 ! qtioverlay overlay-mask="mask0, polygon=<5, <360, 640, 780, 500, 300>, <360, 540, 180, 180, 100>>, dest-rect=<0, 0, 1920, 1080>, color=0x202020FF" ! waylandsink fullscreen=trueCopy to clipboard ### Enable inverse polygon privacy mask - File source: gst-launch-1.0 filesrc location=/opt/.mp4 ! qtdemux ! queue ! h264parse ! v4l2h264dec capture-io-mode=4 output-io-mode=4 ! qtioverlay overlay-mask="mask0, polygon=<3, <360, 640, 780>, <360, 540, 180>>, inverse=true, dest-rect=<0, 0, 1280, 720>, color=0x202020FF" ! waylandsink fullscreen=trueCopy to clipboard - Camera: gst-launch-1.0 -e qtiqmmfsrc ! video/x-raw,format=NV12,width=1920,height=1080,framerate=30/1 ! qtioverlay overlay-mask="mask0, polygon=<3, <360, 640, 780>, <360, 540, 180>>, inverse=true, dest-rect=<0, 0, 1920, 1080>, color=0x202020FF" ! waylandsink fullscreen=trueCopy to clipboard ### Update polygon privacy mask property at runtime 1. Set the privacy mask: gst-pipeline-app -e qtiqmmfsrc ! video/x-raw,format=NV12,width=1920,height=1080,framerate=30/1 ! qtioverlay overlay-mask="mask0, polygon=<7, <360, 640, 780, 640, 500, 360, 180>, <360, 360, 180, 120, 200, 120, 180>>, inverse=true, dest-rect=<0, 0, 1920, 1080>, color=0x202020FF" ! waylandsink fullscreen=trueCopy to clipboard 2. In the pipeline controls, select `Playing mode - 3`. 3. To change the property in the pipeline controls, select `Plugin mode - p`. 4. From the plugins, select `overlay - 2`. 5. In the plugin properties, select `overlay-mask - 4`. 6. Add the following value: mask0, polygon=<5, <360, 640, 780, 500, 300>, <360, 540, 180, 180, 100>>, inverse=true, dest-rect=<0, 0, 1920, 1080>, color=0x202020FFCopy to clipboard Last Published: Jan 30, 2026 [Previous Topic Video composition use cases](https://docs.qualcomm.com/bundle/publicresource/80-70020-50/topics/video-composition.md) [Next Topic Video split use cases](https://docs.qualcomm.com/bundle/publicresource/80-70020-50/topics/video-split-use-cases.md)