From f1ab553d28049c728694cbaf58efce6fd5c39f38 Mon Sep 17 00:00:00 2001 From: Jaswant Panchumarti Date: Fri, 3 Jul 2026 11:26:43 -0400 Subject: [PATCH] fix(video_rca): bump vtk-streaming to 0.3.4 for vpx encoder fix - just call set_size if window size is different from last encode isntead of recreating encoder and frame from sratch --- README.rst | 14 ++++++++++++++ pyproject.toml | 9 +-------- src/trame_rca/encoders/video_encoder.py | 5 ++--- 3 files changed, 17 insertions(+), 11 deletions(-) diff --git a/README.rst b/README.rst index 8f340ae..9024b52 100644 --- a/README.rst +++ b/README.rst @@ -95,3 +95,17 @@ You can try our code example: pip install "trame-rca[vtkstreaming]" python ./examples/05_video/vtk_cone_simple_video.py + +In order to use source-build of vtkstreaming, please clone [VTKStreaming](https://github.com/Kitware/VTKStreaming.git) one level +up outside the trame-rca directory, checkout the `wheel` branch, and install it inside the trame-rca virtual environment + +.. code-block:: console + + cd .. + git clone https://github.com/Kitware/VTKStreaming.git + cd VTKstreaming + uv pip install --group dev # build deps into active venv; index from tool.uv.index + uv pip install -e . --no-build-isolation + cd ../trame-rca + + python ./examples/05_video/vtk_cone_simple_video.py diff --git a/pyproject.toml b/pyproject.toml index af7dbd8..163e03d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -48,16 +48,9 @@ turbo = [ ] vtkstreaming = [ "vtk", - "vtk-streaming>=0.3.2", + "vtk-streaming>=0.3.4", ] - - - - - - - [build-system] requires = ["hatchling"] build-backend = "hatchling.build" diff --git a/src/trame_rca/encoders/video_encoder.py b/src/trame_rca/encoders/video_encoder.py index e69ce95..f2c8091 100644 --- a/src/trame_rca/encoders/video_encoder.py +++ b/src/trame_rca/encoders/video_encoder.py @@ -81,7 +81,7 @@ def _set_size(self, render_window_size: tuple[int]): def _initialize(self, render_window: vtkRenderWindow): self.encoder.SetGraphicsContext(render_window) self.encoder.SetInputPixelFormat(VTKPF_IYUV) - self.encoder.SetBitRateControlMode(3) # Constant quantization + self.encoder.SetBitRateControlMode(vtkVideoEncoder.BRCType.CQP) self.encoder.SetQuantizationParameter(5) # 0 (high quality) - 63 (low quality) self.frame = vtkOpenGLVideoFrame() @@ -115,8 +115,7 @@ def encode(self, render_window: vtkRenderWindow): if self.encoder is None or self.frame is None: return if self._window_size != render_window.GetSize(): - # Ideally we would just call _set_size here - self._reset(render_window) + self._set_size(render_window_size=render_window.size) self.frame.Capture(render_window) self.encoder.Encode(self.frame)