GStreamer issueshttps://gitlab.freedesktop.org/groups/gstreamer/-/issues2022-11-14T16:30:49Zhttps://gitlab.freedesktop.org/gstreamer/gstreamer-rs/-/issues/423MacOs M1 Library not loaded: @rpath/libgobject-2.0.0.dylib2022-11-14T16:30:49ZMr.BlackMacOs M1 Library not loaded: @rpath/libgobject-2.0.0.dylibhi, i also had the same problem.
The `cargo build` succeeded.
However, `cargo run ` the following error occurred
- `Library not loaded: @rpath/libgobject-2.0.0.dylib`
```bash
Finished dev [unoptimized + debuginfo] target(s) in 18...hi, i also had the same problem.
The `cargo build` succeeded.
However, `cargo run ` the following error occurred
- `Library not loaded: @rpath/libgobject-2.0.0.dylib`
```bash
Finished dev [unoptimized + debuginfo] target(s) in 18.98s
Running `target/debug/rust_gstream_rtmp`
dyld[21579]: Library not loaded: @rpath/libgobject-2.0.0.dylib
Referenced from: <49FDC051-D944-3BFE-9772-A24BF847CA6C> /Users/ken/codes/rust_project/gstreamer_test_1/rust_gstream_rtmp/target/debug/rust_gstream_rtmp
Reason: tried: '/System/Volumes/Preboot/Cryptexes/OS@rpath/libgobject-2.0.0.dylib' (no such file), '/Users/ken/codes/rust_project/gstreamer_test_1/rust_gstream_rtmp/target/debug/deps/libgobject-2.0.0.dylib' (no such file), '/Users/ken/codes/rust_project/gstreamer_test_1/rust_gstream_rtmp/target/debug/libgobject-2.0.0.dylib' (no such file), '/Users/ken/.rustup/toolchains/stable-aarch64-apple-darwin/lib/rustlib/aarch64-apple-darwin/lib/libgobject-2.0.0.dylib' (no such file), '/Users/ken/.rustup/toolchains/stable-aarch64-apple-darwin/lib/libgobject-2.0.0.dylib' (no such file), '/Users/ken/lib/libgobject-2.0.0.dylib' (no such file), '/usr/local/lib/libgobject-2.0.0.dylib' (no such file), '/usr/lib/libgobject-2.0.0.dylib' (no such file, not in dyld cache)
[1] 21579 abort cargo run
```
I'm pretty sure I didn't install from `brew`. all installation packages are from official.
```
We recommend using the official GStreamer binaries over Homebrew, especially as GStreamer in Homebrew is [currently broken]
```
Environments : **M1 Mac**
`~/.zshrc`
```bash
export PKG_CONFIG_PATH="/Library/Frameworks/GStreamer.framework/Versions/1.0/lib/pkgconfig${PKG_CONFIG_PATH:+:$PKG_CONFIG_PATH}"
export PATH="/Library/Frameworks/GStreamer.framework/Versions/1.0/bin${PATH:+:$PATH}"
```
`GStreamer Version`
```bash
❯ gst-launch-1.0 --version
gst-launch-1.0 version 1.21.1
GStreamer 1.21.1
Unknown package origin
```
`Rust Version`
```bash
❯ rustup -V
rustup 1.25.1 (bb60b1e89 2022-07-12)
info: This is the version for the rustup toolchain manager, not the rustc compiler.
info: The currently active `rustc` version is `rustc 1.65.0 (897e37553 2022-11-02)`
```
`cargo.toml`
```toml
[package]
name = "rust_gstream_rtmp"
version = "0.1.0"
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
gstreamer = "0.19.2"
[target.'cfg(target_os = "macos")'.dependencies]
cocoa = "0.24"
```
`main.rs`
```rust
use gstreamer::prelude::*;
mod tutorials_common;
fn tutorial_basic_1() {
// Initialize GStreamer
gstreamer::init().unwrap();
// Build the pipeline
let uri =
"https://www.freedesktop.org/software/gstreamer-sdk/data/media/sintel_trailer-480p.webm";
let pipeline = gstreamer::parse_launch(&format!("playbin uri={}", uri)).unwrap();
// Start playing
pipeline
.set_state(gstreamer::State::Playing)
.expect("Unable to set the pipeline to the `Playing` state");
// Wait until error or EOS
let bus = pipeline.bus().unwrap();
for msg in bus.iter_timed(gstreamer::ClockTime::NONE) {
use gstreamer::MessageView;
match msg.view() {
MessageView::Eos(..) => break,
MessageView::Error(err) => {
println!(
"Error from {:?}: {} ({:?})",
err.src().map(|s| s.path_string()),
err.error(),
err.debug()
);
break;
}
_ => (),
}
}
// Shutdown pipeline
pipeline
.set_state(gstreamer::State::Null)
.expect("Unable to set the pipeline to the `Null` state");
}
fn main() {
// tutorials_common::run is only required to set up the application environment on macOS
// (but not necessary in normal Cocoa applications where this is set up automatically)
tutorials_common::run(tutorial_basic_1);
}
```https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/1569gstv4l2videodec.c: fix to merged item !2517 to allow "fluster test" with out-...2022-11-16T10:41:23ZF. Duncanhgstv4l2videodec.c: fix to merged item !2517 to allow "fluster test" with out-of-order frames to succeed@ming.qian in a comment on !2517 (merged) notes that it breaks a "fluster test" for certain drivers that sends
video frames in unusual orders not starting with frame 0.
https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_reque...@ming.qian in a comment on !2517 (merged) notes that it breaks a "fluster test" for certain drivers that sends
video frames in unusual orders not starting with frame 0.
https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2517#note_1632105
The problem fixed in !2517 was that a Caps renegotiation triggered a driver bug where the driver incorrectly dropped the initial frames, leaving them to be
dropped one-by-one (with error-messages spamming each time) once they were 100 frames older than current frame.
The fix in !2517 dropped the "lost frames" (all together, with a single error message) the first time an undropped frame is successfully dequeued from the driver.
@ming.qian reported that a "fluster test" which send frames in order 2,1,0,5,4,3.... fails because it doesnt match the assumption that frames dequeue in order of increasing frame number.
Solution is to postpone the cleanup till frame 100 is received, as prior to !2517. Consecutive pending frames starting with frame 0 will be removed in one go, if the oldest pending frame is frame 0 when the current frame is frame 100.
A merge request !3398 has been submitted.https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/1567Unable to install with meson install2022-11-14T15:23:18ZAlex CUnable to install with meson installHi all,
I've installed everything (on Ubuntu 22.04) following the instructions and was able to build the gstreamer. But, I'm having troubles using what I've built... When I run (with the --prefix or without it):
```
meson build
ninja -C...Hi all,
I've installed everything (on Ubuntu 22.04) following the instructions and was able to build the gstreamer. But, I'm having troubles using what I've built... When I run (with the --prefix or without it):
```
meson build
ninja -C build
meson install -C build
```
I'm getting the error:
```
ninja: Entering directory `/home/alexc/gstreamer/build'
[1/121] Generating subprojects/FFmpeg/libavutil/ffversion.h with a custom command
Installing subdir /home/alexc/gstreamer/subprojects/gst-devtools/validate/data/scenarios/includes to /usr/local/share/gstreamer-1.0/validate/scenarios/includes
Installation failed due to insufficient permissions.
Attempting to use polkit to gain elevated privileges...
Traceback (most recent call last):
File "/home/alexc/.local/bin/meson", line 5, in <module>
from mesonbuild.mesonmain import main
ModuleNotFoundError: No module named 'mesonbuild'
```
I tried to install meson as root but only got more warnings and errors.
Is something missing in the instructions (or what did I do wrong)?
**Update:**
*When I do the same using docker container with older (20.04) Ubuntu, it seems to work.*
Thanks,
Alexhttps://gitlab.freedesktop.org/gstreamer/gstreamer-vaapi/-/issues/335vp9 causes Internal data stream error2024-03-05T06:54:41ZBram Stolkvp9 causes Internal data stream errorA pipeline with `vaapih264enc ! vaapih264dec` works fine.
Similarly, `vaapih265enc ! vaapih265dec` works, but if I try `vaapivp9enc ! vaapivp9dec` I get an internal data stream error:
```
$ gst-launch-1.0 videotestsrc ! video/x-raw,wi...A pipeline with `vaapih264enc ! vaapih264dec` works fine.
Similarly, `vaapih265enc ! vaapih265dec` works, but if I try `vaapivp9enc ! vaapivp9dec` I get an internal data stream error:
```
$ gst-launch-1.0 videotestsrc ! video/x-raw,width=1920,height=1080 ! vaapivp9enc ! vaapivp9dec ! vaapisink
Setting pipeline to PAUSED ...
Pipeline is PREROLLING ...
Got context from element 'vaapisink0': gst.vaapi.Display=context, gst.vaapi.Display=(GstVaapiDisplay)"\(GstVaapiDisplayWayland\)\ vaapidisplaywayland0", gst.vaapi.Display.GObject=(GstObject)"\(GstVaapiDisplayWayland\)\ vaapidisplaywayland0";
ERROR: from element /GstPipeline:pipeline0/GstVideoTestSrc:videotestsrc0: Internal data stream error.
Additional debug info:
../libs/gst/base/gstbasesrc.c(3127): gst_base_src_loop (): /GstPipeline:pipeline0/GstVideoTestSrc:videotestsrc0:
streaming stopped, reason not-negotiated (-4)
ERROR: pipeline doesn't want to preroll.
Setting pipeline to NULL ...
Freeing pipeline ...
```
OS: Ubuntu 22.10
CPU: 12600k
GPU: Intel ADL-S
gstreamer version: 1.20.3-2
vainfo:
```
$ vainfo
libva info: VA-API version 1.17.0
libva info: Trying to open /usr/local/lib/dri/iHD_drv_video.so
libva info: Found init function __vaDriverInit_1_17
libva info: va_openDriver() returns 0
vainfo: VA-API version: 1.17 (libva 2.12.0)
vainfo: Driver version: Intel iHD driver for Intel(R) Gen Graphics - 22.6.0 (54d0e8288)
```
package versions:
```
$ dpkg --list | grep gstreamer
ii gir1.2-gstreamer-1.0:amd64 1.20.3-1 amd64 GObject introspection data for the GStreamer library
ii gstreamer1.0-alsa:amd64 1.20.3-2 amd64 GStreamer plugin for ALSA
ii gstreamer1.0-gl:amd64 1.20.3-2 amd64 GStreamer plugins for GL
ii gstreamer1.0-libav:amd64 1.20.3-1ubuntu2 amd64 ffmpeg plugin for GStreamer
ii gstreamer1.0-packagekit 1.2.5-2ubuntu2 amd64 GStreamer plugin to install codecs using PackageKit
ii gstreamer1.0-pipewire:amd64 0.3.58-2ubuntu1 amd64 GStreamer 1.0 plugin for the PipeWire multimedia server
ii gstreamer1.0-plugins-base:amd64 1.20.3-2 amd64 GStreamer plugins from the "base" set
ii gstreamer1.0-plugins-base-apps 1.20.3-2 amd64 GStreamer helper programs from the "base" set
ii gstreamer1.0-plugins-good:amd64 1.20.3-1ubuntu1 amd64 GStreamer plugins from the "good" set
ii gstreamer1.0-plugins-ugly:amd64 1.20.3-1 amd64 GStreamer plugins from the "ugly" set
ii gstreamer1.0-tools 1.20.3-1 amd64 Tools for use with GStreamer
ii gstreamer1.0-vaapi:amd64 1.20.3-1 amd64 VA-API plugins for GStreamer
ii gstreamer1.0-x:amd64 1.20.3-2 amd64 GStreamer plugins for X11 and Pango
ii libgstreamer-gl1.0-0:amd64 1.20.3-2 amd64 GStreamer GL libraries
ii libgstreamer-plugins-bad1.0-0:amd64 1.20.3-1ubuntu6 amd64 GStreamer libraries from the "bad" set
ii libgstreamer-plugins-base1.0-0:amd64 1.20.3-2 amd64 GStreamer libraries from the "base" set
ii libgstreamer-plugins-good1.0-0:amd64 1.20.3-1ubuntu1 amd64 GStreamer development files for libraries from the "good" set
ii libgstreamer1.0-0:amd64 1.20.3-1 amd64 Core GStreamer libraries and elements
```https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/1566low FPS on certain interfaces (Ethernet vs. WiFi) and certain WiFi routers wh...2022-11-11T18:48:41ZMax Krieglederlow FPS on certain interfaces (Ethernet vs. WiFi) and certain WiFi routers when streaming video via UDPI am trying to stream video from a raspberry pi 4 employing a raspberry pi camera module 2 to a laptop and I am encountering difficulties depending on the interface (ethernet or WiFi) but also the router I am using.
On the raspberry pi ...I am trying to stream video from a raspberry pi 4 employing a raspberry pi camera module 2 to a laptop and I am encountering difficulties depending on the interface (ethernet or WiFi) but also the router I am using.
On the raspberry pi 4 (bullseye, gstreamer 1.18.4) I am running following command
`gst-launch-1.0 libcamerasrc ! video/x-raw, width=1280, height=720 ! videoconvert ! jpegenc ! rtpjpegpay ! udpsink host=192.168.0.100 port=5200`
On the laptop (bullseye, gstreamer 1.18.4) I am accessing the stream as follows
`gst-launch-1.0 -v udpsrc port=5200 ! application/x-rtp, media=video, clock-rate=90000, payload=96 ! rtpjpegdepay ! jpegdec ! videoconvert ! queue ! fpsdisplaysink`
When both devices are connected over WiFi to an access point, which supports WiFi 5 (TP-Link Archer MR600), I get very smooth video on the laptop with 30 FPS and almost no dropped frames. However, when connecting both devices over WiFi 6 (TP-Link Archer AX50) there are still no dropped frames but the frame rate is 1-3 FPS. Manually lowering the WiFi standard on this router doesn't solve the problem. Also, when connecting both devices over Ethernet the frame rate is again in the range 1-3 FPS, but only connecting the laptop over Ethernet and the raspberry over WiFi seems to work with 30 FPS.
When streaming I have collected the incoming packets with tcpdump
`sudo tcpdump -i wlp0s20f3 -s 0 -w dump.pcap host 192.168.0.201 and udp`
and then played them back with
`gst-launch-1.0 filesrc location=dump.pcap ! pcapparse ! application/x-rtp, media=video, clock-rate=90000, payload=96 ! rtpjpegdepay ! jpegdec ! videoconvert ! queue ! fpsdisplaysink`
showing the original stream in either of the above described cases perfectly as expected. I simply noticed that for the WiFi 6 case and Ethernet case there are slightly more rendered frames for the same time period compared to the WiFi 5 case.
To me it looks like that the video stream is sent correctly, but for some reason cannot be rendered by gstreamer live but only after capturing it.https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/1565vaapipostproc: fails to negotiate with some formats2022-11-22T07:35:51ZEric Knappvaapipostproc: fails to negotiate with some formatsThe issue was introduced in d8a477338f. vaapipostproc fails to negotiate with formats that used to work and are still listed in the pad template.
Example:
`gst-launch-1.0 videotestsrc is-live=true ! 'video/x-raw,format=UYVY' ! vaapipost...The issue was introduced in d8a477338f. vaapipostproc fails to negotiate with formats that used to work and are still listed in the pad template.
Example:
`gst-launch-1.0 videotestsrc is-live=true ! 'video/x-raw,format=UYVY' ! vaapipostproc ! fakesink`
Logs show allowed caps are missing some formats:
`postproc sink allowed caps is video/x-raw(memory:VASurface), format=(string){ NV12, I420, YV12, YUY2, ABGR, ARGB, xBGR, P010_10LE, BGRA, RGBA, BGR10A2_LE, VUYA, Y210, Y410 }, width=(int)[ 16, 16384 ], height=(int)[ 16, 16384 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(memory:DMABuf), format=(string){ NV12, I420, YV12, YUY2, ABGR, ARGB, xBGR, P010_10LE, BGRA, RGBA, BGR10A2_LE, VUYA, Y210, Y410 }, width=(int)[ 16, 16384 ], height=(int)[ 16, 16384 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string){ NV12, I420, YV12, YUY2, ABGR, ARGB, xBGR, P010_10LE, BGRA, RGBA, BGR10A2_LE, VUYA, Y210, Y410 }, width=(int)[ 16, 16384 ], height=(int)[ 16, 16384 ], framerate=(fraction)[ 0/1, 2147483647/1 `https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/1564Failed to import rtmp library file in Android environment2022-11-11T06:50:58ZhncllyyFailed to import rtmp library file in Android environmentI have introduced the flv library file in the project and it can run well, but when I import the rtmp library file, the following error message appears!
librtmp.a(rtmp.o):rtmp.c:function RTMP_TLS_Init: error: undefined reference to 'OPE...I have introduced the flv library file in the project and it can run well, but when I import the rtmp library file, the following error message appears!
librtmp.a(rtmp.o):rtmp.c:function RTMP_TLS_Init: error: undefined reference to 'OPENSSL_init_ssl'
librtmp.a(rtmp.o):rtmp.c:function RTMP_TLS_Init: error: undefined reference to 'OPENSSL_init_crypto'
....
gstreamer version contains 1.18.5, 1.20.4
who can help me, thanks!!!https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/1563ges: GESPitiviFormatter part of the .gir file but not included by ges.h2022-11-18T23:42:14ZSebastian Drögeges: GESPitiviFormatter part of the .gir file but not included by ges.hAll types that are in the .gir file should be available when including the header file(s) listed in there.
Simply adding it to ges.h is not correct though, because it is only available if libxml was available during compilation.
Which i...All types that are in the .gir file should be available when including the header file(s) listed in there.
Simply adding it to ges.h is not correct though, because it is only available if libxml was available during compilation.
Which is the second problem here: it's very inconvenient to have the API surface of a library change depending on its configuration. It would be good to have a no-op formatter in-place of it, or to make libxml mandatory.
CC @thiblahutehttps://gitlab.freedesktop.org/gstreamer/gstreamer-rs/-/issues/422cross_validate_layout_with_c test failing on naming mimatches2022-11-13T21:02:46ZBart Ribberscross_validate_layout_with_c test failing on naming mimatchesNot sure what's up here, I'm just running `cargo test`.
```
Running tests/abi.rs (target/debug/deps/abi-42883a21877c16ed)
running 2 tests
test cross_validate_layout_with_c ... FAILED
test cross_validate_constants_with_c ... FAILED...Not sure what's up here, I'm just running `cargo test`.
```
Running tests/abi.rs (target/debug/deps/abi-42883a21877c16ed)
running 2 tests
test cross_validate_layout_with_c ... FAILED
test cross_validate_constants_with_c ... FAILED
failures:
---- cross_validate_layout_with_c stdout ----
Name mismatch:
Rust: "GESPitiviFormatter"
C: "GESProject"
Name mismatch:
Rust: "GESPitiviFormatterClass"
C: "GESProjectClass"
Name mismatch:
Rust: "GESProject"
C: "GESSource"
Name mismatch:
Rust: "GESProjectClass"
C: "GESSourceClass"
Name mismatch:
Rust: "GESSource"
C: "GESSourceClip"
Name mismatch:
Rust: "GESSourceClass"
C: "GESSourceClipAsset"
Name mismatch:
Rust: "GESSourceClip"
C: "GESSourceClipAssetClass"
Name mismatch:
Rust: "GESSourceClipAsset"
C: "GESSourceClipClass"
Name mismatch:
Rust: "GESSourceClipAssetClass"
C: "GESTestClip"
Name mismatch:
Rust: "GESSourceClipClass"
C: "GESTestClipClass"
Name mismatch:
Rust: "GESTestClip"
C: "GESTextHAlign"
Name mismatch:
Rust: "GESTestClipClass"
C: "GESTextOverlay"
Name mismatch:
Rust: "GESTextHAlign"
C: "GESTextOverlayClass"
Name mismatch:
Rust: "GESTextOverlay"
C: "GESTextOverlayClip"
Name mismatch:
Rust: "GESTextOverlayClass"
C: "GESTextOverlayClipClass"
Name mismatch:
Rust: "GESTextOverlayClip"
C: "GESTextVAlign"
Name mismatch:
Rust: "GESTextOverlayClipClass"
C: "GESTimeline"
Name mismatch:
Rust: "GESTextVAlign"
C: "GESTimelineClass"
Name mismatch:
Rust: "GESTimeline"
C: "GESTimelineElement"
Name mismatch:
Rust: "GESTimelineClass"
C: "GESTimelineElementClass"
Name mismatch:
Rust: "GESTimelineElement"
C: "GESTitleClip"
Name mismatch:
Rust: "GESTimelineElementClass"
C: "GESTitleClipClass"
Name mismatch:
Rust: "GESTitleClip"
C: "GESTitleSource"
Name mismatch:
Rust: "GESTitleClipClass"
C: "GESTitleSourceClass"
Name mismatch:
Rust: "GESTitleSource"
C: "GESTrack"
Name mismatch:
Rust: "GESTitleSourceClass"
C: "GESTrackClass"
Name mismatch:
Rust: "GESTrack"
C: "GESTrackElement"
Name mismatch:
Rust: "GESTrackClass"
C: "GESTrackElementAsset"
Name mismatch:
Rust: "GESTrackElement"
C: "GESTrackElementAssetClass"
Name mismatch:
Rust: "GESTrackElementAsset"
C: "GESTrackElementClass"
Name mismatch:
Rust: "GESTrackElementAssetClass"
C: "GESTrackType"
Name mismatch:
Rust: "GESTrackElementClass"
C: "GESTransition"
Name mismatch:
Rust: "GESTrackType"
C: "GESTransitionClass"
Name mismatch:
Rust: "GESTransition"
C: "GESTransitionClip"
Name mismatch:
Rust: "GESTransitionClass"
C: "GESTransitionClipClass"
Name mismatch:
Rust: "GESTransitionClip"
C: "GESUriClip"
Name mismatch:
Rust: "GESTransitionClipClass"
C: "GESUriClipAsset"
Name mismatch:
Rust: "GESUriClip"
C: "GESUriClipAssetClass"
Name mismatch:
Rust: "GESUriClipAsset"
C: "GESUriClipClass"
Name mismatch:
Rust: "GESUriClipAssetClass"
C: "GESUriSourceAsset"
Name mismatch:
Rust: "GESUriClipClass"
C: "GESUriSourceAssetClass"
Name mismatch:
Rust: "GESUriSourceAsset"
C: "GESVideoSource"
Name mismatch:
Rust: "GESUriSourceAssetClass"
C: "GESVideoSourceClass"
Name mismatch:
Rust: "GESVideoSource"
C: "GESVideoStandardTransitionType"
Name mismatch:
Rust: "GESVideoSourceClass"
C: "GESVideoTestPattern"
Name mismatch:
Rust: "GESVideoStandardTransitionType"
C: "GESVideoTestSource"
Name mismatch:
Rust: "GESVideoTestPattern"
C: "GESVideoTestSourceClass"
Name mismatch:
Rust: "GESVideoTestSource"
C: "GESVideoTrack"
Name mismatch:
Rust: "GESVideoTestSourceClass"
C: "GESVideoTrackClass"
Name mismatch:
Rust: "GESVideoTrack"
C: "GESVideoTransition"
Name mismatch:
Rust: "GESVideoTrackClass"
C: "GESVideoTransitionClass"
Name mismatch:
Rust: "GESVideoTransition"
C: "GESVideoUriSource"
Name mismatch:
Rust: "GESVideoTransitionClass"
C: "GESVideoUriSourceClass"
Name mismatch:
Rust: "GESVideoUriSource"
C: "GESXmlFormatter"
Name mismatch:
Rust: "GESVideoUriSourceClass"
C: "GESXmlFormatterClass"
thread 'cross_validate_layout_with_c' panicked at 'FAILED: 65 passed; 55 failed', gstreamer-editing-services/sys/tests/abi.rs:108:13
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
---- cross_validate_constants_with_c stdout ----
Constant value mismatch for GES_VERSION_MICRO
Rust: "1"
C: "2"
Constant value mismatch for GES_VERSION_NANO
Rust: "1"
C: "0"
thread 'cross_validate_constants_with_c' panicked at 'FAILED: 159 passed; 2 failed', gstreamer-editing-services/sys/tests/abi.rs:108:13
failures:
cross_validate_constants_with_c
cross_validate_layout_with_c
test result: FAILED. 0 passed; 2 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.44s
```https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/1562playbin3/uridecodebin3: Missing support for URI redirects2023-03-22T13:05:32ZPhilippe Normandplaybin3/uridecodebin3: Missing support for URI redirectsTypically used in Apple trailers assets. This was fixed in playbin2 in https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/419
Trying to use a similar approach in playbin3, I'm attempting to call `gst_play_bin3_s...Typically used in Apple trailers assets. This was fixed in playbin2 in https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/419
Trying to use a similar approach in playbin3, I'm attempting to call `gst_play_bin3_set_uri()` followed by `setup_next_source(playbin)` in the error message handler. That's not working though, because the source groups are not in a consistent state at that point yet (current group is empty, next group is set to the original URI). So I'm wondering what would be the right approach here.https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/1561mem leak with avdec+appsink while doing multiple state change2022-11-17T09:57:06Zkudas-swmem leak with avdec+appsink while doing multiple state change### Describe your issue
I have written a simple code to use avdec+appsink and performing state change in a loop (for simplicity I am running the stream for 2 sec and changing the state to PAUSED after 2 sec), I can see sw memory is incre...### Describe your issue
I have written a simple code to use avdec+appsink and performing state change in a loop (for simplicity I am running the stream for 2 sec and changing the state to PAUSED after 2 sec), I can see sw memory is increasing continuously.
#### Expected Behavior
No mem leak should occur
#### Observed Behavior
mem leak is observed after every iteration
#### Setup
Using GStreamer 1.16.3 on Ubuntu 20.04.5
### Steps to reproduce the bug
<!-- please fill in exact steps which reproduce the bug on your system, for example: -->
1. compile attached "decoder_state_change.cpp" file with:
g++ decoder_state_change.cpp -o decode_sample `pkg-config --cflags --libs gstreamer-1.0 gstreamer-app-1.0`
2. run: ./decode_sample
3. Observe mem leak in different terminal
### How reproducible is the bug?
reproducible 100%
### Additional Information
I have used one h264 stream, you can use any h264 stream, please change the name of the stream inside the code i.e. in "decoder_state_change.cpp" file, else I can share the file as well if needed.
[decoder_state_change.cpp](/uploads/98fbc66b73b34d5e98a5fefaa3738979/decoder_state_change.cpp)https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/1560Update duration and seekable for hls stream?2022-11-10T11:33:42ZNhật Nguyễn TrọngUpdate duration and seekable for hls stream?Hi, I'm trying to play an hls stream using gstreamer. First, I had an m3u8 link available and used the command:\
gst-launch-1.0 -v playbin uri="m3u8-link" \
as in the document to play it. Everything worked fine, now I want to add rewind ...Hi, I'm trying to play an hls stream using gstreamer. First, I had an m3u8 link available and used the command:\
gst-launch-1.0 -v playbin uri="m3u8-link" \
as in the document to play it. Everything worked fine, now I want to add rewind functionality on this hls stream, so I use the example "Basic tutorial 4: Time management" to implement it. But the problem is that the program returns "Could not query current duration" and "Seeking is DISABLED for this stream" results because the query gst_element_query_duration is false. After researching, I found this happens when in the content of m3u8-link there is no #EXT-X-ENDLIST tag, which means my stream is still running and updating. If the stream ends, the #EXT-X-ENDLIST tag will be added to the end of the m3u8 file, and everything will work normally again. My question is is there a way to continuously update the duration in case the stream is still running (without the #EXT-X-ENDLIST tag) so that rewind can still be performed on the hls stream? Thank!\
P/s: I can do this on the web thanks to hls.js, I want to do the same with gstreamer.https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/1558Repeated bus GST_MESSAGE_STREAM_COLLECTION message received2022-11-16T12:59:41ZAndrew HawkinsRepeated bus GST_MESSAGE_STREAM_COLLECTION message received### Describe your issue
When playing back a udp stream that contains an MPEG2 TS, repeated GST_MESSAGE_STREAM_COLLECTION messages are issued. The messages are occurring at around 4 or 5 a second, despite the stream contents not changing....### Describe your issue
When playing back a udp stream that contains an MPEG2 TS, repeated GST_MESSAGE_STREAM_COLLECTION messages are issued. The messages are occurring at around 4 or 5 a second, despite the stream contents not changing.
#### Expected Behavior
GST_MESSAGE_STREAM_COLLECTION only issued when stream contents change
#### Observed Behavior
Repeated GST_MESSAGE_STREAM_COLLECTION messages are issued.
#### Setup
- **Operating System:** Linux
- **Device:** Embedded
- **GStreamer Version:** GStreamer 1.20.3
- **Command line:** gst-launch-1.0 -m playbin3 uri=udp://239.192.100.100:1234
### Steps to reproduce the bug
<!-- please fill in exact steps which reproduce the bug on your system, for example: -->
1. open terminal
2. type `gst-launch-1.0 -m playbin3 uri=udp://239.192.100.100:1234`
### How reproducible is the bug?
Always
### Screenshots if relevant
### Solutions you have tried
### Related non-duplicate issues
### Additional Information
<details>
<pre><code>
root@RK3588:~# gst-launch-1.0 -m --no-position playbin3 uri=udp://239.192.100.100:1234
Setting pipeline to PAUSED ...
Pipeline is live and does not need PREROLL ...
Got message #1 from element "streamsynchronizer0" (state-changed): GstMessageStateChanged, old-state=(GstState)null, new-state=(GstState)ready, pending-state=(GstState)void-pending;
Got message #2 from element "playsink" (state-changed): GstMessageStateChanged, old-state=(GstState)null, new-state=(GstState)ready, pending-state=(GstState)void-pending;
Got message #3 from element "playbin3-0" (state-changed): GstMessageStateChanged, old-state=(GstState)null, new-state=(GstState)ready, pending-state=(GstState)paused;
Got message #7 from element "streamsynchronizer0" (state-changed): GstMessageStateChanged, old-state=(GstState)ready, new-state=(GstState)paused, pending-state=(GstState)void-pending;
Got message #8 from element "multiqueue0" (state-changed): GstMessageStateChanged, old-state=(GstState)null, new-state=(GstState)ready, pending-state=(GstState)void-pending;
Got message #9 from element "decodebin3-0" (state-changed): GstMessageStateChanged, old-state=(GstState)null, new-state=(GstState)ready, pending-state=(GstState)void-pending;
Got message #10 from element "uridecodebin3-0" (state-changed): GstMessageStateChanged, old-state=(GstState)null, new-state=(GstState)ready, pending-state=(GstState)paused;
Got message #11 from element "multiqueue0" (state-changed): GstMessageStateChanged, old-state=(GstState)ready, new-state=(GstState)paused, pending-state=(GstState)void-pending;
Got message #12 from element "decodebin3-0" (state-changed): GstMessageStateChanged, old-state=(GstState)ready, new-state=(GstState)paused, pending-state=(GstState)void-pending;
Got message #13 from element "urisourcebin0" (state-changed): GstMessageStateChanged, old-state=(GstState)null, new-state=(GstState)ready, pending-state=(GstState)paused;
Got message #17 from element "typefindelement0" (state-changed): GstMessageStateChanged, old-state=(GstState)null, new-state=(GstState)ready, pending-state=(GstState)paused;
Got message #18 from element "typefindelement0" (state-changed): GstMessageStateChanged, old-state=(GstState)ready, new-state=(GstState)paused, pending-state=(GstState)void-pending;
Got message #19 from element "udpsrc0" (state-changed): GstMessageStateChanged, old-state=(GstState)null, new-state=(GstState)ready, pending-state=(GstState)paused;
Got message #22 from pad "udpsrc0:src" (stream-status): GstMessageStreamStatus, type=(GstStreamStatusType)create, owner=(GstElement)"\(GstUDPSrc\)\ udpsrc0", object=(GstTask)"\(GstTask\)\ udpsrc0:src";
Got message #23 from element "udpsrc0" (state-changed): GstMessageStateChanged, old-state=(GstState)ready, new-state=(GstState)paused, pending-state=(GstState)void-pending;
Got message #24 from element "urisourcebin0" (state-changed): GstMessageStateChanged, old-state=(GstState)ready, new-state=(GstState)paused, pending-state=(GstState)void-pending;
Got message #25 from element "uridecodebin3-0" (state-changed): GstMessageStateChanged, old-state=(GstState)ready, new-state=(GstState)paused, pending-state=(GstState)void-pending;
Got message #27 from element "playbin3-0" (state-changed): GstMessageStateChanged, old-state=(GstState)ready, new-state=(GstState)paused, pending-state=(GstState)void-pending;
Pipeline is PREROLLED ...
Setting pipeline to PLAYING ...
Got message #28 from pad "udpsrc0:src" (stream-status): GstMessageStreamStatus, type=(GstStreamStatusType)enter, owner=(GstElement)"\(GstUDPSrc\)\ udpsrc0", object=(GstTask)"\(GstTask\)\ udpsrc0:src";
Got message #30 from element "playbin3-0" (new-clock): GstMessageNewClock, clock=(GstClock)"\(GstSystemClock\)\ GstSystemClock";
New clock: GstSystemClock
Got message #32 from element "multiqueue0" (state-changed): GstMessageStateChanged, old-state=(GstState)paused, new-state=(GstState)playing, pending-state=(GstState)void-pending;
Got message #33 from element "decodebin3-0" (state-changed): GstMessageStateChanged, old-state=(GstState)paused, new-state=(GstState)playing, pending-state=(GstState)void-pending;
Got message #34 from element "typefindelement0" (state-changed): GstMessageStateChanged, old-state=(GstState)paused, new-state=(GstState)playing, pending-state=(GstState)void-pending;
Got message #35 from element "udpsrc0" (state-changed): GstMessageStateChanged, old-state=(GstState)paused, new-state=(GstState)playing, pending-state=(GstState)void-pending;
Got message #36 from element "urisourcebin0" (state-changed): GstMessageStateChanged, old-state=(GstState)paused, new-state=(GstState)playing, pending-state=(GstState)void-pending;
Got message #37 from element "uridecodebin3-0" (state-changed): GstMessageStateChanged, old-state=(GstState)paused, new-state=(GstState)playing, pending-state=(GstState)void-pending;
Got message #47 from element "typefind" (state-changed): GstMessageStateChanged, old-state=(GstState)null, new-state=(GstState)ready, pending-state=(GstState)void-pending;
Got message #48 from element "parsebin0" (state-changed): GstMessageStateChanged, old-state=(GstState)null, new-state=(GstState)ready, pending-state=(GstState)playing;
Got message #49 from element "typefind" (state-changed): GstMessageStateChanged, old-state=(GstState)ready, new-state=(GstState)paused, pending-state=(GstState)void-pending;
Got message #50 from element "parsebin0" (state-changed): GstMessageStateChanged, old-state=(GstState)ready, new-state=(GstState)paused, pending-state=(GstState)playing;
Got message #51 from element "typefind" (state-changed): GstMessageStateChanged, old-state=(GstState)paused, new-state=(GstState)playing, pending-state=(GstState)void-pending;
Got message #52 from element "parsebin0" (state-changed): GstMessageStateChanged, old-state=(GstState)paused, new-state=(GstState)playing, pending-state=(GstState)void-pending;
Got message #65 from element "tsdemux0" (state-changed): GstMessageStateChanged, old-state=(GstState)null, new-state=(GstState)ready, pending-state=(GstState)void-pending;
Got message #66 from element "tsdemux0" (state-changed): GstMessageStateChanged, old-state=(GstState)ready, new-state=(GstState)paused, pending-state=(GstState)void-pending;
Got message #67 from element "tsdemux0" (element): pat, section=(GstMpegtsSection)NULL;
Got message #78 from element "audiotee" (state-changed): GstMessageStateChanged, old-state=(GstState)null, new-state=(GstState)ready, pending-state=(GstState)paused;
Got message #79 from element "audiotee" (state-changed): GstMessageStateChanged, old-state=(GstState)ready, new-state=(GstState)paused, pending-state=(GstState)void-pending;
Got message #81 from element "audio-concat" (state-changed): GstMessageStateChanged, old-state=(GstState)null, new-state=(GstState)ready, pending-state=(GstState)playing;
Got message #82 from element "audio-concat" (state-changed): GstMessageStateChanged, old-state=(GstState)ready, new-state=(GstState)paused, pending-state=(GstState)playing;
Got message #83 from element "audio-concat" (state-changed): GstMessageStateChanged, old-state=(GstState)paused, new-state=(GstState)playing, pending-state=(GstState)void-pending;
Got message #87 from element "video-concat" (state-changed): GstMessageStateChanged, old-state=(GstState)null, new-state=(GstState)ready, pending-state=(GstState)playing;
Got message #88 from element "video-concat" (state-changed): GstMessageStateChanged, old-state=(GstState)ready, new-state=(GstState)paused, pending-state=(GstState)playing;
Got message #89 from element "video-concat" (state-changed): GstMessageStateChanged, old-state=(GstState)paused, new-state=(GstState)playing, pending-state=(GstState)void-pending;
Got message #93 from element "text-concat" (state-changed): GstMessageStateChanged, old-state=(GstState)null, new-state=(GstState)ready, pending-state=(GstState)playing;
Got message #94 from element "text-concat" (state-changed): GstMessageStateChanged, old-state=(GstState)ready, new-state=(GstState)paused, pending-state=(GstState)playing;
Got message #95 from element "text-concat" (state-changed): GstMessageStateChanged, old-state=(GstState)paused, new-state=(GstState)playing, pending-state=(GstState)void-pending;
Got message #77 from element "decodebin3-0" (stream-collection): GstMessageStreamCollection, collection=(GstStreamCollection)"\(GstStreamCollection\)\ streamcollection0";
Got message #107 from element "mpegvparse0" (state-changed): GstMessageStateChanged, old-state=(GstState)null, new-state=(GstState)ready, pending-state=(GstState)void-pending;
Got message #111 from element "mpegvparse0" (state-changed): GstMessageStateChanged, old-state=(GstState)ready, new-state=(GstState)paused, pending-state=(GstState)void-pending;
Got message #120 from element "mpegaudioparse0" (state-changed): GstMessageStateChanged, old-state=(GstState)null, new-state=(GstState)ready, pending-state=(GstState)void-pending;
Got message #124 from element "mpegaudioparse0" (state-changed): GstMessageStateChanged, old-state=(GstState)ready, new-state=(GstState)paused, pending-state=(GstState)void-pending;
Got message #133 from element "mpegaudioparse1" (state-changed): GstMessageStateChanged, old-state=(GstState)null, new-state=(GstState)ready, pending-state=(GstState)void-pending;
Got message #137 from element "mpegaudioparse1" (state-changed): GstMessageStateChanged, old-state=(GstState)ready, new-state=(GstState)paused, pending-state=(GstState)void-pending;
Got message #142 from pad "multiqueue0:src_0" (stream-status): GstMessageStreamStatus, type=(GstStreamStatusType)create, owner=(GstElement)"\(GstMultiQueue\)\ multiqueue0", object=(GstTask)"\(GstTask\)\ task2";
Got message #146 from pad "multiqueue0:src_1" (stream-status): GstMessageStreamStatus, type=(GstStreamStatusType)create, owner=(GstElement)"\(GstMultiQueue\)\ multiqueue0", object=(GstTask)"\(GstTask\)\ task3";
Got message #147 from pad "multiqueue0:src_0" (stream-status): GstMessageStreamStatus, type=(GstStreamStatusType)enter, owner=(GstElement)"\(GstMultiQueue\)\ multiqueue0", object=(GstTask)"\(GstTask\)\ multiqueue0:src_0";
Got message #150 from pad "multiqueue0:src_1" (stream-status): GstMessageStreamStatus, type=(GstStreamStatusType)enter, owner=(GstElement)"\(GstMultiQueue\)\ multiqueue0", object=(GstTask)"\(GstTask\)\ multiqueue0:src_1";
Got message #152 from pad "multiqueue0:src_2" (stream-status): GstMessageStreamStatus, type=(GstStreamStatusType)create, owner=(GstElement)"\(GstMultiQueue\)\ multiqueue0", object=(GstTask)"\(GstTask\)\ task4";
Got message #156 from pad "multiqueue0:src_3" (stream-status): GstMessageStreamStatus, type=(GstStreamStatusType)create, owner=(GstElement)"\(GstMultiQueue\)\ multiqueue0", object=(GstTask)"\(GstTask\)\ task5";
Got message #157 from pad "multiqueue0:src_2" (stream-status): GstMessageStreamStatus, type=(GstStreamStatusType)enter, owner=(GstElement)"\(GstMultiQueue\)\ multiqueue0", object=(GstTask)"\(GstTask\)\ multiqueue0:src_2";
Got message #162 from element "tsdemux0" (element): pmt, section=(GstMpegtsSection)NULL;
Got message #163 from pad "multiqueue0:src_3" (stream-status): GstMessageStreamStatus, type=(GstStreamStatusType)enter, owner=(GstElement)"\(GstMultiQueue\)\ multiqueue0", object=(GstTask)"\(GstTask\)\ multiqueue0:src_3";
Got message #181 from element "tsdemux0" (element): pat, section=(GstMpegtsSection)NULL;
Got message #183 from element "decodebin3-0" (stream-collection): GstMessageStreamCollection, collection=(GstStreamCollection)"\(GstStreamCollection\)\ streamcollection1";
Got message #184 from element "tsdemux0" (element): pmt, section=(GstMpegtsSection)NULL;
Got message #190 from element "mpg123audiodec0" (state-changed): GstMessageStateChanged, old-state=(GstState)null, new-state=(GstState)ready, pending-state=(GstState)void-pending;
Got message #200 from element "mpg123audiodec0" (state-changed): GstMessageStateChanged, old-state=(GstState)ready, new-state=(GstState)paused, pending-state=(GstState)playing;
Got message #201 from element "mpg123audiodec0" (state-changed): GstMessageStateChanged, old-state=(GstState)paused, new-state=(GstState)playing, pending-state=(GstState)void-pending;
Got message #202 from element "tsdemux0" (element): pat, section=(GstMpegtsSection)NULL;
Got message #204 from element "decodebin3-0" (stream-collection): GstMessageStreamCollection, collection=(GstStreamCollection)"\(GstStreamCollection\)\ streamcollection2";
Got message #205 from element "tsdemux0" (element): pmt, section=(GstMpegtsSection)NULL;
Got message #207 from element "tsdemux0" (element): pat, section=(GstMpegtsSection)NULL;
Got message #209 from element "decodebin3-0" (stream-collection): GstMessageStreamCollection, collection=(GstStreamCollection)"\(GstStreamCollection\)\ streamcollection3";
Got message #210 from element "tsdemux0" (element): pmt, section=(GstMpegtsSection)NULL;
Got message #211 from element "tsdemux0" (element): pat, section=(GstMpegtsSection)NULL;
Got message #213 from element "decodebin3-0" (stream-collection): GstMessageStreamCollection, collection=(GstStreamCollection)"\(GstStreamCollection\)\ streamcollection4";
Got message #214 from element "tsdemux0" (element): pmt, section=(GstMpegtsSection)NULL;
Got message #215 from element "tsdemux0" (element): pat, section=(GstMpegtsSection)NULL;
Got message #217 from element "decodebin3-0" (stream-collection): GstMessageStreamCollection, collection=(GstStreamCollection)"\(GstStreamCollection\)\ streamcollection5";
Got message #218 from element "tsdemux0" (element): pmt, section=(GstMpegtsSection)NULL;
Got message #219 from element "tsdemux0" (element): pat, section=(GstMpegtsSection)NULL;
Got message #221 from element "decodebin3-0" (stream-collection): GstMessageStreamCollection, collection=(GstStreamCollection)"\(GstStreamCollection\)\ streamcollection6";
Got message #222 from element "tsdemux0" (element): pmt, section=(GstMpegtsSection)NULL;
Got message #223 from element "tsdemux0" (element): pat, section=(GstMpegtsSection)NULL;
Got message #225 from element "decodebin3-0" (stream-collection): GstMessageStreamCollection, collection=(GstStreamCollection)"\(GstStreamCollection\)\ streamcollection7";
Got message #226 from element "tsdemux0" (element): pmt, section=(GstMpegtsSection)NULL;
Got message #229 from element "tsdemux0" (element): pat, section=(GstMpegtsSection)NULL;
Got message #233 from element "mppvideodec0" (state-changed): GstMessageStateChanged, old-state=(GstState)null, new-state=(GstState)ready, pending-state=(GstState)void-pending;
Got message #243 from element "mppvideodec0" (state-changed): GstMessageStateChanged, old-state=(GstState)ready, new-state=(GstState)paused, pending-state=(GstState)playing;
Got message #244 from element "mppvideodec0" (state-changed): GstMessageStateChanged, old-state=(GstState)paused, new-state=(GstState)playing, pending-state=(GstState)void-pending;
Got message #245 from element "decodebin3-0" (streams-selected): GstMessageStreamsSelected, collection=(GstStreamCollection)"\(GstStreamCollection\)\ streamcollection7", streams=(GstStream)< "\(GstStream\)\ e0eaa638c8fd7ea5f94943f2863202bdc40a1eebd65014c9d8aa8748c7d59943:25792/0000012f", "\(GstStream\)\ e0eaa638c8fd7ea5f94943f2863202bdc40a1eebd65014c9d8aa8748c7d59943:25792/0000012e", "\(GstStream\)\ e0eaa638c8fd7ea5f94943f2863202bdc40a1eebd65014c9d8aa8748c7d59943:25792/0000012d" >;
Got message #284 from element "deinterlace" (state-changed): GstMessageStateChanged, old-state=(GstState)null, new-state=(GstState)ready, pending-state=(GstState)void-pending;
Got message #285 from element "vdconv" (state-changed): GstMessageStateChanged, old-state=(GstState)null, new-state=(GstState)ready, pending-state=(GstState)void-pending;
Got message #286 from element "vdbin" (state-changed): GstMessageStateChanged, old-state=(GstState)null, new-state=(GstState)ready, pending-state=(GstState)paused;
Got message #287 from element "deinterlace" (state-changed): GstMessageStateChanged, old-state=(GstState)ready, new-state=(GstState)paused, pending-state=(GstState)void-pending;
Got message #288 from element "vdconv" (state-changed): GstMessageStateChanged, old-state=(GstState)ready, new-state=(GstState)paused, pending-state=(GstState)void-pending;
Got message #289 from element "vdbin" (state-changed): GstMessageStateChanged, old-state=(GstState)ready, new-state=(GstState)paused, pending-state=(GstState)void-pending;
Got message #295 from element "conv2" (state-changed): GstMessageStateChanged, old-state=(GstState)null, new-state=(GstState)ready, pending-state=(GstState)void-pending;
Got message #296 from element "videobalance" (state-changed): GstMessageStateChanged, old-state=(GstState)null, new-state=(GstState)ready, pending-state=(GstState)void-pending;
Got message #297 from element "scale" (state-changed): GstMessageStateChanged, old-state=(GstState)null, new-state=(GstState)ready, pending-state=(GstState)void-pending;
Got message #298 from element "conv" (state-changed): GstMessageStateChanged, old-state=(GstState)null, new-state=(GstState)ready, pending-state=(GstState)void-pending;
Got message #299 from element "identity" (state-changed): GstMessageStateChanged, old-state=(GstState)null, new-state=(GstState)ready, pending-state=(GstState)void-pending;
Got message #300 from element "vconv" (state-changed): GstMessageStateChanged, old-state=(GstState)null, new-state=(GstState)ready, pending-state=(GstState)void-pending;
Got message #301 from element "vqueue" (state-changed): GstMessageStateChanged, old-state=(GstState)null, new-state=(GstState)ready, pending-state=(GstState)void-pending;
Got message #302 from element "vbin" (state-changed): GstMessageStateChanged, old-state=(GstState)null, new-state=(GstState)ready, pending-state=(GstState)paused;
Got message #311 from element "conv2" (state-changed): GstMessageStateChanged, old-state=(GstState)ready, new-state=(GstState)paused, pending-state=(GstState)void-pending;
Got message #312 from element "videobalance" (state-changed): GstMessageStateChanged, old-state=(GstState)ready, new-state=(GstState)paused, pending-state=(GstState)void-pending;
Got message #313 from element "scale" (state-changed): GstMessageStateChanged, old-state=(GstState)ready, new-state=(GstState)paused, pending-state=(GstState)void-pending;
Got message #314 from element "conv" (state-changed): GstMessageStateChanged, old-state=(GstState)ready, new-state=(GstState)paused, pending-state=(GstState)void-pending;
Got message #315 from element "identity" (state-changed): GstMessageStateChanged, old-state=(GstState)ready, new-state=(GstState)paused, pending-state=(GstState)void-pending;
Got message #316 from element "vconv" (state-changed): GstMessageStateChanged, old-state=(GstState)ready, new-state=(GstState)paused, pending-state=(GstState)void-pending;
Got message #317 from pad "vqueue:src" (stream-status): GstMessageStreamStatus, type=(GstStreamStatusType)create, owner=(GstElement)"\(GstQueue\)\ vqueue", object=(GstTask)"\(GstTask\)\ task6";
Got message #318 from element "vqueue" (state-changed): GstMessageStateChanged, old-state=(GstState)ready, new-state=(GstState)paused, pending-state=(GstState)void-pending;
Got message #319 from pad "vqueue:src" (stream-status): GstMessageStreamStatus, type=(GstStreamStatusType)enter, owner=(GstElement)"\(GstQueue\)\ vqueue", object=(GstTask)"\(GstTask\)\ vqueue:src";
Got message #339 from element "resample" (state-changed): GstMessageStateChanged, old-state=(GstState)null, new-state=(GstState)ready, pending-state=(GstState)void-pending;
Got message #340 from element "conv" (state-changed): GstMessageStateChanged, old-state=(GstState)null, new-state=(GstState)ready, pending-state=(GstState)void-pending;
Got message #341 from element "identity" (state-changed): GstMessageStateChanged, old-state=(GstState)null, new-state=(GstState)ready, pending-state=(GstState)void-pending;
Got message #342 from element "aconv" (state-changed): GstMessageStateChanged, old-state=(GstState)null, new-state=(GstState)ready, pending-state=(GstState)void-pending;
Got message #343 from element "aqueue" (state-changed): GstMessageStateChanged, old-state=(GstState)null, new-state=(GstState)ready, pending-state=(GstState)void-pending;
Got message #344 from element "abin" (state-changed): GstMessageStateChanged, old-state=(GstState)null, new-state=(GstState)ready, pending-state=(GstState)paused;
Got message #354 from element "resample" (state-changed): GstMessageStateChanged, old-state=(GstState)ready, new-state=(GstState)paused, pending-state=(GstState)void-pending;
Got message #355 from element "conv" (state-changed): GstMessageStateChanged, old-state=(GstState)ready, new-state=(GstState)paused, pending-state=(GstState)void-pending;
Got message #356 from element "identity" (state-changed): GstMessageStateChanged, old-state=(GstState)ready, new-state=(GstState)paused, pending-state=(GstState)void-pending;
Got message #357 from element "aconv" (state-changed): GstMessageStateChanged, old-state=(GstState)ready, new-state=(GstState)paused, pending-state=(GstState)void-pending;
Got message #358 from pad "aqueue:src" (stream-status): GstMessageStreamStatus, type=(GstStreamStatusType)create, owner=(GstElement)"\(GstQueue\)\ aqueue", object=(GstTask)"\(GstTask\)\ task7";
Got message #359 from element "aqueue" (state-changed): GstMessageStateChanged, old-state=(GstState)ready, new-state=(GstState)paused, pending-state=(GstState)void-pending;
Got message #360 from pad "aqueue:src" (stream-status): GstMessageStreamStatus, type=(GstStreamStatusType)enter, owner=(GstElement)"\(GstQueue\)\ aqueue", object=(GstTask)"\(GstTask\)\ aqueue:src";
Got message #391 from element "suboverlay" (state-changed): GstMessageStateChanged, old-state=(GstState)null, new-state=(GstState)ready, pending-state=(GstState)void-pending;
Got message #392 from element "vqueue" (state-changed): GstMessageStateChanged, old-state=(GstState)null, new-state=(GstState)ready, pending-state=(GstState)void-pending;
Got message #393 from element "subqueue" (state-changed): GstMessageStateChanged, old-state=(GstState)null, new-state=(GstState)ready, pending-state=(GstState)void-pending;
Got message #394 from element "tbin" (state-changed): GstMessageStateChanged, old-state=(GstState)null, new-state=(GstState)ready, pending-state=(GstState)paused;
Got message #399 from pad "vqueue:src" (stream-status): GstMessageStreamStatus, type=(GstStreamStatusType)create, owner=(GstElement)"\(GstQueue\)\ vqueue", object=(GstTask)"\(GstTask\)\ task8";
Got message #400 from element "vqueue" (state-changed): GstMessageStateChanged, old-state=(GstState)ready, new-state=(GstState)paused, pending-state=(GstState)void-pending;
Got message #401 from pad "vqueue:src" (stream-status): GstMessageStreamStatus, type=(GstStreamStatusType)enter, owner=(GstElement)"\(GstQueue\)\ vqueue", object=(GstTask)"\(GstTask\)\ vqueue:src";
Got message #402 from pad "subqueue:src" (stream-status): GstMessageStreamStatus, type=(GstStreamStatusType)create, owner=(GstElement)"\(GstQueue\)\ subqueue", object=(GstTask)"\(GstTask\)\ subqueue:src";
Got message #403 from element "subqueue" (state-changed): GstMessageStateChanged, old-state=(GstState)ready, new-state=(GstState)paused, pending-state=(GstState)void-pending;
Got message #417 from pad "subqueue:src" (stream-status): GstMessageStreamStatus, type=(GstStreamStatusType)enter, owner=(GstElement)"\(GstQueue\)\ subqueue", object=(GstTask)"\(GstTask\)\ subqueue:src";
Got message #431 from element "audiosink-actual-sink-pulse" (latency): no message details
Redistribute latency...
Got message #437 from element "audiosink-actual-sink-pulse" (tag): GstMessageTag, taglist=(taglist)"taglist\,\ language-code\=\(string\)en\,\ audio-codec\=\(string\)\"MPEG-1\\\ Audio\"\;";
Got message #438 from element "audiosink-actual-sink-pulse" (tag): GstMessageTag, taglist=(taglist)"taglist\,\ language-code\=\(string\)en\,\ audio-codec\=\(string\)\"MPEG-1\\\ Layer\\\ 2\\\ \\\(MP2\\\)\"\,\ has-crc\=\(boolean\)false\,\ channel-mode\=\(string\)joint-stereo\,\ nominal-bitrate\=\(uint\)128000\;";
Got message #439 from element "audiosink-actual-sink-pulse" (state-changed): GstMessageStateChanged, old-state=(GstState)ready, new-state=(GstState)paused, pending-state=(GstState)void-pending;
Got message #442 from element "audiosink" (state-changed): GstMessageStateChanged, old-state=(GstState)ready, new-state=(GstState)paused, pending-state=(GstState)void-pending;
Got message #444 from element "abin" (state-changed): GstMessageStateChanged, old-state=(GstState)ready, new-state=(GstState)paused, pending-state=(GstState)void-pending;
Got message #445 from element "audiosink-actual-sink-pulse" (latency): no message details
Redistribute latency...
Got message #450 from pad "mppvideodec0:src" (stream-status): GstMessageStreamStatus, type=(GstStreamStatusType)create, owner=(GstElement)"\(GstMppVideoDec\)\ mppvideodec0", object=(GstTask)"\(GstTask\)\ task10";
Got message #451 from pad "mppvideodec0:src" (stream-status): GstMessageStreamStatus, type=(GstStreamStatusType)enter, owner=(GstElement)"\(GstMppVideoDec\)\ mppvideodec0", object=(GstTask)"\(GstTask\)\ mppvideodec0:src";
Got message #457 from element "renderer" (state-changed): GstMessageStateChanged, old-state=(GstState)ready, new-state=(GstState)paused, pending-state=(GstState)void-pending;
Got message #459 from element "post-colorspace" (state-changed): GstMessageStateChanged, old-state=(GstState)ready, new-state=(GstState)paused, pending-state=(GstState)void-pending;
Got message #464 from element "pre-colorspace" (state-changed): GstMessageStateChanged, old-state=(GstState)ready, new-state=(GstState)paused, pending-state=(GstState)void-pending;
Got message #477 from element "suboverlay" (state-changed): GstMessageStateChanged, old-state=(GstState)ready, new-state=(GstState)paused, pending-state=(GstState)void-pending;
Got message #479 from element "tbin" (state-changed): GstMessageStateChanged, old-state=(GstState)ready, new-state=(GstState)paused, pending-state=(GstState)void-pending;
Got message #74 from element "playbin3-0" (stream-start): GstMessageStreamStart, group-id=(uint)1;
Got message #489 from element "videosink-actual-sink-wayland" (tag): GstMessageTag, taglist=(taglist)"taglist\,\ language-code\=\(string\)en\,\ subtitle-codec\=\(string\)\"DVB\\\ subtitles\"\;";
Got message #511 from element "videosink-actual-sink-wayland" (tag): GstMessageTag, taglist=(taglist)"taglist\,\ video-codec\=\(string\)\"MPEG-2\\\ Video\"\;";
Got message #512 from element "videosink-actual-sink-wayland" (tag): GstMessageTag, taglist=(taglist)"taglist\,\ video-codec\=\(string\)\"MPEG-2\\\ Video\\\ \\\(Main\\\ Profile\\\)\"\;";
Got message #514 from element "playsink" (element): prepare-window-handle;
Got message #515 from element "videosink-actual-sink-wayland" (state-changed): GstMessageStateChanged, old-state=(GstState)ready, new-state=(GstState)paused, pending-state=(GstState)void-pending;
Got message #518 from element "videosink" (state-changed): GstMessageStateChanged, old-state=(GstState)ready, new-state=(GstState)paused, pending-state=(GstState)void-pending;
Got message #520 from element "vbin" (state-changed): GstMessageStateChanged, old-state=(GstState)ready, new-state=(GstState)paused, pending-state=(GstState)void-pending;
Got message #522 from element "playsink" (state-changed): GstMessageStateChanged, old-state=(GstState)ready, new-state=(GstState)paused, pending-state=(GstState)void-pending;
Got message #523 from element "playbin3-0" (async-done): GstMessageAsyncDone, running-time=(guint64)18446744073709551615;
Got message #524 from element "videosink-actual-sink-wayland" (latency): no message details
Redistribute latency...
Got message #530 from element "audiosink-actual-sink-pulse" (state-changed): GstMessageStateChanged, old-state=(GstState)paused, new-state=(GstState)playing, pending-state=(GstState)void-pending;
Got message #531 from element "audiosink" (state-changed): GstMessageStateChanged, old-state=(GstState)paused, new-state=(GstState)playing, pending-state=(GstState)void-pending;
Got message #532 from element "resample" (state-changed): GstMessageStateChanged, old-state=(GstState)paused, new-state=(GstState)playing, pending-state=(GstState)void-pending;
Got message #533 from element "conv" (state-changed): GstMessageStateChanged, old-state=(GstState)paused, new-state=(GstState)playing, pending-state=(GstState)void-pending;
Got message #534 from element "identity" (state-changed): GstMessageStateChanged, old-state=(GstState)paused, new-state=(GstState)playing, pending-state=(GstState)void-pending;
Got message #535 from element "aconv" (state-changed): GstMessageStateChanged, old-state=(GstState)paused, new-state=(GstState)playing, pending-state=(GstState)void-pending;
Got message #536 from element "aqueue" (state-changed): GstMessageStateChanged, old-state=(GstState)paused, new-state=(GstState)playing, pending-state=(GstState)void-pending;
Got message #537 from element "abin" (state-changed): GstMessageStateChanged, old-state=(GstState)paused, new-state=(GstState)playing, pending-state=(GstState)void-pending;
Got message #538 from element "videosink-actual-sink-wayland" (state-changed): GstMessageStateChanged, old-state=(GstState)paused, new-state=(GstState)playing, pending-state=(GstState)void-pending;
Got message #539 from element "videosink" (state-changed): GstMessageStateChanged, old-state=(GstState)paused, new-state=(GstState)playing, pending-state=(GstState)void-pending;
Got message #540 from element "conv2" (state-changed): GstMessageStateChanged, old-state=(GstState)paused, new-state=(GstState)playing, pending-state=(GstState)void-pending;
Got message #541 from element "videobalance" (state-changed): GstMessageStateChanged, old-state=(GstState)paused, new-state=(GstState)playing, pending-state=(GstState)void-pending;
Got message #542 from element "scale" (state-changed): GstMessageStateChanged, old-state=(GstState)paused, new-state=(GstState)playing, pending-state=(GstState)void-pending;
Got message #543 from element "conv" (state-changed): GstMessageStateChanged, old-state=(GstState)paused, new-state=(GstState)playing, pending-state=(GstState)void-pending;
Got message #544 from element "identity" (state-changed): GstMessageStateChanged, old-state=(GstState)paused, new-state=(GstState)playing, pending-state=(GstState)void-pending;
Got message #545 from element "vconv" (state-changed): GstMessageStateChanged, old-state=(GstState)paused, new-state=(GstState)playing, pending-state=(GstState)void-pending;
Got message #546 from element "vqueue" (state-changed): GstMessageStateChanged, old-state=(GstState)paused, new-state=(GstState)playing, pending-state=(GstState)void-pending;
Got message #547 from element "vbin" (state-changed): GstMessageStateChanged, old-state=(GstState)paused, new-state=(GstState)playing, pending-state=(GstState)void-pending;
Got message #548 from element "post-colorspace" (state-changed): GstMessageStateChanged, old-state=(GstState)paused, new-state=(GstState)playing, pending-state=(GstState)void-pending;
Got message #549 from element "renderer" (state-changed): GstMessageStateChanged, old-state=(GstState)paused, new-state=(GstState)playing, pending-state=(GstState)void-pending;
Got message #550 from element "pre-colorspace" (state-changed): GstMessageStateChanged, old-state=(GstState)paused, new-state=(GstState)playing, pending-state=(GstState)void-pending;
Got message #551 from element "suboverlay" (state-changed): GstMessageStateChanged, old-state=(GstState)paused, new-state=(GstState)playing, pending-state=(GstState)void-pending;
Got message #552 from element "vqueue" (state-changed): GstMessageStateChanged, old-state=(GstState)paused, new-state=(GstState)playing, pending-state=(GstState)void-pending;
Got message #553 from element "subqueue" (state-changed): GstMessageStateChanged, old-state=(GstState)paused, new-state=(GstState)playing, pending-state=(GstState)void-pending;
Got message #554 from element "tbin" (state-changed): GstMessageStateChanged, old-state=(GstState)paused, new-state=(GstState)playing, pending-state=(GstState)void-pending;
Got message #555 from element "deinterlace" (state-changed): GstMessageStateChanged, old-state=(GstState)paused, new-state=(GstState)playing, pending-state=(GstState)void-pending;
Got message #556 from element "vdconv" (state-changed): GstMessageStateChanged, old-state=(GstState)paused, new-state=(GstState)playing, pending-state=(GstState)void-pending;
Got message #557 from element "vdbin" (state-changed): GstMessageStateChanged, old-state=(GstState)paused, new-state=(GstState)playing, pending-state=(GstState)void-pending;
Got message #558 from element "streamsynchronizer0" (state-changed): GstMessageStateChanged, old-state=(GstState)paused, new-state=(GstState)playing, pending-state=(GstState)void-pending;
Got message #559 from element "audiotee" (state-changed): GstMessageStateChanged, old-state=(GstState)paused, new-state=(GstState)playing, pending-state=(GstState)void-pending;
Got message #560 from element "playsink" (state-changed): GstMessageStateChanged, old-state=(GstState)paused, new-state=(GstState)playing, pending-state=(GstState)void-pending;
Got message #561 from element "mpegaudioparse1" (state-changed): GstMessageStateChanged, old-state=(GstState)paused, new-state=(GstState)playing, pending-state=(GstState)void-pending;
Got message #562 from element "mpegaudioparse0" (state-changed): GstMessageStateChanged, old-state=(GstState)paused, new-state=(GstState)playing, pending-state=(GstState)void-pending;
Got message #563 from element "mpegvparse0" (state-changed): GstMessageStateChanged, old-state=(GstState)paused, new-state=(GstState)playing, pending-state=(GstState)void-pending;
Got message #564 from element "tsdemux0" (state-changed): GstMessageStateChanged, old-state=(GstState)paused, new-state=(GstState)playing, pending-state=(GstState)void-pending;
Got message #565 from element "playbin3-0" (state-changed): GstMessageStateChanged, old-state=(GstState)paused, new-state=(GstState)playing, pending-state=(GstState)void-pending;
Got message #571 from element "audiosink-actual-sink-pulse" (tag): GstMessageTag, taglist=(taglist)"taglist\,\ language-code\=\(string\)en\,\ audio-codec\=\(string\)\"MPEG-1\\\ Layer\\\ 2\\\ \\\(MP2\\\)\"\,\ has-crc\=\(boolean\)false\,\ channel-mode\=\(string\)joint-stereo\,\ nominal-bitrate\=\(uint\)128000\,\ minimum-bitrate\=\(uint\)128000\,\ maximum-bitrate\=\(uint\)128000\,\ bitrate\=\(uint\)128000\;";
Got message #573 from element "decodebin3-0" (stream-collection): GstMessageStreamCollection, collection=(GstStreamCollection)"\(GstStreamCollection\)\ streamcollection8";
Got message #574 from element "tsdemux0" (element): pmt, section=(GstMpegtsSection)NULL;
Got message #575 from element "tsdemux0" (element): pat, section=(GstMpegtsSection)NULL;
Got message #577 from element "decodebin3-0" (stream-collection): GstMessageStreamCollection, collection=(GstStreamCollection)"\(GstStreamCollection\)\ streamcollection9";
Got message #578 from element "tsdemux0" (element): pmt, section=(GstMpegtsSection)NULL;
Got message #585 from element "tsdemux0" (element): pat, section=(GstMpegtsSection)NULL;
Got message #587 from element "decodebin3-0" (stream-collection): GstMessageStreamCollection, collection=(GstStreamCollection)"\(GstStreamCollection\)\ streamcollection10";
Got message #588 from element "tsdemux0" (element): pmt, section=(GstMpegtsSection)NULL;
Got message #594 from element "tsdemux0" (element): pat, section=(GstMpegtsSection)NULL;
Got message #597 from element "decodebin3-0" (stream-collection): GstMessageStreamCollection, collection=(GstStreamCollection)"\(GstStreamCollection\)\ streamcollection11";
Got message #598 from element "tsdemux0" (element): pmt, section=(GstMpegtsSection)NULL;
Got message #602 from element "tsdemux0" (element): pat, section=(GstMpegtsSection)NULL;
Got message #604 from element "decodebin3-0" (stream-collection): GstMessageStreamCollection, collection=(GstStreamCollection)"\(GstStreamCollection\)\ streamcollection12";
Got message #605 from element "tsdemux0" (element): pmt, section=(GstMpegtsSection)NULL;
Got message #609 from element "tsdemux0" (element): pat, section=(GstMpegtsSection)NULL;
Got message #611 from element "decodebin3-0" (stream-collection): GstMessageStreamCollection, collection=(GstStreamCollection)"\(GstStreamCollection\)\ streamcollection13";
Got message #612 from element "tsdemux0" (element): pmt, section=(GstMpegtsSection)NULL;
Got message #615 from element "tsdemux0" (element): pat, section=(GstMpegtsSection)NULL;
Got message #617 from element "decodebin3-0" (stream-collection): GstMessageStreamCollection, collection=(GstStreamCollection)"\(GstStreamCollection\)\ streamcollection14";
Got message #618 from element "tsdemux0" (element): pmt, section=(GstMpegtsSection)NULL;
Got message #619 from element "tsdemux0" (element): pat, section=(GstMpegtsSection)NULL;
Got message #621 from element "decodebin3-0" (stream-collection): GstMessageStreamCollection, collection=(GstStreamCollection)"\(GstStreamCollection\)\ streamcollection15";
Got message #622 from element "tsdemux0" (element): pmt, section=(GstMpegtsSection)NULL;
Got message #649 from element "tsdemux0" (element): pat, section=(GstMpegtsSection)NULL;
Got message #651 from element "decodebin3-0" (stream-collection): GstMessageStreamCollection, collection=(GstStreamCollection)"\(GstStreamCollection\)\ streamcollection16";
Got message #652 from element "tsdemux0" (element): pmt, section=(GstMpegtsSection)NULL;
Got message #669 from element "videosink-actual-sink-wayland" (tag): GstMessageTag, taglist=(taglist)"taglist\,\ video-codec\=\(string\)\"MPEG-2\\\ Video\\\ \\\(Main\\\ Profile\\\)\"\,\ minimum-bitrate\=\(uint\)6107200\,\ maximum-bitrate\=\(uint\)6107200\,\ bitrate\=\(uint\)2650580\;";
Got message #674 from element "videosink-actual-sink-wayland" (tag): GstMessageTag, taglist=(taglist)"taglist\,\ video-codec\=\(string\)\"MPEG-2\\\ Video\\\ \\\(Main\\\ Profile\\\)\"\,\ minimum-bitrate\=\(uint\)3577200\,\ maximum-bitrate\=\(uint\)6107200\,\ bitrate\=\(uint\)2734818\;";
Got message #675 from element "videosink-actual-sink-wayland" (tag): GstMessageTag, taglist=(taglist)"taglist\,\ video-codec\=\(string\)\"MPEG-2\\\ Video\\\ \\\(Main\\\ Profile\\\)\"\,\ minimum-bitrate\=\(uint\)1140400\,\ maximum-bitrate\=\(uint\)6107200\,\ bitrate\=\(uint\)2601950\;";
Got message #679 from element "videosink-actual-sink-wayland" (tag): GstMessageTag, taglist=(taglist)"taglist\,\ video-codec\=\(string\)\"MPEG-2\\\ Video\\\ \\\(Main\\\ Profile\\\)\"\,\ minimum-bitrate\=\(uint\)938000\,\ maximum-bitrate\=\(uint\)6107200\,\ bitrate\=\(uint\)2473953\;";
Got message #687 from element "videosink-actual-sink-wayland" (tag): GstMessageTag, taglist=(taglist)"taglist\,\ video-codec\=\(string\)\"MPEG-2\\\ Video\\\ \\\(Main\\\ Profile\\\)\"\,\ minimum-bitrate\=\(uint\)938000\,\ maximum-bitrate\=\(uint\)6107200\,\ bitrate\=\(uint\)2552500\;";
Got message #688 from element "videosink-actual-sink-wayland" (tag): GstMessageTag, taglist=(taglist)"taglist\,\ video-codec\=\(string\)\"MPEG-2\\\ Video\\\ \\\(Main\\\ Profile\\\)\"\,\ minimum-bitrate\=\(uint\)938000\,\ maximum-bitrate\=\(uint\)6107200\,\ bitrate\=\(uint\)2450760\;";
Got message #692 from element "tsdemux0" (element): pat, section=(GstMpegtsSection)NULL;
Got message #694 from element "decodebin3-0" (stream-collection): GstMessageStreamCollection, collection=(GstStreamCollection)"\(GstStreamCollection\)\ streamcollection17";
Got message #695 from element "tsdemux0" (element): pmt, section=(GstMpegtsSection)NULL;
Got message #699 from element "videosink-actual-sink-wayland" (tag): GstMessageTag, taglist=(taglist)"taglist\,\ video-codec\=\(string\)\"MPEG-2\\\ Video\\\ \\\(Main\\\ Profile\\\)\"\,\ minimum-bitrate\=\(uint\)938000\,\ maximum-bitrate\=\(uint\)6107200\,\ bitrate\=\(uint\)2360375\;";
Got message #708 from element "videosink-actual-sink-wayland" (tag): GstMessageTag, taglist=(taglist)"taglist\,\ video-codec\=\(string\)\"MPEG-2\\\ Video\\\ \\\(Main\\\ Profile\\\)\"\,\ minimum-bitrate\=\(uint\)715800\,\ maximum-bitrate\=\(uint\)6107200\,\ bitrate\=\(uint\)2287700\;";
Got message #710 from element "tsdemux0" (element): pat, section=(GstMpegtsSection)NULL;
Got message #712 from element "decodebin3-0" (stream-collection): GstMessageStreamCollection, collection=(GstStreamCollection)"\(GstStreamCollection\)\ streamcollection18";
Got message #713 from element "tsdemux0" (element): pmt, section=(GstMpegtsSection)NULL;
Got message #717 from element "videosink-actual-sink-wayland" (tag): GstMessageTag, taglist=(taglist)"taglist\,\ video-codec\=\(string\)\"MPEG-2\\\ Video\\\ \\\(Main\\\ Profile\\\)\"\,\ minimum-bitrate\=\(uint\)715800\,\ maximum-bitrate\=\(uint\)6107200\,\ bitrate\=\(uint\)2208810\;";
Got message #729 from element "videosink-actual-sink-wayland" (tag): GstMessageTag, taglist=(taglist)"taglist\,\ video-codec\=\(string\)\"MPEG-2\\\ Video\\\ \\\(Main\\\ Profile\\\)\"\,\ minimum-bitrate\=\(uint\)715800\,\ maximum-bitrate\=\(uint\)6107200\,\ bitrate\=\(uint\)2106172\;";
Got message #733 from element "tsdemux0" (element): pat, section=(GstMpegtsSection)NULL;
Got message #735 from element "decodebin3-0" (stream-collection): GstMessageStreamCollection, collection=(GstStreamCollection)"\(GstStreamCollection\)\ streamcollection19";
Got message #736 from element "tsdemux0" (element): pmt, section=(GstMpegtsSection)NULL;
Got message #743 from element "videosink-actual-sink-wayland" (tag): GstMessageTag, taglist=(taglist)"taglist\,\ video-codec\=\(string\)\"MPEG-2\\\ Video\\\ \\\(Main\\\ Profile\\\)\"\,\ minimum-bitrate\=\(uint\)715800\,\ maximum-bitrate\=\(uint\)6107200\,\ bitrate\=\(uint\)2168773\;";
Got message #744 from element "videosink-actual-sink-wayland" (tag): GstMessageTag, taglist=(taglist)"taglist\,\ video-codec\=\(string\)\"MPEG-2\\\ Video\\\ \\\(Main\\\ Profile\\\)\"\,\ minimum-bitrate\=\(uint\)715800\,\ maximum-bitrate\=\(uint\)6107200\,\ bitrate\=\(uint\)2114341\;";
Got message #755 from element "videosink-actual-sink-wayland" (tag): GstMessageTag, taglist=(taglist)"taglist\,\ video-codec\=\(string\)\"MPEG-2\\\ Video\\\ \\\(Main\\\ Profile\\\)\"\,\ minimum-bitrate\=\(uint\)715800\,\ maximum-bitrate\=\(uint\)6107200\,\ bitrate\=\(uint\)2072303\;";
Got message #766 from element "videosink-actual-sink-wayland" (tag): GstMessageTag, taglist=(taglist)"taglist\,\ video-codec\=\(string\)\"MPEG-2\\\ Video\\\ \\\(Main\\\ Profile\\\)\"\,\ minimum-bitrate\=\(uint\)715800\,\ maximum-bitrate\=\(uint\)6107200\,\ bitrate\=\(uint\)2122958\;";
Got message #767 from element "videosink-actual-sink-wayland" (tag): GstMessageTag, taglist=(taglist)"taglist\,\ video-codec\=\(string\)\"MPEG-2\\\ Video\\\ \\\(Main\\\ Profile\\\)\"\,\ minimum-bitrate\=\(uint\)715800\,\ maximum-bitrate\=\(uint\)6107200\,\ bitrate\=\(uint\)2077940\;";
Got message #768 from element "tsdemux0" (element): pat, section=(GstMpegtsSection)NULL;
Got message #770 from element "decodebin3-0" (stream-collection): GstMessageStreamCollection, collection=(GstStreamCollection)"\(GstStreamCollection\)\ streamcollection20";
Got message #771 from element "tsdemux0" (element): pmt, section=(GstMpegtsSection)NULL;
Got message #783 from element "tsdemux0" (element): pat, section=(GstMpegtsSection)NULL;
Got message #785 from element "decodebin3-0" (stream-collection): GstMessageStreamCollection, collection=(GstStreamCollection)"\(GstStreamCollection\)\ streamcollection21";
Got message #786 from element "tsdemux0" (element): pmt, section=(GstMpegtsSection)NULL;
Got message #790 from element "videosink-actual-sink-wayland" (tag): GstMessageTag, taglist=(taglist)"taglist\,\ video-codec\=\(string\)\"MPEG-2\\\ Video\\\ \\\(Main\\\ Profile\\\)\"\,\ minimum-bitrate\=\(uint\)715800\,\ maximum-bitrate\=\(uint\)6107200\,\ bitrate\=\(uint\)2027258\;";
Got message #797 from element "videosink-actual-sink-wayland" (tag): GstMessageTag, taglist=(taglist)"taglist\,\ video-codec\=\(string\)\"MPEG-2\\\ Video\\\ \\\(Main\\\ Profile\\\)\"\,\ minimum-bitrate\=\(uint\)715800\,\ maximum-bitrate\=\(uint\)6107200\,\ bitrate\=\(uint\)2072794\;";
Got message #806 from element "tsdemux0" (element): pat, section=(GstMpegtsSection)NULL;
Got message #808 from element "decodebin3-0" (stream-collection): GstMessageStreamCollection, collection=(GstStreamCollection)"\(GstStreamCollection\)\ streamcollection22";
Got message #809 from element "tsdemux0" (element): pmt, section=(GstMpegtsSection)NULL;
Got message #828 from element "tsdemux0" (element): pat, section=(GstMpegtsSection)NULL;
Got message #830 from element "decodebin3-0" (stream-collection): GstMessageStreamCollection, collection=(GstStreamCollection)"\(GstStreamCollection\)\ streamcollection23";
Got message #831 from element "tsdemux0" (element): pmt, section=(GstMpegtsSection)NULL;
Got message #842 from element "tsdemux0" (element): pat, section=(GstMpegtsSection)NULL;
Got message #849 from element "videosink-actual-sink-wayland" (tag): GstMessageTag, taglist=(taglist)"taglist\,\ video-codec\=\(string\)\"MPEG-2\\\ Video\\\ \\\(Main\\\ Profile\\\)\"\,\ minimum-bitrate\=\(uint\)715800\,\ maximum-bitrate\=\(uint\)6107200\,\ bitrate\=\(uint\)2137455\;";
Got message #861 from element "decodebin3-0" (stream-collection): GstMessageStreamCollection, collection=(GstStreamCollection)"\(GstStreamCollection\)\ streamcollection24";
Got message #862 from element "tsdemux0" (element): pmt, section=(GstMpegtsSection)NULL;
Got message #863 from element "tsdemux0" (element): pat, section=(GstMpegtsSection)NULL;
Got message #880 from element "videosink-actual-sink-wayland" (tag): GstMessageTag, taglist=(taglist)"taglist\,\ video-codec\=\(string\)\"MPEG-2\\\ Video\\\ \\\(Main\\\ Profile\\\)\"\,\ minimum-bitrate\=\(uint\)152600\,\ maximum-bitrate\=\(uint\)6107200\,\ bitrate\=\(uint\)2092096\;";
Got message #883 from element "decodebin3-0" (stream-collection): GstMessageStreamCollection, collection=(GstStreamCollection)"\(GstStreamCollection\)\ streamcollection25";
Got message #884 from element "tsdemux0" (element): pmt, section=(GstMpegtsSection)NULL;
Got message #885 from element "tsdemux0" (element): pat, section=(GstMpegtsSection)NULL;
Got message #894 from element "decodebin3-0" (stream-collection): GstMessageStreamCollection, collection=(GstStreamCollection)"\(GstStreamCollection\)\ streamcollection26";
Got message #895 from element "tsdemux0" (element): pmt, section=(GstMpegtsSection)NULL;
Got message #914 from element "tsdemux0" (element): pat, section=(GstMpegtsSection)NULL;
Got message #916 from element "decodebin3-0" (stream-collection): GstMessageStreamCollection, collection=(GstStreamCollection)"\(GstStreamCollection\)\ streamcollection27";
Got message #917 from element "tsdemux0" (element): pmt, section=(GstMpegtsSection)NULL;
Got message #927 from element "videosink-actual-sink-wayland" (tag): GstMessageTag, taglist=(taglist)"taglist\,\ video-codec\=\(string\)\"MPEG-2\\\ Video\\\ \\\(Main\\\ Profile\\\)\"\,\ minimum-bitrate\=\(uint\)152600\,\ maximum-bitrate\=\(uint\)6107200\,\ bitrate\=\(uint\)2136175\;";
Got message #936 from element "tsdemux0" (element): pat, section=(GstMpegtsSection)NULL;
Got message #938 from element "decodebin3-0" (stream-collection): GstMessageStreamCollection, collection=(GstStreamCollection)"\(GstStreamCollection\)\ streamcollection28";
Got message #939 from element "tsdemux0" (element): pmt, section=(GstMpegtsSection)NULL;
Got message #950 from element "tsdemux0" (element): pat, section=(GstMpegtsSection)NULL;
Got message #960 from element "videosink-actual-sink-wayland" (tag): GstMessageTag, taglist=(taglist)"taglist\,\ video-codec\=\(string\)\"MPEG-2\\\ Video\\\ \\\(Main\\\ Profile\\\)\"\,\ minimum-bitrate\=\(uint\)152600\,\ maximum-bitrate\=\(uint\)6107200\,\ bitrate\=\(uint\)2206400\;";
Got message #968 from element "decodebin3-0" (stream-collection): GstMessageStreamCollection, collection=(GstStreamCollection)"\(GstStreamCollection\)\ streamcollection29";
Got message #969 from element "tsdemux0" (element): pmt, section=(GstMpegtsSection)NULL;
Got message #970 from element "tsdemux0" (element): pat, section=(GstMpegtsSection)NULL;
Got message #979 from element "videosink-actual-sink-wayland" (tag): GstMessageTag, taglist=(taglist)"taglist\,\ video-codec\=\(string\)\"MPEG-2\\\ Video\\\ \\\(Main\\\ Profile\\\)\"\,\ minimum-bitrate\=\(uint\)152600\,\ maximum-bitrate\=\(uint\)6107200\,\ bitrate\=\(uint\)2266270\;";
Got message #991 from element "decodebin3-0" (stream-collection): GstMessageStreamCollection, collection=(GstStreamCollection)"\(GstStreamCollection\)\ streamcollection30";
Got message #992 from element "tsdemux0" (element): pmt, section=(GstMpegtsSection)NULL;
Got message #993 from element "tsdemux0" (element): pat, section=(GstMpegtsSection)NULL;
Got message #1006 from element "videosink-actual-sink-wayland" (tag): GstMessageTag, taglist=(taglist)"taglist\,\ video-codec\=\(string\)\"MPEG-2\\\ Video\\\ \\\(Main\\\ Profile\\\)\"\,\ minimum-bitrate\=\(uint\)152600\,\ maximum-bitrate\=\(uint\)6107200\,\ bitrate\=\(uint\)2313759\;";
Got message #1008 from element "decodebin3-0" (stream-collection): GstMessageStreamCollection, collection=(GstStreamCollection)"\(GstStreamCollection\)\ streamcollection31";
Got message #1009 from element "tsdemux0" (element): pmt, section=(GstMpegtsSection)NULL;
Got message #1010 from element "tsdemux0" (element): pat, section=(GstMpegtsSection)NULL;
Got message #1022 from element "decodebin3-0" (stream-collection): GstMessageStreamCollection, collection=(GstStreamCollection)"\(GstStreamCollection\)\ streamcollection32";
Got message #1023 from element "tsdemux0" (element): pmt, section=(GstMpegtsSection)NULL;
Got message #1039 from element "tsdemux0" (element): pat, section=(GstMpegtsSection)NULL;
Got message #1041 from element "decodebin3-0" (stream-collection): GstMessageStreamCollection, collection=(GstStreamCollection)"\(GstStreamCollection\)\ streamcollection33";
Got message #1042 from element "tsdemux0" (element): pmt, section=(GstMpegtsSection)NULL;
Got message #1049 from element "videosink-actual-sink-wayland" (tag): GstMessageTag, taglist=(taglist)"taglist\,\ video-codec\=\(string\)\"MPEG-2\\\ Video\\\ \\\(Main\\\ Profile\\\)\"\,\ minimum-bitrate\=\(uint\)152600\,\ maximum-bitrate\=\(uint\)6107200\,\ bitrate\=\(uint\)2370565\;";
Got message #1050 from element "tsdemux0" (element): pat, section=(GstMpegtsSection)NULL;
Got message #1053 from element "decodebin3-0" (stream-collection): GstMessageStreamCollection, collection=(GstStreamCollection)"\(GstStreamCollection\)\ streamcollection34";
Got message #1054 from element "tsdemux0" (element): pmt, section=(GstMpegtsSection)NULL;
Got message #1076 from element "tsdemux0" (element): pat, section=(GstMpegtsSection)NULL;
Got message #1078 from element "decodebin3-0" (stream-collection): GstMessageStreamCollection, collection=(GstStreamCollection)"\(GstStreamCollection\)\ streamcollection35";
Got message #1079 from element "tsdemux0" (element): pmt, section=(GstMpegtsSection)NULL;
Got message #1104 from element "tsdemux0" (element): pat, section=(GstMpegtsSection)NULL;
Got message #1106 from element "decodebin3-0" (stream-collection): GstMessageStreamCollection, collection=(GstStreamCollection)"\(GstStreamCollection\)\ streamcollection36";
Got message #1107 from element "tsdemux0" (element): pmt, section=(GstMpegtsSection)NULL;
Got message #1123 from element "tsdemux0" (element): pat, section=(GstMpegtsSection)NULL;
Got message #1125 from element "decodebin3-0" (stream-collection): GstMessageStreamCollection, collection=(GstStreamCollection)"\(GstStreamCollection\)\ streamcollection37";
Got message #1126 from element "tsdemux0" (element): pmt, section=(GstMpegtsSection)NULL;
Got message #1142 from element "tsdemux0" (element): pat, section=(GstMpegtsSection)NULL;
Got message #1144 from element "decodebin3-0" (stream-collection): GstMessageStreamCollection, collection=(GstStreamCollection)"\(GstStreamCollection\)\ streamcollection38";
Got message #1145 from element "tsdemux0" (element): pmt, section=(GstMpegtsSection)NULL;
Got message #1153 from element "tsdemux0" (element): pat, section=(GstMpegtsSection)NULL;
Got message #1155 from element "decodebin3-0" (stream-collection): GstMessageStreamCollection, collection=(GstStreamCollection)"\(GstStreamCollection\)\ streamcollection39";
Got message #1156 from element "tsdemux0" (element): pmt, section=(GstMpegtsSection)NULL;
Got message #1174 from element "tsdemux0" (element): pat, section=(GstMpegtsSection)NULL;
Got message #1176 from element "decodebin3-0" (stream-collection): GstMessageStreamCollection, collection=(GstStreamCollection)"\(GstStreamCollection\)\ streamcollection40";
Got message #1177 from element "tsdemux0" (element): pmt, section=(GstMpegtsSection)NULL;
Got message #1190 from element "videosink-actual-sink-wayland" (tag): GstMessageTag, taglist=(taglist)"taglist\,\ video-codec\=\(string\)\"MPEG-2\\\ Video\\\ \\\(Main\\\ Profile\\\)\"\,\ minimum-bitrate\=\(uint\)143800\,\ maximum-bitrate\=\(uint\)6107200\,\ bitrate\=\(uint\)2387022\;";
Got message #1195 from element "tsdemux0" (element): pat, section=(GstMpegtsSection)NULL;
Got message #1197 from element "decodebin3-0" (stream-collection): GstMessageStreamCollection, collection=(GstStreamCollection)"\(GstStreamCollection\)\ streamcollection41";
Got message #1198 from element "tsdemux0" (element): pmt, section=(GstMpegtsSection)NULL;
Got message #1214 from element "tsdemux0" (element): pat, section=(GstMpegtsSection)NULL;
Got message #1219 from element "decodebin3-0" (stream-collection): GstMessageStreamCollection, collection=(GstStreamCollection)"\(GstStreamCollection\)\ streamcollection42";
Got message #1220 from element "tsdemux0" (element): pmt, section=(GstMpegtsSection)NULL;
Got message #1237 from element "tsdemux0" (element): pat, section=(GstMpegtsSection)NULL;
Got message #1239 from element "decodebin3-0" (stream-collection): GstMessageStreamCollection, collection=(GstStreamCollection)"\(GstStreamCollection\)\ streamcollection43";
Got message #1240 from element "tsdemux0" (element): pmt, section=(GstMpegtsSection)NULL;
Got message #1256 from element "tsdemux0" (element): pat, section=(GstMpegtsSection)NULL;
Got message #1259 from element "decodebin3-0" (stream-collection): GstMessageStreamCollection, collection=(GstStreamCollection)"\(GstStreamCollection\)\ streamcollection44";
Got message #1260 from element "tsdemux0" (element): pmt, section=(GstMpegtsSection)NULL;
Got message #1271 from element "tsdemux0" (element): pat, section=(GstMpegtsSection)NULL;
Got message #1273 from element "decodebin3-0" (stream-collection): GstMessageStreamCollection, collection=(GstStreamCollection)"\(GstStreamCollection\)\ streamcollection45";
Got message #1274 from element "tsdemux0" (element): pmt, section=(GstMpegtsSection)NULL;
Got message #1299 from element "videosink-actual-sink-wayland" (tag): GstMessageTag, taglist=(taglist)"taglist\,\ video-codec\=\(string\)\"MPEG-2\\\ Video\\\ \\\(Main\\\ Profile\\\)\"\,\ minimum-bitrate\=\(uint\)143800\,\ maximum-bitrate\=\(uint\)6716200\,\ bitrate\=\(uint\)2424970\;";
Got message #1300 from element "tsdemux0" (element): pat, section=(GstMpegtsSection)NULL;
Got message #1302 from element "decodebin3-0" (stream-collection): GstMessageStreamCollection, collection=(GstStreamCollection)"\(GstStreamCollection\)\ streamcollection46";
Got message #1303 from element "tsdemux0" (element): pmt, section=(GstMpegtsSection)NULL;
Got message #1310 from element "tsdemux0" (element): pat, section=(GstMpegtsSection)NULL;
Got message #1312 from element "decodebin3-0" (stream-collection): GstMessageStreamCollection, collection=(GstStreamCollection)"\(GstStreamCollection\)\ streamcollection47";
Got message #1313 from element "tsdemux0" (element): pmt, section=(GstMpegtsSection)NULL;
Got message #1336 from element "tsdemux0" (element): pat, section=(GstMpegtsSection)NULL;
Got message #1338 from element "decodebin3-0" (stream-collection): GstMessageStreamCollection, collection=(GstStreamCollection)"\(GstStreamCollection\)\ streamcollection48";
Got message #1339 from element "tsdemux0" (element): pmt, section=(GstMpegtsSection)NULL;
Got message #1365 from element "tsdemux0" (element): pat, section=(GstMpegtsSection)NULL;
Got message #1368 from element "decodebin3-0" (stream-collection): GstMessageStreamCollection, collection=(GstStreamCollection)"\(GstStreamCollection\)\ streamcollection49";
Got message #1369 from element "tsdemux0" (element): pmt, section=(GstMpegtsSection)NULL;
Got message #1371 from element "tsdemux0" (element): pat, section=(GstMpegtsSection)NULL;
Got message #1384 from element "videosink-actual-sink-wayland" (tag): GstMessageTag, taglist=(taglist)"taglist\,\ video-codec\=\(string\)\"MPEG-2\\\ Video\\\ \\\(Main\\\ Profile\\\)\"\,\ minimum-bitrate\=\(uint\)135000\,\ maximum-bitrate\=\(uint\)6716200\,\ bitrate\=\(uint\)2431901\;";
Got message #1389 from element "decodebin3-0" (stream-collection): GstMessageStreamCollection, collection=(GstStreamCollection)"\(GstStreamCollection\)\ streamcollection50";
Got message #1390 from element "tsdemux0" (element): pmt, section=(GstMpegtsSection)NULL;
Got message #1391 from element "tsdemux0" (element): pat, section=(GstMpegtsSection)NULL;
Got message #1411 from element "decodebin3-0" (stream-collection): GstMessageStreamCollection, collection=(GstStreamCollection)"\(GstStreamCollection\)\ streamcollection51";
Got message #1412 from element "tsdemux0" (element): pmt, section=(GstMpegtsSection)NULL;
Got message #1414 from element "tsdemux0" (element): pat, section=(GstMpegtsSection)NULL;
Got message #1431 from element "decodebin3-0" (stream-collection): GstMessageStreamCollection, collection=(GstStreamCollection)"\(GstStreamCollection\)\ streamcollection52";
Got message #1432 from element "tsdemux0" (element): pmt, section=(GstMpegtsSection)NULL;
Got message #1433 from element "tsdemux0" (element): pat, section=(GstMpegtsSection)NULL;
^Chandling interrupt.
Got message #1437 from element "playbin3-0" (application): GstLaunchInterrupt, message=(string)"Pipeline\ interrupted";
Interrupt: Stopping pipeline ...
Execution ended after 0:00:10.749002349
Setting pipeline to NULL ...
Freeing pipeline ...
root@RK3588:~#
</pre></code>
</details>[logfile.gz](/uploads/29435329ff4d31c313449954ab6730b5/logfile.gz)https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/1557interlace: 2:2 mode alternate fields appear the same2022-11-09T23:15:21ZPete Eberleininterlace: 2:2 mode alternate fields appear the same### Describe your issue
The interlace plugin seems to be copying the same field twice, when used in the 2:2 mode with alternate fields, causing the output video to appear lower-resolution than the source. Also the 'top-field-first' opti...### Describe your issue
The interlace plugin seems to be copying the same field twice, when used in the 2:2 mode with alternate fields, causing the output video to appear lower-resolution than the source. Also the 'top-field-first' option has no visible effect in this mode.
#### Expected Behavior
The output video would look the same resolution as the source.
#### Observed Behavior
The output video appears lower-resolution than the source.
#### Setup
- **Operating System:** Ubuntu Linux 22.10
- **Device:** Computer
- **GStreamer Version:** 1.20.4
- **Command line:**
```
gst-launch-1.0 videotestsrc pattern=spokes ! \
"video/x-raw,width=704,height=480,format=UYVY,framerate=30000/1001" ! \
interlace field-pattern=2:2 top-field-first=false ! \
"video/x-raw(format:Interlaced),width=704,height=480,format=UYVY,interlace-mode=alternate" ! \
queue ! v4l2sink device=/dev/video4 sync=true
```
### Solutions you have tried
This patch makes the output appear correct, and the 'top-field-first' option will now toggle the field order.
```
diff --git a/subprojects/gst-plugins-bad/gst/interlace/gstinterlace.c.orig b/subprojects/gst-plugins-bad/gst/interlace/gstinterlace.c
index ca22e74..31cfed6 100644
--- a/subprojects/gst-plugins-bad/gst/interlace/gstinterlace.c.orig
+++ b/subprojects/gst-plugins-bad/gst/interlace/gstinterlace.c
@@ -1175,6 +1175,12 @@ copy_field (GstInterlace * interlace, GstBuffer * src, int field_index)
ds = GST_VIDEO_FRAME_PLANE_STRIDE (&dframe, i);
ss = GST_VIDEO_FRAME_PLANE_STRIDE (&sframe, i);
+ if (!interlace->switch_fields) {
+ s += field_index * ss;
+ } else {
+ s += (field_index ^ 1) * ss;
+ }
+
cheight = GST_VIDEO_FRAME_COMP_HEIGHT (&sframe, i);
cwidth = MIN (ABS (ss), ABS (ds));
```https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/1556kmssink: typo in list of well-known non-square-pixel ratios2022-11-14T09:58:38ZMatthijs Kooijmankmssink: typo in list of well-known non-square-pixel ratios### Describe your issue
The [`gst_video_calculate_device_ratio`](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/blob/main/subprojects/gst-plugins-bad/sys/kms/gstkmsutils.c#L230) function calculates the non-square-pixel ratio for an...### Describe your issue
The [`gst_video_calculate_device_ratio`](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/blob/main/subprojects/gst-plugins-bad/sys/kms/gstkmsutils.c#L230) function calculates the non-square-pixel ratio for an output, and then rounds it to the nearest ratio from a list of well-known ratios. This list contains common ratios for things like using a 4:3 resolution on a 16:9 (physical size) screen.
One of the items in this list seems to have the wrong value based on the comment, probably incorrectly calculated.
Here's the list:
```c
static const gint device_par_map[][2] = {
{1, 1}, /* regular screen */
{16, 15}, /* PAL TV */
{11, 10}, /* 525 line Rec.601 video */
{54, 59}, /* 625 line Rec.601 video */
{64, 45}, /* 1280x1024 on 16:9 display */
{5, 3}, /* 1280x1024 on 4:3 display */
{4, 3} /* 800x600 on 16:9 display */
};
```
According to the implementation, these ratios are calculated as "the "physical" w/h divided by the w/h in pixels of the display" or `(dev_width_mm * dev_height) / (dev_height_mm * dev_width)` but since everything is ratios, we can just substitute the ratios instead of the actual pixels and mm sizes.
Looking at "1280x1024 on 16:9 display", the resolution is 5:4, so the resulting ratio is (16×4) : (9×5) = 64:45, as shown in the list.
Looking at "800x600 on 16:9 display", the resolution is 4:3, so the resulting ratio is (16×3) : (9×4) = 48:36 = 4:3 as shown in the list.
But looking at "1280x1024 on 4:3 display", the resolution is 5:4 so the resulting ratio is (4×4) : (3×5) = 16:15, not 5:3 as shown in the list. I suspect that the value shown was calculated with the 5 and 4 swapped: (4×5) : (3×4) = 20:12 = 5:3.
I believe this is a trivial fix:
```diff
- {5, 3}, /* 1280x1024 on 4:3 display */
+ {16, 15}, /* 1280x1024 on 4:3 display */
```
I would submit a MR, but I do not have a development setup here to actually test, nor do I really know what this code impacts and how I should test it (also note that the kmssink code that processes the result of this function to compensate for non-square pixels seems broken, see #1555, also for some way to force resolutions which might be helpful to test this).
Looking at the commit history, it seems that this code was already (broken?) like this when it was first introduced in [commit 1aee6cd](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/commit/1aee6cdc25572d856ca414940689194f54fd9054) by @vjaquez.https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/1555kmssink: Messes up scaling when output has non-square pixels2024-01-19T21:54:17ZMatthijs Kooijmankmssink: Messes up scaling when output has non-square pixels### Describe your issue
TL;DR: When the output has non-square pixels, kmssink will compensate for that by either cropping (instead of scaling) the video, or picking a drm render mode src size that is larger than the video frames, causing...### Describe your issue
TL;DR: When the output has non-square pixels, kmssink will compensate for that by either cropping (instead of scaling) the video, or picking a drm render mode src size that is larger than the video frames, causing drm to refuse (and gst then falls back to just rendering pixels 1:1).
#### Expected Behavior
Gstreamer should scale a video appropriately to compensate for non-square pixels
#### Observed Behavior
Gstreamer either crops the video, or tries to scale it incorrectly resulting in no scaling at all
### Original problem
This is an issue I noticed while running on an Orange Pi SBC with a HDMI screen that reported incorrect dimensions, but I can reproduce it on a regular machine by forcing a 16:9 resolution on a 4:3 screen as well. I've had a look at the code and I suspect that the way this is handled might be all wrong, but I do not have enough familiarity with the code to really tell where the problem is and what the fix would be, so I'll just share my observations here and hope someone else will pick it up.
The original problem was:
- Rendering a 1920x1080 video to an 1920x1080 (16:9) HDMI screen with playbin3.
- The screen reports a size of 300x260mm (10.4:9), which would mean pixels are not square, but have a 1.54:1 pixel ratio (which [`gst_video_calculate_device_ratio`](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/blob/135edee4840dba610cb2191c087d828e422d908d/subprojects/gst-plugins-bad/sys/kms/gstkmsutils.c#L230) rounds to 5:3).
- [`gst_kms_sink_calculate_display_ratio`](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/blob/135edee4840dba610cb2191c087d828e422d908d/subprojects/gst-plugins-bad/sys/kms/gstkmssink.c#L1073), which seems to be intended to compensate for the non-square pixels, then decides the sink size should become 3200x1080. I'm not entirely sure what this number means, I think that *if* the video would be stretched up to this value, and then proportionally scaled back down to the 1920x1080 output, *then* I believe it would be displayed correctly (with black bars above and below) - in the case the physical size of the display was really correct.
- However, the sink size is not used like this, but instead is used to set the "SRC" size of the DRM plane mode (iow, which pixels to take from the video to optionally scale and render into the given DST size). Since the video only has 1920x1080 pixels, the kernel refuses to set this up and [`drmModeSetPlane`](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/blob/135edee4840dba610cb2191c087d828e422d908d/subprojects/gst-plugins-bad/sys/kms/gstkmssink.c#L1672) fails. If you enable drm kernel debug output (`echo 0x04 | sudo tee /sys/module/drm/parameters/debug`), the kernel complains about this:
[drm:drm_framebuffer_check_src_coords] Invalid source coordinates 3200.000000x1080.000000+0.000000+0.000000 (fb 1920x1088)
(note that the fb 1920x1088 is not the *output* fb size, but the input memory buffer that contains video)
- Because the modeset fails, gstreamer unsets can_scale and retries, which causes the video to be rendered pixel-for-pixel to the output making it fullscreen (since video and output resolution are the same). Even though this is what I wanted, gstreamer is not behaving correctly in the face of the specified physical size.
- When rendering a second video with the same kmssink, the negotiation is now done with can_scale=false, which means that kmssink advertises its non-square pixels, causing playbin to add a software scaling step to (correctly) add black horizontal bars and the output is correct (but needlessly slow, since drm could have handled scaling).
### Steps to reproduce the bug
To reproduce this issue on a regular PC, I:
- Passed the `video=DP-1:1280x720` option on the kernel commandline. This forced my 4:3 monitor into a 16:9 resolution, i.e. non-square pixels
- Played a test video: `sudo GST_DEBUG=kmssink:5 gst-launch-1.0 -v videotestsrc ! video/x-raw,width=1920,height=1080 ! kmssink connector-id=317` (added `sudo` to allow DRM access, passed a connector-id to use the right monitor, value taken from `drm_info`, I used 1920x1080 video instead of 1280x720 to [trigger this if](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/blob/135edee4840dba610cb2191c087d828e422d908d/subprojects/gst-plugins-bad/sys/kms/gstkmssink.c#L1108).
- As before, this sets the sink size too large (2560x1080) and makes the drm plane fail (`kernel: [drm:drm_framebuffer_check_src_coords [drm]] Invalid source coordinates 2560.000000x1080.000000+0.000000+0.000000 (fb 1920x1080)`), falling back to 1:1 pixel rendering, which shows only the top left 1280x720 pixels (since the display resolution is smaller than the video resolution).
- Gstreamer output: [gst-output.txt](/uploads/b231cea8dc8f356deb2a9548a2d26bbf/gst-output.txt)
The issue can also manifest itself differently depending on the video resolution:
- `sudo GST_DEBUG=kmssink:5 gst-launch-1.0 -v videotestsrc ! video/x-raw,width=1280,height=720 ! kmssink connector-id=317`
- This [ends up in this if](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/blob/135edee4840dba610cb2191c087d828e422d908d/subprojects/gst-plugins-bad/sys/kms/gstkmssink.c#L1113), setting the sink resolution to 1280x540. Again, if the video would be stretched to this value and then proportionally scaled to the fill the output (which would not need scaling in this case), the output would be ok. But instead of that, the output shows black bars top and bottom, but the actual video is cropped (only showing 540 of the 720 lines), which is also incorrect. I didn't get output of this run.
And also here, with can_scale=false and a videoscale element, the non-square pixels are compensated for properly, showing the image with horizontal bars as expected: `sudo GST_DEBUG=kmssink:5 gst-launch-1.0 -v videotestsrc ! video/x-raw,width=1920,height=1080 ! videoscale ! kmssink connector-id=317 can_scale=false`
### Analysis and solution
As I said, I am not entirely sure how this is supposed to work, but I have the feeling that `gst_kms_sink_calculate_display_ratio()` is not doing the right thing. Instead of modifying the SRC rectangle for rendering, I think the non-square-pixel compensation should be modifying the DST rectangle instead. i.e. always render the full src, but possible compress it to add bars to the output). This is also what is done currently when the video and output ratio do not match (through [gst_video_sink_center_rect in `gst_kms_sink_show_frame`](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/blob/135edee4840dba610cb2191c087d828e422d908d/subprojects/gst-plugins-bad/sys/kms/gstkmssink.c#L1637))
Looking at the commit history, it seems that this code was already (broken?) like this when it was first introduced in [commit 1aee6cd](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/commit/1aee6cdc25572d856ca414940689194f54fd9054) by @vjaquez.
#### Setup (for the PC reproduction case)
- **Operating System:** Ubuntu 22.04
- **Device:** Computer
- **GStreamer Version:** GStreamer 1.20.3https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/issues/1741kmssink: Messes up scaling when output has non-square pixels2022-11-09T16:45:45ZMatthijs Kooijmankmssink: Messes up scaling when output has non-square pixelsTL;DR: When the output has non-square pixels, kmssink will compensate for that by either cropping (instead of scaling) the video, or picking a drm render mode src size that is larger than the video frames, causing drm to refuse (and gst ...TL;DR: When the output has non-square pixels, kmssink will compensate for that by either cropping (instead of scaling) the video, or picking a drm render mode src size that is larger than the video frames, causing drm to refuse (and gst then falls back to just rendering pixels 1:1).
This is an issue I noticed while running on an Orange Pi SBC with a HDMI screen that reported incorrect dimensions, but I can reproduce it on a regular machine by forcing a 16:9 resolution on a 4:3 screen as well. I've had a look at the code and I suspect that the way this is handled might be all wrong, but I do not have enough familiarity with the code to really tell where the problem is and what the fix would be, so I'll just share my observations here and hope someone else will pick it up.
The original problem was:
- Rendering a 1920x1080 video to an 1920x1080 (16:9) HDMI screen with playbin3.
- The screen reports a size of 300x260mm (10.4:9), which would mean pixels are not square, but have a 1.54:1 pixel ratio (which [`gst_video_calculate_device_ratio`](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/blob/main/subprojects/gst-plugins-bad/sys/kms/gstkmsutils.c#L230) rounds to 5:3).
- [`gst_kms_sink_calculate_display_ratio`](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/blob/main/subprojects/gst-plugins-bad/sys/kms/gstkmssink.c#L1073), which seems to be intended to compensate for the non-square pixels, then decides the sink size should become 3200x1080. I'm not entirely sure what this number means, I think that *if* the video would be stretched up to this value, and then proportionally scaled back down to the 1920x1080 output, *then* I b believe it would be displayed correctly (with black bars above and below) - in the case the physical size of the display was really correct.
- However, the sink size is not used like this, but instead is used to set the "SRC" size of the DRM plane mode (iow, which pixels to take from the video to optionally scale and render into the given DST size). Since the video only has 1920x1080 pixels, the kernel refuses to set this up and [`drmModeSetPlane`](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/blob/main/subprojects/gst-plugins-bad/sys/kms/gstkmssink.c#L1672) fails. If you enable drm kernel debug output (`echo 0x04 | sudo tee /sys/module/drm/parameters/debug`), the kernel complains about this:
[drm:drm_framebuffer_check_src_coords] Invalid source coordinates 3200.000000x1080.000000+0.000000+0.000000 (fb 1920x1088)
(note that the fb 1920x1088 is not the *output* fb size, but the input memory buffer that contains video)
- Because the modeset fails, gstreamer unsets can_scale and retries, which causes the video to be rendered pixel-for-pixel to the output making it fullscreen (since video and output resolution are the same). Even though this is what I wanted, gstreamer is not behaving correctly in the face of the specified physical size.
- When rendering a second video with the same kmssink, the negotiation is now down with can_scale=false, which means that kmssink advertises its non-square pixels, causing playbin to add a software scaling step to (correctly) add black horizontal bars and the output is correct (but needlessly slow, since drm could have handled scaling).
To reproduce this issue on a regular PC, I:
- Passed the `video=DP-1:1280x720` option on the kernel commandline. This forced my 4:3 monitor into a 16:9 resolution, i.e. non-square pixels
- Played a test video: `sudo GST_DEBUG=kmssink:5 gst-launch-1.0 -v videotestsrc ! video/x-raw,width=1920,height=1080 ! kmssink connector-id=317` (added `sudo` to allow DRM access, passed a connector-id to use the right monitor, value taken from `drm_info`, I used 1920x1080 video instead of 1280x720 to [trigger this if](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/blob/main/subprojects/gst-plugins-bad/sys/kms/gstkmssink.c#L1108).
- As before, this sets the sink size too large (2560x1080) and makes the drm plane fail (`kernel: [drm:drm_framebuffer_check_src_coords [drm]] Invalid source coordinates 2560.000000x1080.000000+0.000000+0.000000 (fb 1920x1080)`), falling back to 1:1 pixel rendering, which shows only the top left 1280x720 pixels (since the display resolution is smaller than the video resolution).
- Gstreamer output: [gst-output.txt](/uploads/b231cea8dc8f356deb2a9548a2d26bbf/gst-output.txt)
The issue can also manifest itself differently depending on the video resolution:
- `sudo GST_DEBUG=kmssink:5 gst-launch-1.0 -v videotestsrc ! video/x-raw,width=1280,height=720 ! kmssink connector-id=317`
- This [ends up in this if](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/blob/main/subprojects/gst-plugins-bad/sys/kms/gstkmssink.c#L1113), setting the sink resolution to 1280x540. Again, if the video would be stretched to this value and then proportionally scaled to the fill the output (which would not need scaling in this case), the output would be ok. But instead of that, the output shows black bars top and bottom, but the actual video is cropped (only showing 540 of the 720 lines), which is also incorrect. I didn't get output of this run.
And also here, with can_scale=false and a videoscale element, the non-square pixels are compensated for properly, showing the image with horizontal bars as expected: `sudo GST_DEBUG=kmssink:5 gst-launch-1.0 -v videotestsrc ! video/x-raw,width=1920,height=1080 ! videoscale ! kmssink connector-id=317 can_scale=false`
As I said, I am not entirely sure how this is supposed to work, but I have the feeling that `gst_kms_sink_calculate_display_ratio()` is not doing the right thing. Instead of modifying the SRC rectangle for rendering, I think the non-square-pixel compensation should be modifying the DST rectangle instead. i.e. always render the full src, but possible compress it to add bars to the output). This is also what is done currently when the video and output ratio do not match (through [gst_video_sink_center_rect in `gst_kms_sink_show_frame`](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/blob/main/subprojects/gst-plugins-bad/sys/kms/gstkmssink.c#L1637))
Looking at the commit history, it seems that this code was already (broken?) like this when it was first introduced in [commit 1aee6cd](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/commit/1aee6cdc25572d856ca414940689194f54fd9054) by @vjaquez.https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/1554queue2: overwrite in ring-buffer modes2022-11-09T18:52:59ZEdward Herveyqueue2: overwrite in ring-buffer modesReproducible with `USE_PLAYBIN3=1 gst-validate-launcher -t validate.test.mp4.redirect.play_15s -f -F`
* There is `queue2` in ringbuffer mode *upstream* of `typefind ! qtdemux`
* Initially `typefind` pulls 4096 bytes from offset 0 from`q...Reproducible with `USE_PLAYBIN3=1 gst-validate-launcher -t validate.test.mp4.redirect.play_15s -f -F`
* There is `queue2` in ringbuffer mode *upstream* of `typefind ! qtdemux`
* Initially `typefind` pulls 4096 bytes from offset 0 from`queue2`
* Later `qtdemux` attempts to pull 16 bytes from offset 0 ... and does *not* get the data from offset 0 (it's from a later position)
Wasn't able to look to deep into it, but it seems as though the tracking of which offset is present in the ringbuffer is invalid when doing little pulls like that.https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/issues/265fallbacksrc: non live fallback mixed with the live source2022-11-09T14:20:42ZWojciech Kapsafallbacksrc: non live fallback mixed with the live sourceI wonder if there is a possibility to use the filesrc as a fallback-uri when the uri is a live source:
gst-launch-1.0 fallbacksrc uri=rtsp://127.0.0.1/live/av0 fallback-uri=file:///home/test/fall.mp4 ! videoconvert ! videoscale ! ximag...I wonder if there is a possibility to use the filesrc as a fallback-uri when the uri is a live source:
gst-launch-1.0 fallbacksrc uri=rtsp://127.0.0.1/live/av0 fallback-uri=file:///home/test/fall.mp4 ! videoconvert ! videoscale ! ximagesink
Currently, the pipeline will not show the fallback-uri recording.https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/issues/998GStreamer static compilation and link for qmlglsink2022-11-18T15:50:16ZphysicsXGStreamer static compilation and link for qmlglsinkHello
I built gstreamer statically from here https://gitlab.freedesktop.org/gstreamer/gst-build.git
As I see, there is libgstreamer-full-1.0.a static library in the build directory.
I would like to run gst-plugins-good/tests/examples...Hello
I built gstreamer statically from here https://gitlab.freedesktop.org/gstreamer/gst-build.git
As I see, there is libgstreamer-full-1.0.a static library in the build directory.
I would like to run gst-plugins-good/tests/examples/qt/qmlsink example with my static library.
But I do not know how to load "qmlglsink" from static library.
When I linked static library directly it gives this error: (because it can not load the pluging)
qrc:/main.qml:7:1: module "org.freedesktop.gstreamer.GLVideoItem" is not installed
Could you please explain the necessary steps to load and run the "qmlglsink" plugin with static library.
Thank you.Stéphane Cerveauscerveau@igalia.comStéphane Cerveauscerveau@igalia.com