Skip to content

aravissrc gst element switch test - #918

Draft
EmmanuelP wants to merge 7 commits into
aravis-0-8from
wip/gst-aravissrc-switch-test
Draft

EmmanuelP wants to merge 7 commits into
aravis-0-8from
wip/gst-aravissrc-switch-test

Conversation

@EmmanuelP

Copy link
Copy Markdown
Contributor

This test crashes as soon as the new source element is put in PLAYING mode. But that is probably due to a mishandling of the pipeline. Doing this sort of pipeline manipulation seems not trivial: https://gstreamer.freedesktop.org/documentation/application-development/advanced/pipeline-manipulation.html?gi-language=c

  • Understand and fix the crash happening when new source state is set to PLAYING

@EmmanuelP
EmmanuelP marked this pull request as draft August 14, 2024 07:46
@EmmanuelP EmmanuelP changed the title Wip/gst aravissrc switch test aravissrc gst element switch test Aug 14, 2024
@EmmanuelP
EmmanuelP force-pushed the wip/gst-aravissrc-switch-test branch from 6bcdd47 to f34367a Compare August 14, 2024 13:37
This test crashes as soon as the new source element is put in PLAYING mode. But
that is probably due to a mishandling of the pipeline. Doing this sort of
pipeline manipulation seems not trivial:
<https://gstreamer.freedesktop.org/documentation/application-development/advanced/pipeline-manipulation.html?gi-language=c>

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds a GStreamer-based test program intended to reproduce/debug a crash when switching the aravissrc element in a running pipeline, and updates the Meson build so this test is built when the GStreamer plugin is enabled.

Changes:

  • Move subdir('tests') after the GStreamer plugin configuration so tests can depend on gst_enabled.
  • Add a new arv-gst-test executable (built only when gst_enabled is true).
  • Introduce tests/arvgsttest.c, a small pipeline-manipulation program that removes and re-adds an aravissrc element.

Reviewed changes

Copilot reviewed 3 out of 3 changed files in this pull request and generated 9 comments.

File Description
meson.build Reorders tests subdir inclusion to occur after GStreamer plugin setup.
tests/meson.build Builds arv-gst-test when gst_enabled is true.
tests/arvgsttest.c New GStreamer pipeline manipulation test for switching aravissrc.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread tests/arvgsttest.c Resolved
Comment thread tests/arvgsttest.c
Comment on lines +53 to +55
printf ("Stop the source\n");
g_assert_cmpint (gst_element_set_state(source, GST_STATE_NULL), ==, GST_STATE_CHANGE_SUCCESS);

Copilot AI Feb 8, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

gst_element_set_state(source, GST_STATE_NULL) can return GST_STATE_CHANGE_ASYNC for live/streaming elements; asserting GST_STATE_CHANGE_SUCCESS can fail even when the transition is correct. Prefer checking for failure and then waiting for the element to actually reach NULL with gst_element_get_state() using a non-zero timeout before proceeding with unlink/remove.

Copilot uses AI. Check for mistakes.
Comment thread tests/arvgsttest.c Outdated
Comment on lines +56 to +63
gst_element_get_state (source, &current_state, &pending_state, 0);
printf ("source current state:%d - pending state:%d\n", current_state, pending_state);

sleep (1);

gst_element_unlink(source, sink);
g_assert (gst_bin_remove(GST_BIN(pipeline), source));

Copilot AI Feb 8, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The pipeline is modified (unlink + gst_bin_remove) while it is still in PLAYING and without waiting for the source to fully complete its NULL transition (gst_element_get_state(..., 0) returns immediately). This makes the manipulation timing-dependent and can trigger crashes. Wait for the NULL state transition to complete (non-zero timeout) before unlinking/removing, or pause/block the data flow per GStreamer pipeline manipulation guidance.

Copilot uses AI. Check for mistakes.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Paused the pipeline and waited for the source to reach NULL before unlinking/removing it, then resumed playback after adding the replacement. Commit: 0f07e39.

Comment thread tests/meson.build Resolved
Comment thread tests/arvgsttest.c Resolved
Comment thread tests/arvgsttest.c Resolved
Comment thread tests/meson.build Resolved
Comment thread tests/arvgsttest.c Resolved
Comment thread tests/arvgsttest.c Resolved
Co-authored-by: EmmanuelP <136864+EmmanuelP@users.noreply.github.com>
Co-authored-by: EmmanuelP <136864+EmmanuelP@users.noreply.github.com>
EmmanuelP and others added 2 commits October 23, 2026 10:50
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: EmmanuelP <136864+EmmanuelP@users.noreply.github.com>

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants