GStreamer issueshttps://gitlab.freedesktop.org/groups/gstreamer/-/issues2023-08-09T09:20:29Zhttps://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/2881webrtcbin: no offer is being sent2023-08-09T09:20:29ZHugo Svirakwebrtcbin: no offer is being sentOur usual flow as follows:
1. on-negotiation-needed is invoked
2. application invokes "create-offer"
3. application invokes "set-local-description" with offer
4. application sends offer to the other party via signalling server
However,...Our usual flow as follows:
1. on-negotiation-needed is invoked
2. application invokes "create-offer"
3. application invokes "set-local-description" with offer
4. application sends offer to the other party via signalling server
However, the local description is sometimes (randomly) already set and therefore on-negotiation-needed is not invoked and flow is not executed. How can local-description be already set when checking if negotiation is needed? The webrtcbin is sendonly.https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/2880x264: Missing ROI driven QP adjustment2023-08-03T19:31:21ZDhaval Sutariax264: Missing ROI driven QP adjustment### Describe your issue
For ROI based QP value, we are using "gst_buffer_add_video_region_of_interest_meta" and "gst_video_region_of_interest_meta_add_param" APIs.
But after calling this APIs, before x264enc we are not getting expected b...### Describe your issue
For ROI based QP value, we are using "gst_buffer_add_video_region_of_interest_meta" and "gst_video_region_of_interest_meta_add_param" APIs.
But after calling this APIs, before x264enc we are not getting expected behaviour.
#### Expected Behavior
Region selected should looks different than other region. Like if qp is high that ROI should look blur.
#### Observed Behavior
No different between ROI and non ROI area.
#### Setup
Linux 18.04https://gitlab.freedesktop.org/gstreamer/cerbero/-/issues/442documentation: MSYS2 Perl needs CPAN set up before usage2023-08-03T01:22:14Zamysparkdocumentation: MSYS2 Perl needs CPAN set up before usageHi,
A nit regarding the documentation of the Windows's MSYS2 bootstrap: CPAN needs to be run at least once prior to building recipes requiring Perl e.g. pango. Otherwise the following error happens, since the MSYS2 internal folders aren...Hi,
A nit regarding the documentation of the Windows's MSYS2 bootstrap: CPAN needs to be run at least once prior to building recipes requiring Perl e.g. pango. Otherwise the following error happens, since the MSYS2 internal folders aren't linked into PERL5LIB yet:
```
[155/155] "F:\cerbero\build\build-tools\bin\meson" "--internal" "exe" "--unpickle" "F:\cerbero\build\sources\msvc_x86_64\pango-1.50.11\_builddir\meson-private\meson_exe_perl_0ff55fac389bb67dc7db0e73fbfe93395a8aa9dc.dat"
FAILED: utils/pango-view.1
"F:\cerbero\build\build-tools\bin\meson" "--internal" "exe" "--unpickle" "F:\cerbero\build\sources\msvc_x86_64\pango-1.50.11\_builddir\meson-private\meson_exe_perl_0ff55fac389bb67dc7db0e73fbfe93395a8aa9dc.dat"
while executing ['perl', '-w', 'D:/msys64/usr/bin/help2man', '--no-info', '--section=1', '--help-option=--help-all', '--name="Pango text viewer"', '--output=utils/pango-view.1', 'F:/cerbero/build/sources/msvc_x86_64/pango-1.50.11/_builddir/utils/pango-view.exe']
--- stdout ---
--- stderr ---
Can't locate Locale/gettext.pm in @INC (you may need to install the Locale::gettext module) (@INC contains: /F/cerbero/build/dist/msvc_x86_64/lib/perl5:/F/cerbero/build/dist/msvc_x86_64/lib/perl5/site_perl/5.32 D:/msys64/ucrt64/lib/perl5/site_perl/5.32.1 D:/msys64/ucrt64/lib/perl5/site_perl/5.32.1 D:/msys64/ucrt64/lib/perl5/site_perl D:/msys64/ucrt64/lib/perl5/vendor_perl D:/msys64/ucrt64/lib/perl5/core_perl) at D:/msys64/usr/bin/help2man line 30.
BEGIN failed--compilation aborted at D:/msys64/usr/bin/help2man line 30.
```https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/2879Although source element is paused or source video data is blocked, sink eleme...2023-08-03T19:21:39Z永井知明Although source element is paused or source video data is blocked, sink element keeps rendering and writing data to a fileI wonder why the autovideosink element keeps displaying and filesink element keeps writing the last input frame even though source element is paused and the video data is not flowing.
When the source element is paused, I think that sink...I wonder why the autovideosink element keeps displaying and filesink element keeps writing the last input frame even though source element is paused and the video data is not flowing.
When the source element is paused, I think that sink element displaying or writing blank frame is correct behavior.
I tried to insert valve element which drops frame buffer between source element and sink element, but the result was the same.
An example source code which keeps displaying last input frame even though video source element is paused shown below.
For some additional context, this is running in a Windows 11 and Gstreamer version 1.22.4.
```c++
#include <gst/gst.h>
#include <cstdio>
enum class STATE
{
WAITING,
RECORDING,
PAUSING,
};
typedef struct _CustomData
{
GstElement* pipeline;
GstElement* src;
GstElement* rendersink;
GMainLoop* loop;
STATE state;
} CustomData;
static gboolean handle_keyboard(GIOChannel* source, GIOCondition cond, CustomData* data)
{
gchar* str = NULL;
GstBus* bus = NULL;
GstMessage* msg = NULL;
if (g_io_channel_read_line(source, &str, NULL, NULL,NULL) != G_IO_STATUS_NORMAL) {
return TRUE;
}
switch (g_ascii_tolower(str[0])) {
case 'p':
if (data->state == STATE::RECORDING)
{
g_print("Setting state to %s\n", "PAUSE");
data->state = STATE::PAUSING;
gst_element_set_state(data->src, GST_STATE_PAUSED);
}
else if (data->state == STATE::PAUSING)
{
g_print("Setting state to %s\n", "PLAYING");
data->state = STATE::RECORDING;
gst_element_set_state(data->src, GST_STATE_PLAYING);
}
break;
case 'q':
g_print("Finish\n");
g_main_loop_quit(data->loop);
break;
default:
break;
}
g_free(str);
return TRUE;
}
int main(int argc, char* argv[])
{
CustomData data;
GstStateChangeReturn ret;
gst_init(&argc, &argv);
data.pipeline = gst_pipeline_new("pipeline");
data.src = gst_element_factory_make("dshowvideosrc", "src");
data.rendersink = gst_element_factory_make("autovideosink", "autovideosink");
if (!data.pipeline || !data.src || !data.rendersink)
{
g_printerr("Failed to create elements\n");
return -1;
}
gst_bin_add_many(GST_BIN(data.pipeline), data.src, data.rendersink, NULL);
g_object_set(G_OBJECT(data.src), "device-index", 0, "do-timestamp", true, NULL);
if (!gst_element_link_filtered(data.src, data.rendersink, gst_caps_new_simple("video/x-raw",
"width", G_TYPE_INT, 1920,
"height", G_TYPE_INT, 1080,
"framerate", GST_TYPE_FRACTION, 30, 1,
NULL))) {
g_printerr("Failed to link src1 and comp\n");
gst_object_unref(data.pipeline);
return -1;
}
g_print("USAGE: Choose one of the following options, then press enter:\n"
" 'P' to toggle between PAUSE and PLAY\n"
" 'Q' to quit\n");
GIOChannel* io_stdin = g_io_channel_unix_new(_fileno(stdin));
g_io_add_watch(io_stdin, G_IO_IN, (GIOFunc)handle_keyboard, &data);
ret = gst_element_set_state(data.pipeline, GST_STATE_PLAYING);
data.state = STATE::RECORDING;
data.loop = g_main_loop_new(NULL, FALSE);
g_main_loop_run(data.loop);
gst_element_set_state(data.pipeline, GST_STATE_NULL);
gst_object_unref(data.pipeline);
return 0;
}
```https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/2878queue: leaky feature request2023-08-02T20:52:27ZMaurizio Buratoqueue: leaky feature requestCurrently queue has 3 leaky modes but it seems that none of them solve my problem
Here is an example:
we have a queue between a source and an encoder
queue is set to max-size-bytes=128000 (other max limits to 0)
the source sends 1024 by...Currently queue has 3 leaky modes but it seems that none of them solve my problem
Here is an example:
we have a queue between a source and an encoder
queue is set to max-size-bytes=128000 (other max limits to 0)
the source sends 1024 bytes for each buffer
if the source send data a little too fast than the encoder speed the queue buffer will reach max-size-bytes
now i would like that source buffers are discarded until the queue size is back to 0 (Zero) because i need to have an empty queue again like at pipeline start.
none of the leaky mode allows this.
leaky=1 or leaky=2 only discard 1024 bytes until there is again space for 1024 bytes inside the queue, they don't wait for the queue to be empty
would it be possible to create a leaky=3 that behave like this? (discard until queue is empty)
i'm a commandline user so no programmatically solutions are good for mehttps://gitlab.freedesktop.org/gstreamer/cerbero/-/issues/441Cannot find dll.a for plugins2023-08-26T22:22:01Zdayo7116Cannot find dll.a for pluginsI am using 1.22.5 runtime/development installer. ![image](/uploads/00b108d6c2a352f4db2283287d304ab8/image.png)
I want to link gstreamer staticly, I found core static libs(such as libgstreamer-1.0.dll.a), but cannot find plugin static li...I am using 1.22.5 runtime/development installer. ![image](/uploads/00b108d6c2a352f4db2283287d304ab8/image.png)
I want to link gstreamer staticly, I found core static libs(such as libgstreamer-1.0.dll.a), but cannot find plugin static libs for windows(such as libgstwasapi2.dll.a).
Does gstreamer CI support static libs for plugins? Or do I need to compile static plugins myself?
Thanks!https://gitlab.freedesktop.org/gstreamer/cerbero/-/issues/440Cannot find dll.a for plugins2023-08-02T10:16:35Zdayo7116Cannot find dll.a for pluginshttps://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/issues/395video/gtk: not compatible with gtk4-rs 0.72023-08-08T08:48:25ZJan Lukas Gernertvideo/gtk: not compatible with gtk4-rs 0.7```
error: failed to select a version for `gtk4-sys`.
... required by package `gtk4 v0.6.0`
... which satisfies dependency `gtk = "^0.6"` of package `gst-plugin-gtk4 v0.10.0`
versions that meet the requirements `^0.6` are: 0.6.3,...```
error: failed to select a version for `gtk4-sys`.
... required by package `gtk4 v0.6.0`
... which satisfies dependency `gtk = "^0.6"` of package `gst-plugin-gtk4 v0.10.0`
versions that meet the requirements `^0.6` are: 0.6.3, 0.6.2, 0.6.0
the package `gtk4-sys` links to the native library `gtk-4`, but it conflicts with a previous package which links to `gtk-4` as well:
package `gtk4-sys v0.7.0`
... which satisfies dependency `ffi = "^0.7"` of package `gtk4 v0.7.1`
... which satisfies dependency `gtk = "^0.7"` of package `libadwaita v0.5.2`
```https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/issues/1024Although source element is paused or source video data is blocked, sink eleme...2023-08-03T06:42:12Z永井知明Although source element is paused or source video data is blocked, sink element keeps rendering and writing data to a file.I wonder why the autovideosink element keeps displaying and filesink element keeps writing the last input frame even though source element is paused and the video data is not flowing.
When the source element is paused, I think that sink...I wonder why the autovideosink element keeps displaying and filesink element keeps writing the last input frame even though source element is paused and the video data is not flowing.
When the source element is paused, I think that sink element displaying or writing blank frame is correct behavior.
I tried to insert valve element which drops frame buffer between source element and sink element, but the result was the same.
An example source code which keeps displaying last input frame even though video source element is paused shown below.
For some additional context, this is running in a Windows 11 and Gstreamer version 1.22.4.
```
#include <gst/gst.h>
#include <cstdio>
enum class STATE
{
WAITING,
RECORDING,
PAUSING,
};
typedef struct _CustomData
{
GstElement* pipeline;
GstElement* src;
GstElement* rendersink;
GMainLoop* loop;
STATE state;
} CustomData;
static gboolean handle_keyboard(GIOChannel* source, GIOCondition cond, CustomData* data)
{
gchar* str = NULL;
GstBus* bus = NULL;
GstMessage* msg = NULL;
if (g_io_channel_read_line(source, &str, NULL, NULL,NULL) != G_IO_STATUS_NORMAL) {
return TRUE;
}
switch (g_ascii_tolower(str[0])) {
case 'p':
if (data->state == STATE::RECORDING)
{
g_print("Setting state to %s\n", "PAUSE");
data->state = STATE::PAUSING;
gst_element_set_state(data->src, GST_STATE_PAUSED);
}
else if (data->state == STATE::PAUSING)
{
g_print("Setting state to %s\n", "PLAYING");
data->state = STATE::RECORDING;
gst_element_set_state(data->src, GST_STATE_PLAYING);
}
break;
case 'q':
g_print("Finish\n");
g_main_loop_quit(data->loop);
break;
default:
break;
}
g_free(str);
return TRUE;
}
int main(int argc, char* argv[])
{
CustomData data;
GstStateChangeReturn ret;
gst_init(&argc, &argv);
data.pipeline = gst_pipeline_new("pipeline");
data.src = gst_element_factory_make("dshowvideosrc", "src");
data.rendersink = gst_element_factory_make("autovideosink", "autovideosink");
if (!data.pipeline || !data.src || !data.rendersink)
{
g_printerr("Failed to create elements\n");
return -1;
}
gst_bin_add_many(GST_BIN(data.pipeline), data.src, data.rendersink, NULL);
g_object_set(G_OBJECT(data.src), "device-index", 0, "do-timestamp", true, NULL);
if (!gst_element_link_filtered(data.src, data.rendersink, gst_caps_new_simple("video/x-raw",
"width", G_TYPE_INT, 1920,
"height", G_TYPE_INT, 1080,
"framerate", GST_TYPE_FRACTION, 30, 1,
NULL))) {
g_printerr("Failed to link src1 and comp\n");
gst_object_unref(data.pipeline);
return -1;
}
g_print("USAGE: Choose one of the following options, then press enter:\n"
" 'P' to toggle between PAUSE and PLAY\n"
" 'Q' to quit\n");
GIOChannel* io_stdin = g_io_channel_unix_new(_fileno(stdin));
g_io_add_watch(io_stdin, G_IO_IN, (GIOFunc)handle_keyboard, &data);
ret = gst_element_set_state(data.pipeline, GST_STATE_PLAYING);
data.state = STATE::RECORDING;
data.loop = g_main_loop_new(NULL, FALSE);
g_main_loop_run(data.loop);
gst_element_set_state(data.pipeline, GST_STATE_NULL);
gst_object_unref(data.pipeline);
return 0;
}
```https://gitlab.freedesktop.org/gstreamer/meson-ports/ffmpeg/-/issues/37avfilter build issues with ffmpeg 6.02023-08-08T21:43:13ZJonas Kvingeavfilter build issues with ffmpeg 6.0I'm getting the following error when trying to build from the meson-6.0 branch in GitHub actions with Windows 2022 and Visual Studio 2022
C compiler for the host machine: cl (msvc 19.36.32537 "Microsoft (R) C/C++ Optimizing Compiler Vers...I'm getting the following error when trying to build from the meson-6.0 branch in GitHub actions with Windows 2022 and Visual Studio 2022
C compiler for the host machine: cl (msvc 19.36.32537 "Microsoft (R) C/C++ Optimizing Compiler Version 19.36.32537 for x64")
C linker for the host machine: link link 14.36.32537.0
```
FAILED: libavfilter-static.a.p/libavfilter_vf_mcdeint.c.obj
"cl" "-Ilibavfilter-static.a.p" "-I." "-I.." "-I..\compat\atomics\win32" "/MD" "/nologo" "/showIncludes" "/utf-8" "/W2" "/O2" "/Zi" "/wo4005" "/wd4018" "/wd4146" "/wd4244" "/wd4305" "/wd4554" "/wd4114" "/wd4028" "/wd4090" "/wd4133" "/utf-8" "-D_ISOC99_SOURCE" "-D_GNU_SOURCE" "-D_LARGEFILE_SOURCE" "-DPIC" "-D_USE_MATH_DEFINES" "-D_CRT_SECURE_NO_WARNINGS" "-D_CRT_NONSTDC_NO_WARNINGS" "-D_WIN32_WINNT=0x0600" "-DHAVE_AV_CONFIG_H" "-DBUILDING_avfilter" "/Fdlibavfilter-static.a.p\libavfilter_vf_mcdeint.c.pdb" /Folibavfilter-static.a.p/libavfilter_vf_mcdeint.c.obj "/c" ../libavfilter/vf_mcdeint.c
../libavfilter/vf_mcdeint.c(185): error C2039: 'coded_frame': is not a member of 'AVCodecContext'
D:\a\strawberry-msvc-dependencies\strawberry-msvc-dependencies\sources\ffmpeg\libavcodec/avcodec.h(426): note: see declaration of 'AVCodecContext'
[2074/2263] Compiling C object libavfilter-static.a.p/libavfilter_af_mcompand.c.obj
[2075/2263] Compiling C object libavfilter-static.a.p/libavfilter_vf_median.c.obj
```
Full error: https://github.com/strawberrymusicplayer/strawberry-msvc-dependencies/actions/runs/5729015819/job/15524855218?pr=202
ffmpeg built here:
https://github.com/strawberrymusicplayer/strawberry-msvc-dependencies/blob/8577c77676ac3cf9ca5389058a3ffc48d2898636/.github/workflows/build.yml#L1914
I'm getting the following error when building on Windows 10 with Visual Studio 2022
C compiler for the host machine: cl (msvc 19.36.32537 "Microsoft (R) C/C++ Optimizing Compiler Version 19.36.32537 for x64")
C linker for the host machine: link link 14.36.32537.0
Basically the same Visual Studio version as in GitHub actions, but a different error. If I pass -Davfilter=disabled I'm getting the same error as in Github Actions.
```
[1761/2263] Generating 'libavfilter-static.a.p\\vf_nlmeans.asm.o'.
FAILED: libavfilter-static.a.p/vf_nlmeans.asm.o
"C:\Program Files\NASM\nasm.EXE" "-DPIC" "-g" "-f" "win64" "-i" "C:/Data/Projects/strawberry/msvc_/build_debug/ffmpeg/" "-i" "C:/Data/Projects/strawberry/msvc_/build_debug/ffmpeg/build/" "-i" "C:/Data/Projects/strawberry/msvc_/build_debug/ffmpeg/libavfilter/x86/" "-P" "C:/Data/Projects/strawberry/msvc_/build_debug/ffmpeg/build/config.asm" "../libavfilter/x86/vf_nlmeans.asm" "-o" "libavfilter-static.a.p/vf_nlmeans.asm.o"
panic: ../libavfilter/x86/vf_nlmeans.asm: assertion cv8_state.source_files != NULL failed at output/codeview.c:512
[1770/2263] Generating 'libavfilter-static.a.p\\colorspacedsp.asm.o'.
ninja: build stopped: subcommand failed.
```
No issues with the meson-4.4.4 branch.amysparkamysparkhttps://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/2877pluginloader: Generates invalid path to gst-plugin-scanner2024-03-12T16:59:20ZPhilippe Normandpluginloader: Generates invalid path to gst-plugin-scanner```
0:00:00.001820402 780747 0xab7130 LOG GST_PLUGIN_LOADING gstpluginloader.c:565:gst_plugin_loader_spawn: Trying installed plugin scanner
0:00:00.001858012 7...```
0:00:00.001820402 780747 0xab7130 LOG GST_PLUGIN_LOADING gstpluginloader.c:565:gst_plugin_loader_spawn: Trying installed plugin scanner
0:00:00.001858012 780747 0xab7130 DEBUG GST_PLUGIN_LOADING gstpluginloader.c:579:gst_plugin_loader_spawn: found libgstreamer-1.0 library at /lib64
0:00:00.001870889 780747 0xab7130 DEBUG GST_PLUGIN_LOADING gstpluginloader.c:595:gst_plugin_loader_spawn: constructing path to system plugin scanner using plugin dir: 'lib64', plugin scanner dir: 'libexec'
0:00:00.001882588 780747 0xab7130 DEBUG GST_PLUGIN_LOADING gstpluginloader.c:609:gst_plugin_loader_spawn: using system plugin scanner at /lib64/../libexec/gstreamer-1.0/gst-plugin-scanner
0:00:00.001892724 780747 0xab7130 LOG GST_PLUGIN_LOADING gstpluginloader.c:433:gst_plugin_loader_try_helper: Trying to spawn gst-plugin-scanner helper at /lib64/../libexec/gstreamer-1.0/gst-plugin-scanner
0:00:00.005849675 780747 0xab7130 ERROR GST_PLUGIN_LOADING gstpluginloader.c:442:gst_plugin_loader_try_helper: Spawning gst-plugin-scanner helper failed: Failed to execute child process “/lib64/../libexec/gstreamer-1.0/gst-plugin-scanner” (No such file or directory)
0:00:00.005865887 780747 0xab7130 INFO GST_PLUGIN_LOADING gstpluginloader.c:617:gst_plugin_loader_spawn: No gst-plugin-scanner available, or not working
(WPEWebProcess:780747): GStreamer-WARNING **: 16:13:57.144: External plugin loader failed. This most likely means that the plugin loader helper binary was not found or could not be run. You might need to set the GST_PLUGIN_SCANNER environment variable if your setup is unusual. This should normally not be required though.
```https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/2876wasapi2sink: No volume sync from system volume2023-08-01T14:38:46ZJonas Kvingewasapi2sink: No volume sync from system volumeWhen setting volume on wasapi2sink, it syncs to the system volume, but when connecting notify::volume, no event is received when the system volume is changed.When setting volume on wasapi2sink, it syncs to the system volume, but when connecting notify::volume, no event is received when the system volume is changed.https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/issues/1781wasapi2sink: No volume sync from system volume2023-08-01T14:38:46ZJonas Kvingewasapi2sink: No volume sync from system volumeWhen setting volume on wasapi2sink, it syncs to the system volume, but when connecting notify::volume, no event is received when the system volume is changed.When setting volume on wasapi2sink, it syncs to the system volume, but when connecting notify::volume, no event is received when the system volume is changed.https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/issues/1023gstv4l2bufferpool: Problems when checking for truncated buffer2023-08-01T10:19:41ZMatthias Fendgstv4l2bufferpool: Problems when checking for truncated bufferWhile writing a v4l2 capture driver for a special hardware capture IP block, I ran into a problem with gstreamer when using the data_offset field of the multiplanar API.
The IP core uses a special mechanism to transfer frames in hardware...While writing a v4l2 capture driver for a special hardware capture IP block, I ran into a problem with gstreamer when using the data_offset field of the multiplanar API.
The IP core uses a special mechanism to transfer frames in hardware to a specific physical address.
For certain hardware reasons, the frame starts with some kind of header data that is written to the destination memory, but must be ignored for further processing.
To describe such a scenario, the data_offset field of v4l2_plane can be used. The driver implements the multiplanar capture API and dmabuf memory buffers.
But whhen I want to test the driver with gstreamer, the requested buffers are all discarded with this message:
v4l2bufferpool gstv4l2bufferpool.c:2163:gst_v4l2_buffer_pool_process:<v4l2src0:pool0:src> Dropping truncated buffer, this is likely a driver bug
If I use a data_offset of zero, everything works fine.
If I omit the reported check, everything works as expected as well. Even the data_offset seems to be handled correctly.
Since I actually expected a driver error, I tried the same setup with vivid and found that it is the same here.
As the vivid driver uses a data_offset of 128 bytes when the YUYV format is selected, this module can be used to reproduce this behavior.
```
export GST_DEBUG=*v4l2*:4
modprobe vivid num_inputs=1 multiplanar=2
gst-launch-1.0 -v v4l2src device=/dev/videoN io-mode=4 ! video/x-raw,format=YUY2,width=320,height=180 ! fakesink
```
So if I didn't misunderstand anything, the check should also consider the data_offset.
Tested with version 1.22.4.https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/2874Consider converting GValue with nullptr GValueArray to an empty string2023-08-01T00:30:22ZSlava AndrejevConsider converting GValue with nullptr GValueArray to an empty string### Describe your issue
If you call `get_defs` from Glibmm's `libglibmm_generate_extra_defs-2.68.so` on `GstAudioInterleave`, `get_defs` raises a segmentation fault.
#### Expected Behavior
No segmentation fault.
#### Observed Behavior...### Describe your issue
If you call `get_defs` from Glibmm's `libglibmm_generate_extra_defs-2.68.so` on `GstAudioInterleave`, `get_defs` raises a segmentation fault.
#### Expected Behavior
No segmentation fault.
#### Observed Behavior
Segmentation fault.
Here is what is going on. The segmentation fault happens when Glibmm tries to extract the default value for the `channel-positions` property of `GstAudioInterleave`. It calls `g_param_spec_get_default_value` to extract the default value from the `channel-positions` property specification. Then it passes this default value to `g_value_transform` with the second argument of type `G_TYPE_STRING`. Everything looks legitimate at this point. Yet, the code explodes on a null pointer dereference. It happens because `g_value_transform` ends up in the GStreamer code here:
```c
static void
_gst_value_transform_g_value_array_string (const GValue * src_value,
GValue * dest_value, const gchar * begin, const gchar * end)
{
GValue *list_value;
GValueArray *array;
GString *s;
guint i;
gchar *list_s;
guint alen;
array = src_value->data[0].v_pointer;
alen = array->n_values;
```
The last line above dereferences a null pointer. It happens because `channel-positions` has an array type. A default value for it is set by a call to `boxed_proxy_value_init`, which initializes `data[0].v_pointer` with NULL.
Since a null pointer is a valid initial value for an array, I believe the right thing to do is to check if the array is NULL inside `_gst_value_transform_g_value_array_string` and return an empty string.https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/2873ci: Enable gst-plugins-rs documentation2023-09-20T17:19:08ZNicolas Dufresneci: Enable gst-plugins-rs documentationCurrently the cargo wrapper script depends on Python 3.8, but we have 3.7 in the old fedora we use in our image, and glib version 2.66 is required, but we currently build 2.62.
For the 3.8 deps, we can workaround with a quick shlex_join...Currently the cargo wrapper script depends on Python 3.8, but we have 3.7 in the old fedora we use in our image, and glib version 2.66 is required, but we currently build 2.62.
For the 3.8 deps, we can workaround with a quick shlex_join() function (excuse my style, I'm rusty in python):
```python
def shlex_join(args):
ret = ''
for a in args:
ret += ' ' + shlex.quote(a)
return ret
```
For Glib, I haven't checked by we let plugins-rs be out of sync, and why we didn't sync all our subproject here. But to update, we can build manually, or update our fedora image, which is covered by https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1060https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/2872dash: seeking sometimes doesn't work2023-07-31T09:20:49ZAngelo Verlain Shemadash: seeking sometimes doesn't work### Describe your issue
<!-- a clear and concise summary of the bug. -->
<!-- For any GStreamer usage question, please contact the community using the #gstreamer channel on IRC https://www.oftc.net/ or the mailing list on https://gstream...### Describe your issue
<!-- a clear and concise summary of the bug. -->
<!-- For any GStreamer usage question, please contact the community using the #gstreamer channel on IRC https://www.oftc.net/ or the mailing list on https://gstreamer.freedesktop.org/lists/ -->
When using MPEG-DASH, sometimes seeking doesn't work
#### Expected Behavior
<!-- What did you expect to happen -->
Expect seeking to work correctly
#### Observed Behavior
<!-- What actually happened -->
Seeking fails, (sometimes) a message "Could not seek." is logged. And the video restarts
#### Setup
- **Operating System:** arch rolling
- **Device:** Computer
- **GStreamer Version:** GStreamer 1.22.5
- **Command line:** gst-play-1.https://dash.akamaized.net/akamai/test/caption_test/ElephantsDream/elephants_dream_480p_heaac5_1.mpd
### 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-play-1.https://dash.akamaized.net/akamai/test/caption_test/ElephantsDream/elephants_dream_480p_heaac5_1.mpd`
### How reproducible is the bug?
<!-- The reproducibility of the bug is Always/Intermittent/Only once after doing a very specific set of steps-->
It fails to seek everytime.
### Additional Information
<!-- Any other information such as logs. Make use of <details> for long output -->
Here is a [test page of DASH functionality](https://reference.dashif.org/dash.js/v3.1.3/samples/dash-if-reference-player/index.html), where the original/test URL is from. To get the URL. Click **Stream -> Subtitles and Captions -> [DASH-IF] External VTT file**https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/2871getting compilation error in macOS2023-07-31T07:56:46ZJaiv Shahgetting compilation error in macOSI am on Mac OS Ventura, I have tried to install with brew install gstreamer (along with gst-plugins-common,gst-plugins-good). I then try to compile the first example at https://gstreamer.freedesktop.org/documentation/tutorials/basic/hell...I am on Mac OS Ventura, I have tried to install with brew install gstreamer (along with gst-plugins-common,gst-plugins-good). I then try to compile the first example at https://gstreamer.freedesktop.org/documentation/tutorials/basic/hello-world.html?gi-language=c
and I am getting compilation error:
#include <gst/gst.h>
^~~~~~~~~~~
1 error generated.
I tiered uninstalling gstreamer and re-installed using the .pkg files but I am still getting same issueshttps://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/2870wasapi2sink: Choppy / stuttering audio2024-02-24T12:48:20ZJonas Kvingewasapi2sink: Choppy / stuttering audioA lot of users are reporting choppy / stuttering audio with wasapi2sink, while there are no issues using directsoundsink and wasapisink with the same pipeline (https://github.com/strawberrymusicplayer/strawberry/issues/1227). I'm unable ...A lot of users are reporting choppy / stuttering audio with wasapi2sink, while there are no issues using directsoundsink and wasapisink with the same pipeline (https://github.com/strawberrymusicplayer/strawberry/issues/1227). I'm unable to reproduce this myself.
When Auto is selected, wasapi2sink is picked first because it is ranked as primary. Even though directsoundsink is part of good it is ranked as secondary, and wasapisink and wasapi2sink, part of bad is ranked primary, both having issues.https://gitlab.freedesktop.org/gstreamer/gst-rtsp-server/-/issues/177Retrieve path string in mounts through GstRTSPClient2023-08-08T08:53:45ZTianyi LuRetrieve path string in mounts through GstRTSPClientHi, I am playing with `Gstreamer-rtsp-server`. Currently, I am using `gst_rtsp_mount_points_remove_factory()` to remove the factory with associated path in mount if the one of the client is closing (I know it sounds whacky, but ultimatel...Hi, I am playing with `Gstreamer-rtsp-server`. Currently, I am using `gst_rtsp_mount_points_remove_factory()` to remove the factory with associated path in mount if the one of the client is closing (I know it sounds whacky, but ultimately, I will detect if the current closing client is the last one). To achieve that, I connect the `GstRTSPClient::close` signal and implement a callback like this,
```
static void testClientClosed(GstRTSPClient* client, gpointer userdata)
{
GstRTSPMountPoints* mounts = gst_rtsp_client_get_mount_points(client);
gchar* matchedPath = NULL;
for (auto path : mountPaths)
{
GstRTSPMediaFactory* factory = gst_rtsp_mount_points_match(mounts, path, NULL);
if (factory)
{
matchedPath = path;
break;
}
}
....
gst_rtsp_mount_points_remove_factory(mounts, matchedPath);
....
}
```
My question is, is there any methods to retrieve the client mount path instead of doing the iteration? Thanks in advance.