From b649e9b07674f563c8b4b44fde1076606b93e996 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= <sebastian@centricular.com>
Date: Sun, 31 Jan 2021 14:44:45 +0200
Subject: [PATCH] Use gst::PARAM_FLAG_MUTABLE_PLAYING and others consistently
 everywhere

Fixes https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/issues/139
---
 audio/audiofx/src/audioecho/imp.rs            |  8 +++----
 audio/audiofx/src/audioloudnorm/imp.rs        |  8 +++----
 audio/csound/src/filter/imp.rs                |  8 +++----
 generic/file/src/filesrc/imp.rs               |  2 +-
 generic/threadshare/src/inputselector/imp.rs  |  2 +-
 generic/threadshare/src/udpsink/imp.rs        | 13 +----------
 generic/threadshare/tests/pad.rs              | 11 ++++------
 net/reqwest/src/reqwesthttpsrc/imp.rs         | 22 +++++++++----------
 net/rusoto/src/aws_transcriber/imp.rs         |  6 ++---
 net/rusoto/src/s3sink/imp.rs                  |  8 +++----
 text/wrap/src/gsttextwrap/imp.rs              |  8 +++----
 tutorial/src/progressbin/imp.rs               |  6 ++---
 tutorial/src/rgb2gray/imp.rs                  |  4 ++--
 tutorial/src/sinesrc/imp.rs                   | 10 ++++-----
 utils/fallbackswitch/src/fallbacksrc/imp.rs   | 22 +++++++++----------
 .../src/fallbacksrc/video_fallback/imp.rs     |  4 ++--
 .../fallbackswitch/src/fallbackswitch/imp.rs  |  6 ++---
 utils/togglerecord/src/togglerecord/imp.rs    |  2 +-
 video/closedcaption/src/ccdetect/imp.rs       |  2 +-
 video/closedcaption/src/mcc_enc/imp.rs        |  4 ++--
 video/closedcaption/src/tttocea608/imp.rs     |  2 +-
 video/closedcaption/src/tttojson/imp.rs       |  2 +-
 video/gif/src/gifenc/imp.rs                   |  2 +-
 video/hsv/src/hsvdetector/imp.rs              | 12 +++++-----
 video/hsv/src/hsvfilter/imp.rs                | 10 ++++-----
 video/rav1e/src/rav1enc/imp.rs                | 20 ++++++++---------
 video/rspng/src/pngenc/imp.rs                 |  4 ++--
 27 files changed, 97 insertions(+), 111 deletions(-)

diff --git a/audio/audiofx/src/audioecho/imp.rs b/audio/audiofx/src/audioecho/imp.rs
index 19fa2decaa..8abf4de7b5 100644
--- a/audio/audiofx/src/audioecho/imp.rs
+++ b/audio/audiofx/src/audioecho/imp.rs
@@ -112,7 +112,7 @@ impl ObjectImpl for AudioEcho {
                     "Maximum delay of the echo in nanoseconds (can't be changed in PLAYING or PAUSED state)",
                     0, u64::MAX,
                     DEFAULT_MAX_DELAY,
-                    glib::ParamFlags::READWRITE,
+                    glib::ParamFlags::READWRITE | gst::PARAM_FLAG_MUTABLE_READY,
                 ),
                 glib::ParamSpec::uint64(
                     "delay",
@@ -121,7 +121,7 @@ impl ObjectImpl for AudioEcho {
                     0,
                     u64::MAX,
                     DEFAULT_DELAY,
-                    glib::ParamFlags::READWRITE,
+                    glib::ParamFlags::READWRITE | gst::PARAM_FLAG_MUTABLE_PLAYING,
                 ),
                 glib::ParamSpec::double(
                     "intensity",
@@ -130,7 +130,7 @@ impl ObjectImpl for AudioEcho {
                     0.0,
                     1.0,
                     DEFAULT_INTENSITY,
-                    glib::ParamFlags::READWRITE,
+                    glib::ParamFlags::READWRITE | gst::PARAM_FLAG_MUTABLE_PLAYING,
                 ),
                 glib::ParamSpec::double(
                     "feedback",
@@ -139,7 +139,7 @@ impl ObjectImpl for AudioEcho {
                     0.0,
                     1.0,
                     DEFAULT_FEEDBACK,
-                    glib::ParamFlags::READWRITE,
+                    glib::ParamFlags::READWRITE | gst::PARAM_FLAG_MUTABLE_PLAYING,
                 ),
             ]
         });
diff --git a/audio/audiofx/src/audioloudnorm/imp.rs b/audio/audiofx/src/audioloudnorm/imp.rs
index 102894e553..5553016411 100644
--- a/audio/audiofx/src/audioloudnorm/imp.rs
+++ b/audio/audiofx/src/audioloudnorm/imp.rs
@@ -1763,7 +1763,7 @@ impl ObjectImpl for AudioLoudNorm {
                     -70.0,
                     -5.0,
                     DEFAULT_LOUDNESS_TARGET,
-                    glib::ParamFlags::READWRITE,
+                    glib::ParamFlags::READWRITE | gst::PARAM_FLAG_MUTABLE_READY,
                 ),
                 glib::ParamSpec::double(
                     "loudness-range-target",
@@ -1772,7 +1772,7 @@ impl ObjectImpl for AudioLoudNorm {
                     1.0,
                     20.0,
                     DEFAULT_LOUDNESS_RANGE_TARGET,
-                    glib::ParamFlags::READWRITE,
+                    glib::ParamFlags::READWRITE | gst::PARAM_FLAG_MUTABLE_READY,
                 ),
                 glib::ParamSpec::double(
                     "max-true-peak",
@@ -1781,7 +1781,7 @@ impl ObjectImpl for AudioLoudNorm {
                     -9.0,
                     0.0,
                     DEFAULT_MAX_TRUE_PEAK,
-                    glib::ParamFlags::READWRITE,
+                    glib::ParamFlags::READWRITE | gst::PARAM_FLAG_MUTABLE_READY,
                 ),
                 glib::ParamSpec::double(
                     "offset",
@@ -1790,7 +1790,7 @@ impl ObjectImpl for AudioLoudNorm {
                     -99.0,
                     99.0,
                     DEFAULT_OFFSET,
-                    glib::ParamFlags::READWRITE,
+                    glib::ParamFlags::READWRITE | gst::PARAM_FLAG_MUTABLE_READY,
                 ),
             ]
         });
diff --git a/audio/csound/src/filter/imp.rs b/audio/csound/src/filter/imp.rs
index 9967587e4f..3a5c492a36 100644
--- a/audio/csound/src/filter/imp.rs
+++ b/audio/csound/src/filter/imp.rs
@@ -352,7 +352,7 @@ impl ObjectImpl for CsoundFilter {
                     "Loop",
                     "loop over the score (can be changed in PLAYING or PAUSED state)",
                     DEFAULT_LOOP,
-                    glib::ParamFlags::READWRITE,
+                    glib::ParamFlags::READWRITE | gst::PARAM_FLAG_MUTABLE_PLAYING,
                 ),
                 glib::ParamSpec::string(
                     "location",
@@ -360,7 +360,7 @@ impl ObjectImpl for CsoundFilter {
                     "Location of the csd file to be used by csound.
                     Use either location or CSD-text but not both at the same time, if so and error would be triggered",
                     None,
-                    glib::ParamFlags::READWRITE,
+                    glib::ParamFlags::READWRITE | gst::PARAM_FLAG_MUTABLE_READY,
                 ),
                 glib::ParamSpec::string(
                     "csd-text",
@@ -368,7 +368,7 @@ impl ObjectImpl for CsoundFilter {
                     "The content of a csd file passed as a String.
                     Use either location or csd-text but not both at the same time, if so and error would be triggered",
                     None,
-                    glib::ParamFlags::READWRITE,
+                    glib::ParamFlags::READWRITE | gst::PARAM_FLAG_MUTABLE_READY,
                 ),
                 glib::ParamSpec::double(
                     "score-offset",
@@ -377,7 +377,7 @@ impl ObjectImpl for CsoundFilter {
                     0.0,
                     f64::MAX,
                     SCORE_OFFSET_DEFAULT,
-                    glib::ParamFlags::READWRITE,
+                    glib::ParamFlags::READWRITE | gst::PARAM_FLAG_MUTABLE_READY,
                 ),
             ]
         });
diff --git a/generic/file/src/filesrc/imp.rs b/generic/file/src/filesrc/imp.rs
index 1d037c3712..742e0a17c6 100644
--- a/generic/file/src/filesrc/imp.rs
+++ b/generic/file/src/filesrc/imp.rs
@@ -146,7 +146,7 @@ impl ObjectImpl for FileSrc {
                 "File Location",
                 "Location of the file to read from",
                 None,
-                glib::ParamFlags::READWRITE,
+                glib::ParamFlags::READWRITE | gst::PARAM_FLAG_MUTABLE_READY,
             )]
         });
 
diff --git a/generic/threadshare/src/inputselector/imp.rs b/generic/threadshare/src/inputselector/imp.rs
index 36c7364953..fcd2d784ef 100644
--- a/generic/threadshare/src/inputselector/imp.rs
+++ b/generic/threadshare/src/inputselector/imp.rs
@@ -441,7 +441,7 @@ impl ObjectImpl for InputSelector {
                     "Active Pad",
                     "Currently active pad",
                     gst::Pad::static_type(),
-                    glib::ParamFlags::READWRITE,
+                    glib::ParamFlags::READWRITE | gst::PARAM_FLAG_MUTABLE_PLAYING,
                 ),
             ]
         });
diff --git a/generic/threadshare/src/udpsink/imp.rs b/generic/threadshare/src/udpsink/imp.rs
index 8b44588c11..7636709b3e 100644
--- a/generic/threadshare/src/udpsink/imp.rs
+++ b/generic/threadshare/src/udpsink/imp.rs
@@ -735,18 +735,7 @@ impl UdpSink {
         let socket_qualified: SocketQualified;
 
         if let Some(ref wrapped_socket) = wrapped_socket {
-            use std::net::UdpSocket;
-
-            let socket: UdpSocket;
-
-            #[cfg(unix)]
-            {
-                socket = wrapped_socket.get()
-            }
-            #[cfg(windows)]
-            {
-                socket = wrapped_socket.get()
-            }
+            let socket = wrapped_socket.get();
 
             let socket = context.enter(|| {
                 tokio::net::UdpSocket::from_std(socket).map_err(|err| {
diff --git a/generic/threadshare/tests/pad.rs b/generic/threadshare/tests/pad.rs
index e7d8bb960b..d5574464e2 100644
--- a/generic/threadshare/tests/pad.rs
+++ b/generic/threadshare/tests/pad.rs
@@ -666,7 +666,7 @@ mod imp_sink {
                     "Sender",
                     "Channel sender to forward the incoming items to",
                     ItemSender::get_type(),
-                    glib::ParamFlags::WRITABLE,
+                    glib::ParamFlags::WRITABLE | glib::ParamFlags::CONSTRUCT_ONLY,
                 )]
             });
 
@@ -793,15 +793,12 @@ fn setup(
     }
 
     // Sink
-    let sink_element = glib::Object::new::<ElementSinkTest>(&[]).unwrap();
+    let (sender, receiver) = mpsc::channel::<Item>(10);
+    let sink_element =
+        glib::Object::new::<ElementSinkTest>(&[("sender", &ItemSender { sender })]).unwrap();
     pipeline.add(&sink_element).unwrap();
     last_element.link(&sink_element).unwrap();
 
-    let (sender, receiver) = mpsc::channel::<Item>(10);
-    sink_element
-        .set_property("sender", &ItemSender { sender })
-        .unwrap();
-
     (pipeline, src_element, sink_element, receiver)
 }
 
diff --git a/net/reqwest/src/reqwesthttpsrc/imp.rs b/net/reqwest/src/reqwesthttpsrc/imp.rs
index 429d86c337..453b6dd39c 100644
--- a/net/reqwest/src/reqwesthttpsrc/imp.rs
+++ b/net/reqwest/src/reqwesthttpsrc/imp.rs
@@ -585,35 +585,35 @@ impl ObjectImpl for ReqwestHttpSrc {
                     "Location",
                     "URL to read from",
                     None,
-                    glib::ParamFlags::READWRITE,
+                    glib::ParamFlags::READWRITE | gst::PARAM_FLAG_MUTABLE_READY,
                 ),
                 glib::ParamSpec::string(
                     "user-agent",
                     "User-Agent",
                     "Value of the User-Agent HTTP request header field",
                     DEFAULT_USER_AGENT.into(),
-                    glib::ParamFlags::READWRITE,
+                    glib::ParamFlags::READWRITE | gst::PARAM_FLAG_MUTABLE_READY,
                 ),
                 glib::ParamSpec::boolean(
                     "is-live",
                     "Is Live",
                     "Act like a live source",
                     DEFAULT_IS_LIVE,
-                    glib::ParamFlags::READWRITE,
+                    glib::ParamFlags::READWRITE | gst::PARAM_FLAG_MUTABLE_READY,
                 ),
                 glib::ParamSpec::string(
                     "user-id",
                     "User-id",
                     "HTTP location URI user id for authentication",
                     None,
-                    glib::ParamFlags::READWRITE,
+                    glib::ParamFlags::READWRITE | gst::PARAM_FLAG_MUTABLE_READY,
                 ),
                 glib::ParamSpec::string(
                     "user-pw",
                     "User-pw",
                     "HTTP location URI user password for authentication",
                     None,
-                    glib::ParamFlags::READWRITE,
+                    glib::ParamFlags::READWRITE | gst::PARAM_FLAG_MUTABLE_READY,
                 ),
                 glib::ParamSpec::uint(
                     "timeout",
@@ -622,42 +622,42 @@ impl ObjectImpl for ReqwestHttpSrc {
                     0,
                     3600,
                     DEFAULT_TIMEOUT,
-                    glib::ParamFlags::READWRITE,
+                    glib::ParamFlags::READWRITE | gst::PARAM_FLAG_MUTABLE_READY,
                 ),
                 glib::ParamSpec::boolean(
                     "compress",
                     "Compress",
                     "Allow compressed content encodings",
                     DEFAULT_COMPRESS,
-                    glib::ParamFlags::READWRITE,
+                    glib::ParamFlags::READWRITE | gst::PARAM_FLAG_MUTABLE_READY,
                 ),
                 glib::ParamSpec::boxed(
                     "extra-headers",
                     "Extra Headers",
                     "Extra headers to append to the HTTP request",
                     gst::Structure::static_type(),
-                    glib::ParamFlags::READWRITE,
+                    glib::ParamFlags::READWRITE | gst::PARAM_FLAG_MUTABLE_READY,
                 ),
                 glib::ParamSpec::boxed(
                     "cookies",
                     "Cookies",
                     "HTTP request cookies",
                     Vec::<String>::static_type(),
-                    glib::ParamFlags::READWRITE,
+                    glib::ParamFlags::READWRITE | gst::PARAM_FLAG_MUTABLE_READY,
                 ),
                 glib::ParamSpec::boolean(
                     "iradio-mode",
                     "I-Radio Mode",
                     "Enable internet radio mode (ask server to send shoutcast/icecast metadata interleaved with the actual stream data",
                     DEFAULT_IRADIO_MODE,
-                    glib::ParamFlags::READWRITE,
+                    glib::ParamFlags::READWRITE | gst::PARAM_FLAG_MUTABLE_READY,
                 ),
                 glib::ParamSpec::boolean(
                     "keep-alive",
                     "Keep Alive",
                     "Use HTTP persistent connections",
                     DEFAULT_KEEP_ALIVE,
-                    glib::ParamFlags::READWRITE,
+                    glib::ParamFlags::READWRITE | gst::PARAM_FLAG_MUTABLE_READY,
                 ),
             ]
         });
diff --git a/net/rusoto/src/aws_transcriber/imp.rs b/net/rusoto/src/aws_transcriber/imp.rs
index 3e5a9ae80f..6bf85a8185 100644
--- a/net/rusoto/src/aws_transcriber/imp.rs
+++ b/net/rusoto/src/aws_transcriber/imp.rs
@@ -1043,14 +1043,14 @@ impl ObjectImpl for Transcriber {
                         <https://docs.aws.amazon.com/transcribe/latest/dg/how-streaming-transcription.html> \
                         for an up to date list of allowed languages",
                     Some("en-US"),
-                    glib::ParamFlags::READWRITE,
+                    glib::ParamFlags::READWRITE | gst::PARAM_FLAG_MUTABLE_READY,
                 ),
                 glib::ParamSpec::boolean(
                     "use-partial-results",
                     "Latency",
                     "Whether partial results from AWS should be used",
                     DEFAULT_USE_PARTIAL_RESULTS,
-                    glib::ParamFlags::READWRITE,
+                    glib::ParamFlags::READWRITE | gst::PARAM_FLAG_MUTABLE_PLAYING,
                 ),
                 glib::ParamSpec::uint(
                     "latency",
@@ -1059,7 +1059,7 @@ impl ObjectImpl for Transcriber {
                     2 * GRANULARITY_MS,
                     std::u32::MAX,
                     DEFAULT_LATENCY_MS,
-                    glib::ParamFlags::READWRITE,
+                    glib::ParamFlags::READWRITE | gst::PARAM_FLAG_MUTABLE_READY,
                 ),
             ]
         });
diff --git a/net/rusoto/src/s3sink/imp.rs b/net/rusoto/src/s3sink/imp.rs
index 0896419e49..dd9ec4696f 100644
--- a/net/rusoto/src/s3sink/imp.rs
+++ b/net/rusoto/src/s3sink/imp.rs
@@ -369,21 +369,21 @@ impl ObjectImpl for S3Sink {
                     "S3 Bucket",
                     "The bucket of the file to write",
                     None,
-                    glib::ParamFlags::READWRITE, /* + GST_PARAM_MUTABLE_READY) */
+                    glib::ParamFlags::READWRITE | gst::PARAM_FLAG_MUTABLE_READY,
                 ),
                 glib::ParamSpec::string(
                     "key",
                     "S3 Key",
                     "The key of the file to write",
                     None,
-                    glib::ParamFlags::READWRITE, /* + GST_PARAM_MUTABLE_READY) */
+                    glib::ParamFlags::READWRITE | gst::PARAM_FLAG_MUTABLE_READY,
                 ),
                 glib::ParamSpec::string(
                     "region",
                     "AWS Region",
                     "An AWS region (e.g. eu-west-2).",
                     None,
-                    glib::ParamFlags::READWRITE, /* + GST_PARAM_MUTABLE_READY) */
+                    glib::ParamFlags::READWRITE | gst::PARAM_FLAG_MUTABLE_READY,
                 ),
                 glib::ParamSpec::uint64(
                     "part-size",
@@ -392,7 +392,7 @@ impl ObjectImpl for S3Sink {
                     5 * 1024 * 1024,        // 5 MB
                     5 * 1024 * 1024 * 1024, // 5 GB
                     DEFAULT_BUFFER_SIZE,
-                    glib::ParamFlags::READWRITE, /* + GST_PARAM_MUTABLE_READY) */
+                    glib::ParamFlags::READWRITE | gst::PARAM_FLAG_MUTABLE_READY,
                 ),
             ]
         });
diff --git a/text/wrap/src/gsttextwrap/imp.rs b/text/wrap/src/gsttextwrap/imp.rs
index 86b6235779..0d62fd37ed 100644
--- a/text/wrap/src/gsttextwrap/imp.rs
+++ b/text/wrap/src/gsttextwrap/imp.rs
@@ -416,7 +416,7 @@ impl ObjectImpl for TextWrap {
                     "Path to a dictionary to load at runtime to perform hyphenation, see \
                         <https://docs.rs/crate/hyphenation/0.7.1> for more information",
                     None,
-                    glib::ParamFlags::READWRITE,
+                    glib::ParamFlags::READWRITE | gst::PARAM_FLAG_MUTABLE_PLAYING,
                 ),
                 glib::ParamSpec::uint(
                     "columns",
@@ -425,7 +425,7 @@ impl ObjectImpl for TextWrap {
                     1,
                     std::u32::MAX,
                     DEFAULT_COLUMNS,
-                    glib::ParamFlags::READWRITE,
+                    glib::ParamFlags::READWRITE | gst::PARAM_FLAG_MUTABLE_PLAYING,
                 ),
                 glib::ParamSpec::uint(
                     "lines",
@@ -434,7 +434,7 @@ impl ObjectImpl for TextWrap {
                     0,
                     std::u32::MAX,
                     DEFAULT_LINES,
-                    glib::ParamFlags::READWRITE,
+                    glib::ParamFlags::READWRITE | gst::PARAM_FLAG_MUTABLE_PLAYING,
                 ),
                 glib::ParamSpec::int64(
                     "accumulate-time",
@@ -443,7 +443,7 @@ impl ObjectImpl for TextWrap {
                     -1,
                     std::i64::MAX,
                     DEFAULT_ACCUMULATE,
-                    glib::ParamFlags::READWRITE,
+                    glib::ParamFlags::READWRITE | gst::PARAM_FLAG_MUTABLE_PLAYING,
                 ),
             ]
         });
diff --git a/tutorial/src/progressbin/imp.rs b/tutorial/src/progressbin/imp.rs
index 7410bc2b39..e00d6c0a3b 100644
--- a/tutorial/src/progressbin/imp.rs
+++ b/tutorial/src/progressbin/imp.rs
@@ -94,7 +94,7 @@ impl ObjectImpl for ProgressBin {
                 "Defines the output type of the progressbin",
                 ProgressBinOutput::static_type(),
                 DEFAULT_OUTPUT_TYPE as i32,
-                glib::ParamFlags::READWRITE,
+                glib::ParamFlags::READWRITE | gst::PARAM_FLAG_MUTABLE_PLAYING,
             )]
         });
 
@@ -237,8 +237,8 @@ impl BinImpl for ProgressBin {
             {
                 let s = msg.get_structure().unwrap();
                 if let Ok(percent) = s.get_some::<f64>("percent-double") {
-                    let output_type = self.output_type.lock().unwrap();
-                    match *output_type {
+                    let output_type = *self.output_type.lock().unwrap();
+                    match output_type {
                         ProgressBinOutput::Println => println!("progress: {:5.1}%", percent),
                         ProgressBinOutput::DebugCategory => {
                             gst_info!(CAT, "progress: {:5.1}%", percent);
diff --git a/tutorial/src/rgb2gray/imp.rs b/tutorial/src/rgb2gray/imp.rs
index 019e48d335..4db88fd8be 100644
--- a/tutorial/src/rgb2gray/imp.rs
+++ b/tutorial/src/rgb2gray/imp.rs
@@ -122,7 +122,7 @@ impl ObjectImpl for Rgb2Gray {
                     "Invert",
                     "Invert grayscale output",
                     DEFAULT_INVERT,
-                    glib::ParamFlags::READWRITE,
+                    glib::ParamFlags::READWRITE | gst::PARAM_FLAG_MUTABLE_PLAYING,
                 ),
                 glib::ParamSpec::uint(
                     "shift",
@@ -131,7 +131,7 @@ impl ObjectImpl for Rgb2Gray {
                     0,
                     255,
                     DEFAULT_SHIFT,
-                    glib::ParamFlags::READWRITE,
+                    glib::ParamFlags::READWRITE | gst::PARAM_FLAG_MUTABLE_PLAYING,
                 ),
             ]
         });
diff --git a/tutorial/src/sinesrc/imp.rs b/tutorial/src/sinesrc/imp.rs
index 558aaf58a2..e18c5a0233 100644
--- a/tutorial/src/sinesrc/imp.rs
+++ b/tutorial/src/sinesrc/imp.rs
@@ -182,7 +182,7 @@ impl ObjectImpl for SineSrc {
                     1,
                     u32::MAX,
                     DEFAULT_SAMPLES_PER_BUFFER,
-                    glib::ParamFlags::READWRITE,
+                    glib::ParamFlags::READWRITE | gst::PARAM_FLAG_MUTABLE_READY,
                 ),
                 glib::ParamSpec::uint(
                     "freq",
@@ -191,7 +191,7 @@ impl ObjectImpl for SineSrc {
                     1,
                     u32::MAX,
                     DEFAULT_FREQ,
-                    glib::ParamFlags::READWRITE,
+                    glib::ParamFlags::READWRITE | gst::PARAM_FLAG_MUTABLE_PLAYING,
                 ),
                 glib::ParamSpec::double(
                     "volume",
@@ -200,21 +200,21 @@ impl ObjectImpl for SineSrc {
                     0.0,
                     10.0,
                     DEFAULT_VOLUME,
-                    glib::ParamFlags::READWRITE,
+                    glib::ParamFlags::READWRITE | gst::PARAM_FLAG_MUTABLE_PLAYING,
                 ),
                 glib::ParamSpec::boolean(
                     "mute",
                     "Mute",
                     "Mute",
                     DEFAULT_MUTE,
-                    glib::ParamFlags::READWRITE,
+                    glib::ParamFlags::READWRITE | gst::PARAM_FLAG_MUTABLE_PLAYING,
                 ),
                 glib::ParamSpec::boolean(
                     "is-live",
                     "Is Live",
                     "(Pseudo) live output",
                     DEFAULT_IS_LIVE,
-                    glib::ParamFlags::READWRITE,
+                    glib::ParamFlags::READWRITE | gst::PARAM_FLAG_MUTABLE_READY,
                 ),
             ]
         });
diff --git a/utils/fallbackswitch/src/fallbacksrc/imp.rs b/utils/fallbackswitch/src/fallbacksrc/imp.rs
index f4ceb1ebb4..26631f3468 100644
--- a/utils/fallbackswitch/src/fallbacksrc/imp.rs
+++ b/utils/fallbackswitch/src/fallbacksrc/imp.rs
@@ -204,29 +204,29 @@ impl ObjectImpl for FallbackSrc {
                     "Enable Audio",
                     "Enable the audio stream, this will output silence if there's no audio in the configured URI",
                     true,
-                    glib::ParamFlags::READWRITE,
+                    glib::ParamFlags::READWRITE | gst::PARAM_FLAG_MUTABLE_READY,
                 ),
                 glib::ParamSpec::boolean(
                     "enable-video",
                     "Enable Video",
                     "Enable the video stream, this will output black or the fallback video if there's no video in the configured URI",
                     true,
-                    glib::ParamFlags::READWRITE,
+                    glib::ParamFlags::READWRITE | gst::PARAM_FLAG_MUTABLE_READY,
                 ),
-                glib::ParamSpec::string("uri", "URI", "URI to use", None, glib::ParamFlags::READWRITE),
+                glib::ParamSpec::string("uri", "URI", "URI to use", None, glib::ParamFlags::READWRITE | gst::PARAM_FLAG_MUTABLE_READY),
                 glib::ParamSpec::object(
                     "source",
                     "Source",
                     "Source to use instead of the URI",
                     gst::Element::static_type(),
-                    glib::ParamFlags::READWRITE,
+                    glib::ParamFlags::READWRITE | gst::PARAM_FLAG_MUTABLE_READY,
                 ),
                 glib::ParamSpec::string(
                     "fallback-uri",
                     "Fallback URI",
                     "Fallback URI to use for video in case the main stream doesn't work",
                     None,
-                    glib::ParamFlags::READWRITE,
+                    glib::ParamFlags::READWRITE | gst::PARAM_FLAG_MUTABLE_READY,
                 ),
                 glib::ParamSpec::uint64(
                     "timeout",
@@ -235,7 +235,7 @@ impl ObjectImpl for FallbackSrc {
                     0,
                     std::u64::MAX,
                     5 * gst::SECOND_VAL,
-                    glib::ParamFlags::READWRITE,
+                    glib::ParamFlags::READWRITE | gst::PARAM_FLAG_MUTABLE_READY,
                 ),
                 glib::ParamSpec::uint64(
                     "restart-timeout",
@@ -244,7 +244,7 @@ impl ObjectImpl for FallbackSrc {
                     0,
                     std::u64::MAX,
                     5 * gst::SECOND_VAL,
-                    glib::ParamFlags::READWRITE,
+                    glib::ParamFlags::READWRITE | gst::PARAM_FLAG_MUTABLE_READY,
                 ),
                 glib::ParamSpec::uint64(
                     "retry-timeout",
@@ -253,14 +253,14 @@ impl ObjectImpl for FallbackSrc {
                     0,
                     std::u64::MAX,
                     60 * gst::SECOND_VAL,
-                    glib::ParamFlags::READWRITE,
+                    glib::ParamFlags::READWRITE | gst::PARAM_FLAG_MUTABLE_READY,
                 ),
                 glib::ParamSpec::boolean(
                     "restart-on-eos",
                     "Restart on EOS",
                     "Restart source on EOS",
                     false,
-                    glib::ParamFlags::READWRITE,
+                    glib::ParamFlags::READWRITE | gst::PARAM_FLAG_MUTABLE_READY,
                 ),
                 glib::ParamSpec::enum_(
                     "status",
@@ -279,7 +279,7 @@ impl ObjectImpl for FallbackSrc {
                     0,
                     std::u64::MAX,
                     0,
-                    glib::ParamFlags::READWRITE,
+                    glib::ParamFlags::READWRITE | gst::PARAM_FLAG_MUTABLE_READY,
                 ),
                 glib::ParamSpec::int64(
                     "buffer-duration",
@@ -288,7 +288,7 @@ impl ObjectImpl for FallbackSrc {
                     -1,
                     std::i64::MAX,
                     -1,
-                    glib::ParamFlags::READWRITE,
+                    glib::ParamFlags::READWRITE | gst::PARAM_FLAG_MUTABLE_READY,
                 ),
                 glib::ParamSpec::boxed(
                     "statistics",
diff --git a/utils/fallbackswitch/src/fallbacksrc/video_fallback/imp.rs b/utils/fallbackswitch/src/fallbacksrc/video_fallback/imp.rs
index 20f2964edb..ca8053fc6d 100644
--- a/utils/fallbackswitch/src/fallbacksrc/video_fallback/imp.rs
+++ b/utils/fallbackswitch/src/fallbacksrc/video_fallback/imp.rs
@@ -94,7 +94,7 @@ impl ObjectImpl for VideoFallbackSource {
                     "URI",
                     "URI to use for video in case the main stream doesn't work",
                     None,
-                    glib::ParamFlags::READWRITE,
+                    glib::ParamFlags::READWRITE | glib::ParamFlags::CONSTRUCT_ONLY,
                 ),
                 glib::ParamSpec::uint64(
                     "min-latency",
@@ -103,7 +103,7 @@ impl ObjectImpl for VideoFallbackSource {
                     0,
                     std::u64::MAX,
                     0,
-                    glib::ParamFlags::READWRITE,
+                    glib::ParamFlags::READWRITE | glib::ParamFlags::CONSTRUCT_ONLY,
                 ),
             ]
         });
diff --git a/utils/fallbackswitch/src/fallbackswitch/imp.rs b/utils/fallbackswitch/src/fallbackswitch/imp.rs
index 39350b1a07..c5fcd951ec 100644
--- a/utils/fallbackswitch/src/fallbackswitch/imp.rs
+++ b/utils/fallbackswitch/src/fallbackswitch/imp.rs
@@ -679,21 +679,21 @@ impl ObjectImpl for FallbackSwitch {
                     0,
                     std::u64::MAX,
                     DEFAULT_TIMEOUT,
-                    glib::ParamFlags::READWRITE,
+                    glib::ParamFlags::READWRITE | gst::PARAM_FLAG_MUTABLE_READY,
                 ),
                 glib::ParamSpec::object(
                     "active-pad",
                     "Active Pad",
                     "Currently active pad. Writes are ignored if auto-switch=true",
                     gst::Pad::static_type(),
-                    glib::ParamFlags::READWRITE,
+                    glib::ParamFlags::READWRITE | gst::PARAM_FLAG_MUTABLE_PLAYING,
                 ),
                 glib::ParamSpec::boolean(
                     "auto-switch",
                     "Automatically switch pads",
                     "Automatically switch pads (If true, prefer primary sink, otherwise manual selection via the active-pad property)",
                     DEFAULT_AUTO_SWITCH,
-                    glib::ParamFlags::READWRITE,
+                    glib::ParamFlags::READWRITE| gst::PARAM_FLAG_MUTABLE_READY,
                 ),
                 glib::ParamSpec::enum_(
                     "primary-health",
diff --git a/utils/togglerecord/src/togglerecord/imp.rs b/utils/togglerecord/src/togglerecord/imp.rs
index 37246dbef4..cb28e408b0 100644
--- a/utils/togglerecord/src/togglerecord/imp.rs
+++ b/utils/togglerecord/src/togglerecord/imp.rs
@@ -1711,7 +1711,7 @@ impl ObjectImpl for ToggleRecord {
                     "Record",
                     "Enable/disable recording",
                     DEFAULT_RECORD,
-                    glib::ParamFlags::READWRITE,
+                    glib::ParamFlags::READWRITE | gst::PARAM_FLAG_MUTABLE_PLAYING,
                 ),
                 glib::ParamSpec::boolean(
                     "recording",
diff --git a/video/closedcaption/src/ccdetect/imp.rs b/video/closedcaption/src/ccdetect/imp.rs
index 6506a1b2a3..deaa430b21 100644
--- a/video/closedcaption/src/ccdetect/imp.rs
+++ b/video/closedcaption/src/ccdetect/imp.rs
@@ -380,7 +380,7 @@ impl ObjectImpl for CCDetect {
                     0,
                     u64::MAX,
                     DEFAULT_WINDOW,
-                    glib::ParamFlags::READWRITE,
+                    glib::ParamFlags::READWRITE | gst::PARAM_FLAG_MUTABLE_PLAYING,
                 ),
                 glib::ParamSpec::boolean(
                     "cc608",
diff --git a/video/closedcaption/src/mcc_enc/imp.rs b/video/closedcaption/src/mcc_enc/imp.rs
index e76eebb748..76a1792ad0 100644
--- a/video/closedcaption/src/mcc_enc/imp.rs
+++ b/video/closedcaption/src/mcc_enc/imp.rs
@@ -510,14 +510,14 @@ impl ObjectImpl for MccEnc {
                     "UUID",
                     "UUID for the output file",
                     None,
-                    glib::ParamFlags::READWRITE,
+                    glib::ParamFlags::READWRITE | gst::PARAM_FLAG_MUTABLE_READY,
                 ),
                 glib::ParamSpec::boxed(
                     "creation-date",
                     "Creation Date",
                     "Creation date for the output file",
                     glib::DateTime::static_type(),
-                    glib::ParamFlags::READWRITE,
+                    glib::ParamFlags::READWRITE | gst::PARAM_FLAG_MUTABLE_READY,
                 ),
             ]
         });
diff --git a/video/closedcaption/src/tttocea608/imp.rs b/video/closedcaption/src/tttocea608/imp.rs
index cab504e4e0..f741d1b4c3 100644
--- a/video/closedcaption/src/tttocea608/imp.rs
+++ b/video/closedcaption/src/tttocea608/imp.rs
@@ -996,7 +996,7 @@ impl ObjectImpl for TtToCea608 {
                 "Which mode to operate in",
                 Cea608Mode::static_type(),
                 DEFAULT_MODE as i32,
-                glib::ParamFlags::READWRITE,
+                glib::ParamFlags::READWRITE | gst::PARAM_FLAG_MUTABLE_READY,
             )]
         });
 
diff --git a/video/closedcaption/src/tttojson/imp.rs b/video/closedcaption/src/tttojson/imp.rs
index 659df5bb40..f7e4df7dd7 100644
--- a/video/closedcaption/src/tttojson/imp.rs
+++ b/video/closedcaption/src/tttojson/imp.rs
@@ -237,7 +237,7 @@ impl ObjectImpl for TtToJson {
                 "Which mode to operate in",
                 Cea608Mode::static_type(),
                 DEFAULT_MODE as i32,
-                glib::ParamFlags::READWRITE,
+                glib::ParamFlags::READWRITE | gst::PARAM_FLAG_MUTABLE_READY,
             )]
         });
 
diff --git a/video/gif/src/gifenc/imp.rs b/video/gif/src/gifenc/imp.rs
index c97a6ee34f..6ae6db6002 100644
--- a/video/gif/src/gifenc/imp.rs
+++ b/video/gif/src/gifenc/imp.rs
@@ -158,7 +158,7 @@ impl ObjectImpl for GifEnc {
                 -1,
                 std::u16::MAX as i32,
                 DEFAULT_REPEAT,
-                glib::ParamFlags::READWRITE,
+                glib::ParamFlags::READWRITE | gst::PARAM_FLAG_MUTABLE_READY,
             )]
         });
 
diff --git a/video/hsv/src/hsvdetector/imp.rs b/video/hsv/src/hsvdetector/imp.rs
index 03e047411d..82338c9439 100644
--- a/video/hsv/src/hsvdetector/imp.rs
+++ b/video/hsv/src/hsvdetector/imp.rs
@@ -106,7 +106,7 @@ impl ObjectImpl for HsvDetector {
                     f32::MIN,
                     f32::MAX,
                     DEFAULT_HUE_REF,
-                    glib::ParamFlags::READWRITE,
+                    glib::ParamFlags::READWRITE | gst::PARAM_FLAG_MUTABLE_PLAYING,
                 ),
                 glib::ParamSpec::float(
                     "hue-var",
@@ -115,7 +115,7 @@ impl ObjectImpl for HsvDetector {
                     0.0,
                     180.0,
                     DEFAULT_HUE_VAR,
-                    glib::ParamFlags::READWRITE,
+                    glib::ParamFlags::READWRITE | gst::PARAM_FLAG_MUTABLE_PLAYING,
                 ),
                 glib::ParamSpec::float(
                     "saturation-ref",
@@ -124,7 +124,7 @@ impl ObjectImpl for HsvDetector {
                     0.0,
                     1.0,
                     DEFAULT_SATURATION_REF,
-                    glib::ParamFlags::READWRITE,
+                    glib::ParamFlags::READWRITE | gst::PARAM_FLAG_MUTABLE_PLAYING,
                 ),
                 glib::ParamSpec::float(
                     "saturation-var",
@@ -133,7 +133,7 @@ impl ObjectImpl for HsvDetector {
                     0.0,
                     1.0,
                     DEFAULT_SATURATION_VAR,
-                    glib::ParamFlags::READWRITE,
+                    glib::ParamFlags::READWRITE | gst::PARAM_FLAG_MUTABLE_PLAYING,
                 ),
                 glib::ParamSpec::float(
                     "value-ref",
@@ -142,7 +142,7 @@ impl ObjectImpl for HsvDetector {
                     0.0,
                     1.0,
                     DEFAULT_VALUE_REF,
-                    glib::ParamFlags::READWRITE,
+                    glib::ParamFlags::READWRITE | gst::PARAM_FLAG_MUTABLE_PLAYING,
                 ),
                 glib::ParamSpec::float(
                     "value-var",
@@ -151,7 +151,7 @@ impl ObjectImpl for HsvDetector {
                     0.0,
                     1.0,
                     DEFAULT_VALUE_VAR,
-                    glib::ParamFlags::READWRITE,
+                    glib::ParamFlags::READWRITE | gst::PARAM_FLAG_MUTABLE_PLAYING,
                 ),
             ]
         });
diff --git a/video/hsv/src/hsvfilter/imp.rs b/video/hsv/src/hsvfilter/imp.rs
index bbbb2180a5..747e4e5c29 100644
--- a/video/hsv/src/hsvfilter/imp.rs
+++ b/video/hsv/src/hsvfilter/imp.rs
@@ -101,7 +101,7 @@ impl ObjectImpl for HsvFilter {
                     f32::MIN,
                     f32::MAX,
                     DEFAULT_HUE_SHIFT,
-                    glib::ParamFlags::READWRITE,
+                    glib::ParamFlags::READWRITE | gst::PARAM_FLAG_MUTABLE_PLAYING,
                 ),
                 glib::ParamSpec::float(
                     "saturation-mul",
@@ -110,7 +110,7 @@ impl ObjectImpl for HsvFilter {
                     f32::MIN,
                     f32::MAX,
                     DEFAULT_SATURATION_MUL,
-                    glib::ParamFlags::READWRITE,
+                    glib::ParamFlags::READWRITE | gst::PARAM_FLAG_MUTABLE_PLAYING,
                 ),
                 glib::ParamSpec::float(
                     "saturation-off",
@@ -119,7 +119,7 @@ impl ObjectImpl for HsvFilter {
                     f32::MIN,
                     f32::MAX,
                     DEFAULT_SATURATION_OFF,
-                    glib::ParamFlags::READWRITE,
+                    glib::ParamFlags::READWRITE | gst::PARAM_FLAG_MUTABLE_PLAYING,
                 ),
                 glib::ParamSpec::float(
                     "value-mul",
@@ -128,7 +128,7 @@ impl ObjectImpl for HsvFilter {
                     f32::MIN,
                     f32::MAX,
                     DEFAULT_VALUE_MUL,
-                    glib::ParamFlags::READWRITE,
+                    glib::ParamFlags::READWRITE | gst::PARAM_FLAG_MUTABLE_PLAYING,
                 ),
                 glib::ParamSpec::float(
                     "value-off",
@@ -137,7 +137,7 @@ impl ObjectImpl for HsvFilter {
                     f32::MIN,
                     f32::MAX,
                     DEFAULT_VALUE_OFF,
-                    glib::ParamFlags::READWRITE,
+                    glib::ParamFlags::READWRITE | gst::PARAM_FLAG_MUTABLE_PLAYING,
                 ),
             ]
         });
diff --git a/video/rav1e/src/rav1enc/imp.rs b/video/rav1e/src/rav1enc/imp.rs
index 2974a662f2..6516f6ceb0 100644
--- a/video/rav1e/src/rav1enc/imp.rs
+++ b/video/rav1e/src/rav1enc/imp.rs
@@ -233,14 +233,14 @@ impl ObjectImpl for Rav1Enc {
                     0,
                     10,
                     DEFAULT_SPEED_PRESET,
-                    glib::ParamFlags::READWRITE,
+                    glib::ParamFlags::READWRITE | gst::PARAM_FLAG_MUTABLE_READY,
                 ),
                 glib::ParamSpec::boolean(
                     "low-latency",
                     "Low Latency",
                     "Low Latency",
                     DEFAULT_LOW_LATENCY,
-                    glib::ParamFlags::READWRITE,
+                    glib::ParamFlags::READWRITE | gst::PARAM_FLAG_MUTABLE_READY,
                 ),
                 glib::ParamSpec::uint64(
                     "min-key-frame-interval",
@@ -249,7 +249,7 @@ impl ObjectImpl for Rav1Enc {
                     0,
                     std::u64::MAX,
                     DEFAULT_MIN_KEY_FRAME_INTERVAL,
-                    glib::ParamFlags::READWRITE,
+                    glib::ParamFlags::READWRITE | gst::PARAM_FLAG_MUTABLE_READY,
                 ),
                 glib::ParamSpec::uint64(
                     "max-key-frame-interval",
@@ -258,7 +258,7 @@ impl ObjectImpl for Rav1Enc {
                     0,
                     std::u64::MAX,
                     DEFAULT_MAX_KEY_FRAME_INTERVAL,
-                    glib::ParamFlags::READWRITE,
+                    glib::ParamFlags::READWRITE | gst::PARAM_FLAG_MUTABLE_READY,
                 ),
                 glib::ParamSpec::int(
                     "bitrate",
@@ -267,7 +267,7 @@ impl ObjectImpl for Rav1Enc {
                     0,
                     std::i32::MAX,
                     DEFAULT_BITRATE,
-                    glib::ParamFlags::READWRITE,
+                    glib::ParamFlags::READWRITE | gst::PARAM_FLAG_MUTABLE_READY,
                 ),
                 glib::ParamSpec::uint(
                     "quantizer",
@@ -276,7 +276,7 @@ impl ObjectImpl for Rav1Enc {
                     0,
                     std::u32::MAX,
                     DEFAULT_QUANTIZER as u32,
-                    glib::ParamFlags::READWRITE,
+                    glib::ParamFlags::READWRITE | gst::PARAM_FLAG_MUTABLE_READY,
                 ),
                 glib::ParamSpec::uint(
                     "tile-cols",
@@ -285,7 +285,7 @@ impl ObjectImpl for Rav1Enc {
                     0,
                     std::u32::MAX,
                     DEFAULT_TILE_COLS as u32,
-                    glib::ParamFlags::READWRITE,
+                    glib::ParamFlags::READWRITE | gst::PARAM_FLAG_MUTABLE_READY,
                 ),
                 glib::ParamSpec::uint(
                     "tile-rows",
@@ -294,7 +294,7 @@ impl ObjectImpl for Rav1Enc {
                     0,
                     std::u32::MAX,
                     DEFAULT_TILE_ROWS as u32,
-                    glib::ParamFlags::READWRITE,
+                    glib::ParamFlags::READWRITE | gst::PARAM_FLAG_MUTABLE_READY,
                 ),
                 glib::ParamSpec::uint(
                     "tiles",
@@ -303,7 +303,7 @@ impl ObjectImpl for Rav1Enc {
                     0,
                     std::u32::MAX,
                     DEFAULT_TILES as u32,
-                    glib::ParamFlags::READWRITE,
+                    glib::ParamFlags::READWRITE | gst::PARAM_FLAG_MUTABLE_READY,
                 ),
                 glib::ParamSpec::uint(
                     "threads",
@@ -312,7 +312,7 @@ impl ObjectImpl for Rav1Enc {
                     0,
                     std::u32::MAX,
                     DEFAULT_THREADS as u32,
-                    glib::ParamFlags::READWRITE,
+                    glib::ParamFlags::READWRITE | gst::PARAM_FLAG_MUTABLE_READY,
                 ),
             ]
         });
diff --git a/video/rspng/src/pngenc/imp.rs b/video/rspng/src/pngenc/imp.rs
index 42e5854a58..145c6054a3 100644
--- a/video/rspng/src/pngenc/imp.rs
+++ b/video/rspng/src/pngenc/imp.rs
@@ -193,7 +193,7 @@ impl ObjectImpl for PngEncoder {
                     "Selects the compression algorithm to use",
                     CompressionLevel::static_type(),
                     DEFAULT_COMPRESSION_LEVEL as i32,
-                    glib::ParamFlags::READWRITE,
+                    glib::ParamFlags::READWRITE | gst::PARAM_FLAG_MUTABLE_READY,
                 ),
                 glib::ParamSpec::enum_(
                     "filter",
@@ -201,7 +201,7 @@ impl ObjectImpl for PngEncoder {
                     "Selects the filter type to applied",
                     FilterType::static_type(),
                     DEFAULT_FILTER_TYPE as i32,
-                    glib::ParamFlags::READWRITE,
+                    glib::ParamFlags::READWRITE | gst::PARAM_FLAG_MUTABLE_READY,
                 ),
             ]
         });
-- 
GitLab