playbin3: no longer able to unset suburi
See the test app below doing the following:
- playing a video (uri) with audio (suburi)
- then reset
playbin3
and play the video alone.
During the second run the audio is still played while it shouldn't.
This is a regression introduced by 6bffbe28
cc @bilboed
use gst::prelude::*;
const CDG: &str = "https://gitlab.freedesktop.org/gdesmott/karapulse/-/raw/main/tests/medias/test.cdg?inline=false";
const MP3: &str = "https://gitlab.freedesktop.org/gdesmott/karapulse/-/raw/main/tests/medias/test.mp3?inline=false";
fn main() {
gst::init().unwrap();
gstcdg::plugin_register_static().unwrap();
let playbin = gst::ElementFactory::make("playbin3").build().unwrap();
playbin.set_property("uri", CDG);
playbin.set_property("suburi", MP3);
let bus = playbin.bus().unwrap();
playbin.set_state(gst::State::Playing).unwrap();
let mut restarted = false;
for msg in bus.iter_timed(gst::ClockTime::NONE) {
use gst::MessageView;
match msg.view() {
MessageView::Eos(..) => {
if !restarted {
dbg!("restart");
playbin.set_state(gst::State::Null).unwrap();
playbin.set_property("uri", CDG);
let suburi: Option<String> = None;
playbin.set_property("suburi", &suburi);
playbin.set_state(gst::State::Playing).unwrap();
restarted = true;
} else {
break;
}
}
MessageView::Error(err) => {
println!(
"Error from {:?}: {} ({:?})",
err.src().map(|s| s.path_string()),
err.error(),
err.debug()
);
break;
}
_ => (),
}
}
playbin.set_state(gst::State::Null).unwrap();
}
[package]
name = "test-gst"
version = "0.1.0"
edition = "2021"
[dependencies]
gst = { package = "gstreamer", version = "0.19", features = ["v1_20"] }
gst-plugin-cdg = "0.9"