<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>zwo.dev</title>
    <link>https://zwodev.writeas.com/</link>
    <description>About coding, making and creating.</description>
    <pubDate>Sun, 05 Apr 2026 14:20:57 +0000</pubDate>
    <item>
      <title>HDMI-to-CSI &amp; Raspberry Pi 5 // Part 1</title>
      <link>https://zwodev.writeas.com/hdmi-to-csi-and-raspberry-pi-5?pk_campaign=rss-feed</link>
      <description>&lt;![CDATA[For our project VM-1 I&#39;ve prototyped the use of the Waveshare HDMI-to-CSI adapter using GStreamer on the Raspberry Pi 4. Unfortunately this setup does not work anymore for the new Raspberry 5.&#xA;!--more--&#xA;&#xA;These are the instructions that do not to work anymore:&#xA;https://www.waveshare.com/wiki/HDMItoCSIAdapter&#xA;&#xA;Luckily it seems that the Waveshare adapter is pretty much the same hardware as the Geekworm C790. On their Wiki they describe the necessary steps to to get the adaptor running and how captured frames can be written to disk. This is all done using the v4l2-ctl (Video for Linux) command line tool.&#xA;&#xA;https://wiki.geekworm.com/CSIManualonPi5&#xA;&#xA;These are the steps that work for me.&#xA;&#xA;01. Connect HDMI device, eg. camera&#xA;&#xA;02. List all available v4l2 devices&#xA;(important is the mediaX device under rp1-cfe, eg. media3)&#xA; v4l2-ctl --list-devices&#xA;&#xA;03. Show media device information&#xA;important is the device that is listed under the entity named tc358743 &#xA;eg. /dev/v4l-subdev2&#xA;media-ctl -d /dev/media3 -p&#xA;&#xA;04. Get, extract and set edid files&#xA;wget https://files.waveshare.com/upload/8/89/TC358743-Driver.zip&#xA;unzip TC358743-Driver.zip&#xA;cd ~/TC358743-Driver&#xA;v4l2-ctl -d /dev/v4l-subdev2 --set-edid=file=./edid/1080p30edid&#xA;&#xA;05. Query timings&#xA;v4l2-ctl -d /dev/v4l-subdev2 --query-dv-timings&#xA;&#xA;06. Set timings&#xA;v4l2-ctl -d /dev/v4l-subdev2 --set-dv-bt-timings query&#xA;&#xA;07. Initialize media device&#xA;media-ctl -d /dev/media3 -r&#xA;&#xA;08. Connect CSI2&#39;s pad4 to rp1-cfe-csi2ch0&#39;s pad0&#xA;media-ctl -d /dev/media3 -l &#39;&#39;\&#39;&#39;csi2&#39;\&#39;&#39;:4 -  &#39;\&#39;&#39;rp1-cfe-csi2ch0&#39;\&#39;&#39;:0 [1]&#39;&#xA;&#xA;09. Configure the media node&#xA;media-ctl -d /dev/media3 -V &#39;&#39;\&#39;&#39;csi2&#39;\&#39;&#39;:0 [fmt:RGB8881X24/1920x1080 field:none colorspace:srgb]&#39;&#xA;media-ctl -d /dev/media3 -V &#39;&#39;\&#39;&#39;csi2&#39;\&#39;&#39;:4 [fmt:RGB8881X24/1920x1080 field:none colorspace:srgb]&#39;&#xA;&#xA;10. Set output format&#xA;v4l2-ctl -v width=1920,height=1080,pixelformat=RGB3&#xA;&#xA;11. Capture test frames&#xA;v4l2-ctl --verbose -d /dev/video0 --set-fmt-video=width=1920,height=1080,pixelformat=&#39;RGB3&#39; --stream-mmap=4 --stream-skip=3 --stream-count=2 --stream-to=hdmiin.yuv --stream-poll&#xA;&#xA;12. View stream with ffplay&#xA;v4l2-ctl --verbose -d /dev/video0 --set-fmt-video=width=1920,height=1080,pixelformat=&#39;RGB3&#39; --stream-mmap=4 --stream-skip=3 --stream-poll --stream-to - | ffplay -f rawvideo -pixelformat rgb24 -video_size 1920x1080 -i -&#xA;&#xA;vm1]]&gt;</description>
      <content:encoded><![CDATA[<p>For our project VM-1 I&#39;ve prototyped the use of the Waveshare HDMI-to-CSI adapter using GStreamer on the Raspberry Pi 4. Unfortunately this setup does not work anymore for the new Raspberry 5.
</p>

<p>These are the instructions that do not to work anymore:
<a href="https://www.waveshare.com/wiki/HDMI_to_CSI_Adapter">https://www.waveshare.com/wiki/HDMI_to_CSI_Adapter</a></p>

<p>Luckily it seems that the Waveshare adapter is pretty much the same hardware as the Geekworm C790. On their Wiki they describe the necessary steps to to get the adaptor running and how captured frames can be written to disk. This is all done using the v4l2-ctl (Video for Linux) command line tool.</p>

<p><a href="https://wiki.geekworm.com/CSI_Manual_on_Pi_5">https://wiki.geekworm.com/CSI_Manual_on_Pi_5</a></p>

<p>These are the steps that work for me.</p>

<pre><code># 01. Connect HDMI device, eg. camera

# 02. List all available v4l2 devices
# (important is the mediaX device under rp1-cfe, eg. media3)
 v4l2-ctl --list-devices

# 03. Show media device information
# important is the device that is listed under the entity named tc358743 
# eg. /dev/v4l-subdev2
media-ctl -d /dev/media3 -p

# 04. Get, extract and set edid files
wget https://files.waveshare.com/upload/8/89/TC358743-Driver.zip
unzip TC358743-Driver.zip
cd ~/TC358743-Driver
v4l2-ctl -d /dev/v4l-subdev2 --set-edid=file=./edid/1080p30edid

# 05. Query timings
v4l2-ctl -d /dev/v4l-subdev2 --query-dv-timings

# 06. Set timings
v4l2-ctl -d /dev/v4l-subdev2 --set-dv-bt-timings query

# 07. Initialize media device
media-ctl -d /dev/media3 -r

# 08. Connect CSI2&#39;s pad4 to rp1-cfe-csi2_ch0&#39;s pad0
media-ctl -d /dev/media3 -l &#39;&#39;\&#39;&#39;csi2&#39;\&#39;&#39;:4 -&gt; &#39;\&#39;&#39;rp1-cfe-csi2_ch0&#39;\&#39;&#39;:0 [1]&#39;

# 09. Configure the media node
media-ctl -d /dev/media3 -V &#39;&#39;\&#39;&#39;csi2&#39;\&#39;&#39;:0 [fmt:RGB888_1X24/1920x1080 field:none colorspace:srgb]&#39;
media-ctl -d /dev/media3 -V &#39;&#39;\&#39;&#39;csi2&#39;\&#39;&#39;:4 [fmt:RGB888_1X24/1920x1080 field:none colorspace:srgb]&#39;

# 10. Set output format
v4l2-ctl -v width=1920,height=1080,pixelformat=RGB3

# 11. Capture test frames
v4l2-ctl --verbose -d /dev/video0 --set-fmt-video=width=1920,height=1080,pixelformat=&#39;RGB3&#39; --stream-mmap=4 --stream-skip=3 --stream-count=2 --stream-to=hdmiin.yuv --stream-poll

# 12. View stream with ffplay
v4l2-ctl --verbose -d /dev/video0 --set-fmt-video=width=1920,height=1080,pixelformat=&#39;RGB3&#39; --stream-mmap=4 --stream-skip=3 --stream-poll --stream-to - | ffplay -f rawvideo -pixel_format rgb24 -video_size 1920x1080 -i -
</code></pre>

<p><a href="https://zwodev.writeas.com/tag:vm1" class="hashtag"><span>#</span><span class="p-category">vm1</span></a></p>
]]></content:encoded>
      <guid>https://zwodev.writeas.com/hdmi-to-csi-and-raspberry-pi-5</guid>
      <pubDate>Mon, 17 Feb 2025 18:50:44 +0000</pubDate>
    </item>
    <item>
      <title>VM-1 // A Video Mixer for Everyone</title>
      <link>https://zwodev.writeas.com/vm-1-a-video-mixer-for-the-masses?pk_campaign=rss-feed</link>
      <description>&lt;![CDATA[I am happy to announce that I&#39;ll be working on the VM-1 for another round. This will happen as a cooperation between the HfS Ernst Busch, it’s “Laboratory for Digitality” (headed by Julian Jungel) and myself. The project is funded by the Aventis Foundation. !--more--&#xA;&#xA;This is what HfS Ernst Busch announced on their website (translation from german original):&#xA;&#xA;  Thanks to funding from the Aventis Foundation, the &#34;Laboratory for Digitality&#34; is now developing a video mixer for theater and media art. This mixer will enable a common scenario: mixing up to two video cameras with pre-produced videos and projecting them onto up to two video projectors. The VM-1 will also serve as an introduction to programming, allowing users to create their own video effects.&#xA;    Designed to be cost-effective, user-friendly, and open-source, the VM-1 aims to provide an alternative to proprietary video systems, thereby enhancing user independence. Additionally, HfS Ernst Busch seeks to use this project to showcase the creative potential of video and film as mediums. Techniques of image composition will be taught and explored in an accessible manner using the VM-1. Ultimately, this project aims not only to drive technological innovation but also to open new avenues for creative theater-making among students.&#xA;&#xA;Background&#xA;&#xA;In 2023 Julian and I started this project by creating a proof-of-concept of an affordable and open-source video mixing device in 2023.&#xA;&#xA;The POC was developed using Python and GStreamer on the Raspberry Pi 4 platform. It showed that the hardware is capable of decoding and displaying multiple 1080p30 (video and camera) streams at once. Although we were convinced that our idea is doable using the RPi4, we would have had to compromise on some features due to the limited performance of the platform.&#xA;&#xA;As the powerful new Raspberry Pi 5 was released by the end of 2023, we felt like we are on the right track. So we started the development of a prototype using C++, Dear ImGui and OpenGL ES and also developed our own PCB for the hardware controller. This layed the foundation for the current project iteration.&#xA;&#xA;vm1]]&gt;</description>
      <content:encoded><![CDATA[<p>I am happy to announce that I&#39;ll be working on the VM-1 for another round. This will happen as a cooperation between the HfS Ernst Busch, it’s “Laboratory for Digitality” (headed by Julian Jungel) and myself. The project is funded by the Aventis Foundation. </p>

<p>This is what HfS Ernst Busch announced on their <a href="https://www.hfs-berlin.de/detailseite/labor-fuer-digitalitaet-erfolgreich-bei-digitale-experimente" title="website">website</a> (translation from german original):</p>

<blockquote><p>Thanks to funding from the Aventis Foundation, the “Laboratory for Digitality” is now developing a video mixer for theater and media art. This mixer will enable a common scenario: mixing up to two video cameras with pre-produced videos and projecting them onto up to two video projectors. The VM-1 will also serve as an introduction to programming, allowing users to create their own video effects.</p>

<p>Designed to be cost-effective, user-friendly, and open-source, the VM-1 aims to provide an alternative to proprietary video systems, thereby enhancing user independence. Additionally, HfS Ernst Busch seeks to use this project to showcase the creative potential of video and film as mediums. Techniques of image composition will be taught and explored in an accessible manner using the VM-1. Ultimately, this project aims not only to drive technological innovation but also to open new avenues for creative theater-making among students.</p></blockquote>

<h2 id="background" id="background">Background</h2>

<p>In 2023 <a href="https://julianjungel.de" title="Julian">Julian</a> and I started this project by creating a proof-of-concept of an affordable and open-source video mixing device in 2023.</p>

<p>The POC was developed using Python and GStreamer on the Raspberry Pi 4 platform. It showed that the hardware is capable of decoding and displaying multiple 1080p30 (video and camera) streams at once. Although we were convinced that our idea is doable using the RPi4, we would have had to compromise on some features due to the limited performance of the platform.</p>

<p>As the powerful new Raspberry Pi 5 was released by the end of 2023, we felt like we are on the right track. So we started the development of a prototype using C++, Dear ImGui and OpenGL ES and also developed our own PCB for the hardware controller. This layed the foundation for the current project iteration.</p>

<p><a href="https://zwodev.writeas.com/tag:vm1" class="hashtag"><span>#</span><span class="p-category">vm1</span></a></p>
]]></content:encoded>
      <guid>https://zwodev.writeas.com/vm-1-a-video-mixer-for-the-masses</guid>
      <pubDate>Thu, 13 Feb 2025 12:14:55 +0000</pubDate>
    </item>
  </channel>
</rss>