GStreamer issueshttps://gitlab.freedesktop.org/groups/gstreamer/-/issues2019-01-30T16:43:05Zhttps://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/issues/881d3dhelpers.c: fix typo in debug output2019-01-30T16:43:05ZAaron Boxerd3dhelpers.c: fix typo in debug output` "D3D Device has been lost. Cleanup up resources..");` Change to `Clean up`` "D3D Device has been lost. Cleanup up resources..");` Change to `Clean up`https://gitlab.freedesktop.org/gstreamer/gst-editing-services/-/issues/35Segfault when adding clip to group2019-01-31T00:00:00ZBugzilla Migration UserSegfault when adding clip to group## Submitted by Alexandru Balut `@aleb`
**[Link to original bug (#793882)](https://bugzilla.gnome.org/show_bug.cgi?id=793882)**
## Description
Run the script below, notice the segfault:
```
from gi.repository import Gst
Gst...## Submitted by Alexandru Balut `@aleb`
**[Link to original bug (#793882)](https://bugzilla.gnome.org/show_bug.cgi?id=793882)**
## Description
Run the script below, notice the segfault:
```
from gi.repository import Gst
Gst.init(None)
from gi.repository import GES
GES.init()
group = GES.Group()
clip = GES.TitleClip()
group.add(clip)
```
.. because the clip has not been added to a layer.
It should not segfault.https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/issues/557rtph264depay: Badly frame streams coming from Safari 12 (due to marker bit)2019-01-31T19:46:48ZNicolas Dufresnertph264depay: Badly frame streams coming from Safari 12 (due to marker bit)Creating issue base on mailing list message (quoted below). There seems to be issues with rtph264depay handling streams coming from Safari 12. I have managed to reproduce this issue, and found out that the problem is around the interpret...Creating issue base on mailing list message (quoted below). There seems to be issues with rtph264depay handling streams coming from Safari 12. I have managed to reproduce this issue, and found out that the problem is around the interpretation of the marker. I still need to figure-out if the marker are miss-placed by Safari or if it's rtph264depay interpreting them wrong. This is not a regression as it was already causing issues in 1.14. Ignoring the marker in the code makes this stream decode properly.
> Safari 12 now encodes WebRTC video using the H264 high profile which is causing the frames in my pipeline to get corrupted (it works fine with videos from Safari 11 which uses the baseline profile).
>
> Here is my Gstreamer pipeline:
>
> gst-launch-1.0 -v udpsrc port=55002 ! application/x-rtp,clock-rate=90000,payload=96 ! rtpjitterbuffer mode=0 ! rtph264depay ! h264parse ! avdec_h264 ! videoconvert ! pngenc ! multifilesink location=frame%03d.png
>
> However, if I use FFmpeg like this, the frames get saved fine:
>
> ffmpeg -r 30 -an -protocol_whitelist file,udp,rtp -i video.sdp frame%3d.png
>
> Here is the SDP:
>
> v=0
> o=- 0 0 IN IP4 127.0.0.1
> s=iProov HTML5 Client
> c=IN IP4 127.0.0.1
> t=0 0
> m=video 55002 RTP/AVP 96
> a=rtpmap:96 H264/90000
> a=fmtp:96 packetization-mode=1
>
> I have saved a copy of the RTP stream using rtpdump:
>
> https://www.cs.columbia.edu/irt/software/rtptools/
>
> This allows the stream to be replayed with rtpplay:
>
> rtpplay -v -T -f video.rtp localhost/55002
>
> And here is the rtp dump file I am using:
>
> https://drive.google.com/file/d/1j3yrYP00RxHTWobD450Ar3fzO8ZIQuas/view?usp=sharing
>
> Restreaming this file in this way to FFmpeg works great but to Gstreamer produces corrupted frames with the above commands.
>
> If I turn up the RTP log level, I see many "illegal short term buffer state detected" errors like this:
>
> 0:00:07.425906669 31333 0x27669e0 DEBUG rtpjitterbuffer gstrtpjitterbuffer.c:3055:gst_rtp_jitter_buffer_chain:<rtpjitterbuffer0> expected #70, got #70, gap of 0
> 0:00:07.425939062 31333 0x27669e0 DEBUG rtpjitterbuffer gstrtpjitterbuffer.c:3084:gst_rtp_jitter_buffer_chain:<rtpjitterbuffer0> Clearing gap packets
> 0:00:07.425968309 31333 0x27669e0 DEBUG rtpjitterbuffer gstrtpjitterbuffer.c:3230:gst_rtp_jitter_buffer_chain:<rtpjitterbuffer0> Pushed packet #70, now 10 packets, head: 0, percent -1
> 0:00:07.430274718 31333 0x27669e0 DEBUG rtpjitterbuffer gstrtpjitterbuffer.c:2957:gst_rtp_jitter_buffer_chain:<rtpjitterbuffer0> Received packet #71 at time 0:00:07.370746462, discont 0, rtx 0
> 0:00:07.430316978 31333 0x27669e0 LOG rtpjitterbuffer gstrtpjitterbuffer.c:2662:calculate_jitter:<rtpjitterbuffer0> dtsdiff 0:00:00.004545914 rtptime 0:00:00.054000000, clock-rate 90000, diff 0:00:00.049454086, jitter: 0:00:00.050701297
> 0:00:07.430336648 31333 0x27669e0 DEBUG rtpjitterbuffer gstrtpjitterbuffer.c:3055:gst_rtp_jitter_buffer_chain:<rtpjitterbuffer0> expected #71, got #71, gap of 0
> 0:00:07.430347687 31333 0x27669e0 DEBUG rtpjitterbuffer gstrtpjitterbuffer.c:3084:gst_rtp_jitter_buffer_chain:<rtpjitterbuffer0> Clearing gap packets
> 0:00:07.430368877 31333 0x27669e0 DEBUG rtpjitterbuffer rtpjitterbuffer.c:785:rtp_jitter_buffer_calculate_pts: extrtp 306540, gstrtp 0:00:03.406000000, base 0:00:02.651000000, send_diff 0:00:00.755000000
> 0:00:07.430388707 31333 0x27669e0 DEBUG rtpjitterbuffer rtpjitterbuffer.c:563:calculate_skew: time 0:00:07.370746462, base 0:00:07.248430817, recv_diff 0:00:00.122315645, slope 49
> 0:00:07.430401151 31333 0x27669e0 DEBUG rtpjitterbuffer rtpjitterbuffer.c:580:calculate_skew: filling 2, delta -632684355
> 0:00:07.430415334 31333 0x27669e0 DEBUG rtpjitterbuffer rtpjitterbuffer.c:664:calculate_skew: skew -195415049, out 0:00:07.808015768
> 0:00:07.430424474 31333 0x27669e0 DEBUG rtpjitterbuffer rtpjitterbuffer.c:916:rtp_jitter_buffer_calculate_pts: backwards timestamps, using previous time
> 0:00:07.430451918 31333 0x27669e0 DEBUG rtpjitterbuffer gstrtpjitterbuffer.c:3230:gst_rtp_jitter_buffer_chain:<rtpjitterbuffer0> Pushed packet #71, now 11 packets, head: 0, percent -1
> 0:00:07.464803911 31333 0x26d80a0 DEBUG rtpjitterbuffer gstrtpjitterbuffer.c:3517:pop_and_push_next:<rtpjitterbuffer0> Pushing buffer 61, dts 0:00:07.248430817, pts 0:00:07.248430817
> 0:00:07.464827595 31333 0x26d80a0 LOG rtpbasedepayload gstrtpbasedepayload.c:359:gst_rtp_base_depayload_handle_buffer:<rtph264depay0> discont 0, seqnum 61, rtptime 238590, pts 0:00:07.248430817, dts 0:00:07.248430817
> 0:00:07.464837300 31333 0x26d80a0 DEBUG rtph264depay gstrtph264depay.c:1026:gst_rtp_h264_depay_process:<rtph264depay0> receiving 811 bytes
> 0:00:07.464843846 31333 0x26d80a0 DEBUG rtph264depay gstrtph264depay.c:1046:gst_rtp_h264_depay_process:<rtph264depay0> NRI 1, Type 24
> 0:00:07.464853441 31333 0x26d80a0 DEBUG rtph264depay gstrtph264depay.c:844:gst_rtp_h264_depay_handle_nal:<rtph264depay0> handle NAL type 1
> 0:00:07.464859635 31333 0x26d80a0 DEBUG rtph264depay gstrtph264depay.c:904:gst_rtp_h264_depay_handle_nal:<rtph264depay0> start 1, complete 1
> 0:00:07.464864758 31333 0x26d80a0 DEBUG rtph264depay gstrtph264depay.c:913:gst_rtp_h264_depay_handle_nal:<rtph264depay0> adding NAL to picture adapter
> 0:00:07.464873130 31333 0x26d80a0 DEBUG rtph264depay gstrtph264depay.c:844:gst_rtp_h264_depay_handle_nal:<rtph264depay0> handle NAL type 1
> 0:00:07.464878908 31333 0x26d80a0 DEBUG rtph264depay gstrtph264depay.c:904:gst_rtp_h264_depay_handle_nal:<rtph264depay0> start 1, complete 0
> 0:00:07.464884010 31333 0x26d80a0 DEBUG rtph264depay gstrtph264depay.c:913:gst_rtp_h264_depay_handle_nal:<rtph264depay0> adding NAL to picture adapter
> 0:00:07.464895585 31333 0x26d80a0 DEBUG rtpjitterbuffer gstrtpjitterbuffer.c:3517:pop_and_push_next:<rtpjitterbuffer0> Pushing buffer 62, dts 0:00:07.248753067, pts 0:00:07.248430817
> 0:00:07.464906056 31333 0x26d80a0 LOG rtpbasedepayload gstrtpbasedepayload.c:359:gst_rtp_base_depayload_handle_buffer:<rtph264depay0> discont 0, seqnum 62, rtptime 238590, pts 0:00:07.248430817, dts 0:00:07.248753067
> 0:00:07.464912715 31333 0x26d80a0 DEBUG rtph264depay gstrtph264depay.c:1026:gst_rtp_h264_depay_process:<rtph264depay0> receiving 1058 bytes
> 0:00:07.464918633 31333 0x26d80a0 DEBUG rtph264depay gstrtph264depay.c:1046:gst_rtp_h264_depay_process:<rtph264depay0> NRI 1, Type 24
> 0:00:07.464925747 31333 0x26d80a0 DEBUG rtph264depay gstrtph264depay.c:844:gst_rtp_h264_depay_handle_nal:<rtph264depay0> handle NAL type 1
> 0:00:07.464930885 31333 0x26d80a0 DEBUG rtph264depay gstrtph264depay.c:913:gst_rtp_h264_depay_handle_nal:<rtph264depay0> adding NAL to picture adapter
> 0:00:07.464936129 31333 0x26d80a0 DEBUG rtph264depay gstrtph264depay.c:778:gst_rtp_h264_complete_au:<rtph264depay0> taking completed AU
> 0:00:07.464941830 31333 0x26d80a0 LOG rtph264depay gstrtph264depay.c:756:gst_rtp_h264_depay_allocate_output_buffer:<rtph264depay0> want output buffer of 1458 bytes
> 0:00:07.466015023 31333 0x26d80a0 DEBUG rtph264depay gstrtph264depay.c:844:gst_rtp_h264_depay_handle_nal:<rtph264depay0> handle NAL type 1
> 0:00:07.466031013 31333 0x26d80a0 DEBUG rtph264depay gstrtph264depay.c:913:gst_rtp_h264_depay_handle_nal:<rtph264depay0> adding NAL to picture adapter
> 0:00:07.466037063 31333 0x26d80a0 DEBUG rtph264depay gstrtph264depay.c:778:gst_rtp_h264_complete_au:<rtph264depay0> taking completed AU
> 0:00:07.466043230 31333 0x26d80a0 LOG rtph264depay gstrtph264depay.c:756:gst_rtp_h264_depay_allocate_output_buffer:<rtph264depay0> want output buffer of 417 bytes
> 0:00:07.466361384 31333 0x26d80a0 ERROR libav :0:: illegal short term buffer state detected
>
> I have tried changing many different properties of rtpjitterbuffer but it has no effect.
>
> Does anyone know why this is happening? Is there a problem with my pipeline or could this be a bug (I am using GStreamer v1.14.4)?
>
> Any help would be greatly appreciated as I have already spend a long time trying to solve this.
>
> Thankshttps://gitlab.freedesktop.org/gstreamer/gst-rtsp-server/-/issues/29gst-rtsp-server: Poor performance with interleaved RTSP due to missing buffer...2019-02-01T01:02:01ZBugzilla Migration Usergst-rtsp-server: Poor performance with interleaved RTSP due to missing buffer list support and merging of all memories in buffers## Submitted by Patricia Muscalu
**[Link to original bug (#771525)](https://bugzilla.gnome.org/show_bug.cgi?id=771525)**
## Description
Currently, there is no support for buffer lists in gst-rtsp-server in the tcp case.
The overh...## Submitted by Patricia Muscalu
**[Link to original bug (#771525)](https://bugzilla.gnome.org/show_bug.cgi?id=771525)**
## Description
Currently, there is no support for buffer lists in gst-rtsp-server in the tcp case.
The overhead of pushing single buffers individually through the pipeline gets very high. I'll provide a patch suggesting a possible solution to this problem.
I've already created another bug addressing missing buffer list functionality in appsink:
https://bugzilla.gnome.org/show_bug.cgi?id=752363.
### Depends on
* [Bug 785684](https://bugzilla.gnome.org/show_bug.cgi?id=785684)
* [Bug 796692](https://bugzilla.gnome.org/show_bug.cgi?id=796692)https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/issues/884retinex element on ubuntu 16.04 (arm64)2019-02-01T11:08:46Zmipsanretinex element on ubuntu 16.04 (arm64)Dear,
I would run Retinex element on ARM64 based ubuntu 16.04/18.04, and installed gstreamer1.0-plugins-bad with apt-get.
However it might do not have retinex element in ARM64 package.
(gst-inspect1.0 retinex returns no element message...Dear,
I would run Retinex element on ARM64 based ubuntu 16.04/18.04, and installed gstreamer1.0-plugins-bad with apt-get.
However it might do not have retinex element in ARM64 package.
(gst-inspect1.0 retinex returns no element message)
How can I try this element on ARM64 H/W?
Thanks,https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/issues/540rtph264pay commit 4add820c breaks h264 rendering2019-02-01T15:38:02ZJuho Ylikorpirtph264pay commit 4add820c breaks h264 renderingWe use this lib in rtsp proxy - e4f38c98 works ok, but commit 4add820c breaks h264 stream (video shows blinking grey on vms using ffmpeg for decoding). Source device is Hikvision IP-camera.
Pipeline,
`( rtspsrc location=rtsp://admin:......We use this lib in rtsp proxy - e4f38c98 works ok, but commit 4add820c breaks h264 stream (video shows blinking grey on vms using ffmpeg for decoding). Source device is Hikvision IP-camera.
Pipeline,
`( rtspsrc location=rtsp://admin:...@...:554/Streaming/Channels/101?transportmode=unicast protocols=GST_RTSP_LOWER_TRANS_TCP tcp-timeout=5000000 buffer-mode=slave latency=100 ! rtpjitterbuffer ! application/x-rtp,payload=96 ! rtph264depay ! rtph264pay name=pay0 pt=96 mtu=1280 )`https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/issues/862msdk: error message "gst_buffer_unmap: assertion 'GST_IS_BUFFER (buffer)" occ...2019-02-02T17:08:27Zwangzhanjunmsdk: error message "gst_buffer_unmap: assertion 'GST_IS_BUFFER (buffer)" occurs during decodingSystem Environment
=======
* Platform: KBL
* Arch: x86_64
* Kernel: 4.18.0+
* libva commit 566a1388b4e5961fb73d0fd03058d50c5965a7f4
* media_driver commit 8968471978818839fed845ce918843a9ef3210c9
* mediasdk commit 750cfb4776023fb5a9b24...System Environment
=======
* Platform: KBL
* Arch: x86_64
* Kernel: 4.18.0+
* libva commit 566a1388b4e5961fb73d0fd03058d50c5965a7f4
* media_driver commit 8968471978818839fed845ce918843a9ef3210c9
* mediasdk commit 750cfb4776023fb5a9b2481c1bf1956ab5568651
* gstreamer master branch 74b9e72ec6b0963661c5c370e634f6fc9444057f
* gst-plugin-bad commit 2f05ee9ba9a7bbdde761c8da1fe330a58b1c4687
Reproduce Steps
==============
* gst-launch-1.0 -vf filesrc location=/media_stream/assets/yuv/1080p_blue_sky_1920x1080_I420.yuv num-buffers=150 ! rawvideoparse format=i420 width=1920 height=1080 framerate=25 ! videoconvert ! video/x-raw,format=NV12 ! msdkh264enc rate-control=cbr bitrate=1000 gop-size=12 num-slices=4 b-frames=0 hardware=true ! video/x-h264,profile=high ! h264parse ! filesink location=./test.h264
* gst-launch-1.0 -vf filesrc location=./test.h264 ! h264parse ! msdkh264dec hardware=true ! videoconvert ! video/x-raw,format=I420 ! fakesink
* error message info
(gst-launch-1.0:25628): GStreamer-CRITICAL **: gst_buffer_unmap: assertion 'GST_IS_BUFFER (buffer)' failedhttps://gitlab.freedesktop.org/gstreamer/cerbero/-/issues/118Unhack the universal build configuration loading2019-02-02T20:51:17ZNicolas DufresneUnhack the universal build configuration loadingWith !97 we revealed that the design of the universal build configuration loader is not very robust. We should find a proper design and implement it. And we should decide if we allow for universal configuration re-location like we do now.With !97 we revealed that the design of the universal build configuration loader is not very robust. We should find a proper design and implement it. And we should decide if we allow for universal configuration re-location like we do now.https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/-/issues/180Subclass: parent class optional functions invocation 2d attempt2019-02-03T08:52:59ZFrançois LaignelSubclass: parent class optional functions invocation 2d attemptThis is a second attempt at defining a behaviour for the invocation of the parent's function from a subclass. The discussion started here: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/merge_requests/216#note_108728. and continue...This is a second attempt at defining a behaviour for the invocation of the parent's function from a subclass. The discussion started here: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/merge_requests/216#note_108728. and continued here #178.
Edit: updated with feedback from @slomo + additional details when nothing occurs when a vfunc is `NULL`. The details aims at deciding what the Rust binding should return when the vfunc is not defined.
## gstreamer
| Function | When NULL | Comment |
| --------------------------- | -------------------- | ----------- |
| Bin.parent_add_element | return `FALSE` | Has default vfunc. Optional |
| Bin.parent_handle_message | unref message + ret. `GST_BUS_DROP` | Has default vfunc. Optional |
| Bin.parent_remove_element | return `FALSE` | Has default vfunc. Optional |
| | | |
| Element.parent_change_state | handle failure + abort state | Has default vfunc. Missing vfunc is a bug. |
| Element.parent_query | return `FALSE` | Has default vfunc. Optional |
| Element.parent_send_event | return `FALSE` | Has default vfunc. Optional |
| Element.parent_set_context | nothing | Has default vfunc. Optional. Function returns nothing. |
| | | |
| Pad.parent_linked | not used | Optional. Function returns nothing. |
| Pad.parent_unlinked | not used | Optional. Function returns nothing. |
## gstreamer-base
| Function | When NULL | Comment |
| ------------------------------------- | -------------------- | ----------- |
| Aggregator.parent_aggregate | `init` fails | Mandatory |
| Aggregator.parent_clip | nothing | Optional. The best we can do is to return the input buffer. A trace will state that the buffer is being clipped |
| Aggregator.parent_create_new_pad | not checked | Has default vfunc. Missing vfunc is a bug |
| Aggregator.parent_finish_buffer | assertion failure | Has default vfunc. Missing vfunc is a bug |
| Aggregator.parent_fixate_src_caps | assertion failure | Has default vfunc. Missing vfunc is a bug |
| Aggregator.parent_flush | return `GST_FLOW_OK` | Optional |
| Aggregator.parent_get_next_time | return `GST_CLOCK_TIME_NONE` | Optional |
| Aggregator.parent_negotiated_src_caps | nothing | Has default vfunc. Optional + return `Ok(())` |
| Aggregator.parent_sink_event | not checked | Has default vfunc. Missing vfunc is a bug |
| Aggregator.parent_sink_query | not checked | Has default vfunc. Missing vfunc is a bug |
| Aggregator.parent_src_activate | nothing | Optional + return `Ok(())` |
| Aggregator.parent_src_event | not checked | Has default vfunc. Missing vfunc is a bug |
| Aggregator.parent_src_query | not checked | Has default vfunc. Missing vfunc is a bug |
| Aggregator.parent_start | return `TRUE` | Optional |
| Aggregator.parent_stop | return `TRUE` | Optional |
| Aggregator.parent_update_src_caps | assertion failure | Has default vfunc. Missing vfunc is a bug |
| | | |
| AggregatorPad.parent_flush | return `TRUE` | Optional |
| AggregatorPad.parent_skip_buffer | return `FALSE` | Optional |
| | | |
| BaseSink.parent_event | return `TRUE` | Has default vfunc. Optional |
| BaseSink.parent_fixate | return input caps | Has default vfunc. Optional |
| BaseSink.parent_get_caps | nothing + return `NULL` | Has default vfunc. Optional |
| BaseSink.parent_query | return `FALSE` | Has default vfunc. Optional |
| BaseSink.parent_set_caps | nothing (return `TRUE`) | Has default vfunc. Optional |
| | | |
| BaseSrc.parent_create | return `GST_FLOW_NOT_SUPPORTED` | Has default vfunc. Optional |
| BaseSrc.parent_do_seek | return `FALSE` | Has default vfunc. Optional |
| BaseSrc.parent_event | return `FALSE` | Has default vfunc. Optional |
| BaseSrc.parent_fixate | return input caps | Has default vfunc. Optional |
| BaseSrc.parent_get_caps | return `FALSE` | Has default vfunc. Optional |
| BaseSrc.parent_negotiate | handle TRUE case | Has default vfunc. Optional |
| BaseSrc.parent_query | return `FALSE` | Has default vfunc. Optional |
| BaseSrc.parent_set_caps | nothing (return `TRUE`) | Optional |
| | | |
| BaseTransform.parent_accept_caps | return `FALSE` | Has default vfunc. Optional |
| BaseTransform.parent_fixate_caps | nothing | Has default vfunc. Optional. The best we can do is to return the input `othercaps`. Traces will be issued. |
| BaseTransform.parent_query | return `FALSE` | Has default vfunc. Optional |
| BaseTransform.parent_sink_event | unref event + ret. `TRUE` | Has default vfunc. Optional |
| BaseTransform.parent_src_event | unref event + ret. `TRUE` | Has default vfunc. Optional |
| BaseTransform.parent_transform_caps | return `NULL` | Has default vfunc. Optional |
| BaseTransform.parent_transform_size | return `FALSE` | Has default vfunc. Optional |
Edit: For the record, these were the questions in the initial issue description.
Please check the `comment` column. I'm not 100% sure about these:
- Are subclasses allowed to set some vfuncs to `NULL`?
- Are `Pad` vfuncs `linked` and `unlinked` optional?
https://gitlab.freedesktop.org/gstreamer/cerbero/-/issues/119android-universal: Taglib build is broken2019-02-03T22:14:16ZNicolas Dufresneandroid-universal: Taglib build is brokenA fresh checkout of cerbero, I ran:
```
./cerbero-uninstalled -c config/cross-android-universal.cbc bootstrap && ./cerbero-uninstalled -c config/cross-android-universal.cbc build taglib
```
And got this error. It's passing the x86_64 ...A fresh checkout of cerbero, I ran:
```
./cerbero-uninstalled -c config/cross-android-universal.cbc bootstrap && ./cerbero-uninstalled -c config/cross-android-universal.cbc build taglib
```
And got this error. It's passing the x86_64 compiler for an amv7 compilation.
```
[(2/2) taglib -> extract ]
-----> Extracting tarball to /home/nicolas/Sources/gstreamer-master/cerbero-test/build/sources/android_universal/armv7/taglib-1.11.1
Unpacking /home/nicolas/.cache/cerbero-sources/taglib-1.11.1/taglib-1.11.1.tar.gz in /home/nicolas/Sources/gstreamer-master/cerbero-test/build/sources/android_universal/armv7
-----> Extracting tarball to /home/nicolas/Sources/gstreamer-master/cerbero-test/build/sources/android_universal/arm64/taglib-1.11.1
Unpacking /home/nicolas/.cache/cerbero-sources/taglib-1.11.1/taglib-1.11.1.tar.gz in /home/nicolas/Sources/gstreamer-master/cerbero-test/build/sources/android_universal/arm64
-----> Extracting tarball to /home/nicolas/Sources/gstreamer-master/cerbero-test/build/sources/android_universal/x86/taglib-1.11.1
Unpacking /home/nicolas/.cache/cerbero-sources/taglib-1.11.1/taglib-1.11.1.tar.gz in /home/nicolas/Sources/gstreamer-master/cerbero-test/build/sources/android_universal/x86
-----> Extracting tarball to /home/nicolas/Sources/gstreamer-master/cerbero-test/build/sources/android_universal/x86_64/taglib-1.11.1
Unpacking /home/nicolas/.cache/cerbero-sources/taglib-1.11.1/taglib-1.11.1.tar.gz in /home/nicolas/Sources/gstreamer-master/cerbero-test/build/sources/android_universal/x86_64
[(2/2) taglib -> configure ]
Running command 'cmake -DCMAKE_INSTALL_PREFIX=/home/nicolas/Sources/gstreamer-master/cerbero-test/build/dist/android_universal/armv7 -DCMAKE_LIBRARY_OUTPUT_PATH=/home/nicolas/Sources/gstreamer-master/cerbero-test/build/dist/android_universal/armv7/lib -DCMAKE_INSTALL_LIBDIR=/home/nicolas/Sources/gstreamer-master/cerbero-test/build/dist/android_universal/armv7/lib -DCMAKE_INSTALL_BINDIR=/home/nicolas/Sources/gstreamer-master/cerbero-test/build/dist/android_universal/armv7/bin -DCMAKE_INSTALL_INCLUDEDIR=/home/nicolas/Sources/gstreamer-master/cerbero-test/build/dist/android_universal/armv7/include -DWITH_MP4=ON -DWITH_ASF=ON -DBUILD_SHARED_LIBS=1 -DBUILD_STATIC_LIBS=1 -DCMAKE_DISABLE_FIND_PACKAGE_Boost=TRUE -DANDROID_NDK=1 -DZLIB_ROOT=/home/nicolas/Sources/gstreamer-master/cerbero-test/build/dist/android_universal/armv7 -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_C_COMPILER=/home/nicolas/Sources/gstreamer-master/cerbero-test/build/android-ndk-18/toolchains/llvm/prebuilt/linux-x86_64/bin/clang -DCMAKE_CXX_COMPILER=/home/nicolas/Sources/gstreamer-master/cerbero-test/build/android-ndk-18/toolchains/llvm/prebuilt/linux-x86_64/bin/clang++ -DCMAKE_C_FLAGS="-Wall -g -Os -gcc-toolchain /home/nicolas/Sources/gstreamer-master/cerbero-test/build/android-ndk-18/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64 -isysroot /home/nicolas/Sources/gstreamer-master/cerbero-test/build/android-ndk-18/sysroot -isystem /home/nicolas/Sources/gstreamer-master/cerbero-test/build/dist/android_universal/armv7/include -isystem /home/nicolas/Sources/gstreamer-master/cerbero-test/build/android-ndk-18/sysroot/usr/include -isystem /home/nicolas/Sources/gstreamer-master/cerbero-test/build/android-ndk-18/sysroot/usr/include/arm-linux-androideabi -fno-integrated-as -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -fPIC -Wno-invalid-command-line-argument -Wno-unused-command-line-argument -mthumb -march=armv7-a -mfloat-abi=softfp -mfpu=vfpv3-d16 -DANDROID -DPIC -D__ANDROID_API__=16 -D__ARM_ARCH_7A__ -Wa,--noexecstack" -DCMAKE_CXX_FLAGS="-Wall -g -Os -gcc-toolchain /home/nicolas/Sources/gstreamer-master/cerbero-test/build/android-ndk-18/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64 -isysroot /home/nicolas/Sources/gstreamer-master/cerbero-test/build/android-ndk-18/sysroot -isystem /home/nicolas/Sources/gstreamer-master/cerbero-test/build/dist/android_universal/armv7/include -isystem /home/nicolas/Sources/gstreamer-master/cerbero-test/build/android-ndk-18/sysroot/usr/include -isystem /home/nicolas/Sources/gstreamer-master/cerbero-test/build/android-ndk-18/sysroot/usr/include/arm-linux-androideabi -fno-integrated-as -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -fPIC -Wno-invalid-command-line-argument -Wno-unused-command-line-argument -mthumb -march=armv7-a -mfloat-abi=softfp -mfpu=vfpv3-d16 -DANDROID -DPIC -D__ANDROID_API__=16 -D__ARM_ARCH_7A__ -Wa,--noexecstack -fno-rtti -fno-exceptions -frtti" -DLIB_SUFFIX= -DCMAKE_BUILD_TYPE=Release -DCMAKE_FIND_ROOT_PATH=$CERBERO_PREFIX '
-- The C compiler identification is Clang 7.0.2
-- The CXX compiler identification is Clang 7.0.2
-- Check for working C compiler: /home/nicolas/Sources/gstreamer-master/cerbero-test/build/android-ndk-18/toolchains/llvm/prebuilt/linux-x86_64/bin/clang
-- Check for working C compiler: /home/nicolas/Sources/gstreamer-master/cerbero-test/build/android-ndk-18/toolchains/llvm/prebuilt/linux-x86_64/bin/clang -- broken
CMake Error at /usr/share/cmake/Modules/CMakeTestCCompiler.cmake:52 (message):
The C compiler
"/home/nicolas/Sources/gstreamer-master/cerbero-test/build/android-ndk-18/toolchains/llvm/prebuilt/linux-x86_64/bin/clang"
is not able to compile a simple test program.
It fails with the following output:
Change Dir: /home/nicolas/Sources/gstreamer-master/cerbero-test/build/sources/android_universal/armv7/taglib-1.11.1/CMakeFiles/CMakeTmp
Run Build Command:"/usr/bin/gmake" "cmTC_896df/fast"
/usr/bin/gmake -f CMakeFiles/cmTC_896df.dir/build.make CMakeFiles/cmTC_896df.dir/build
gmake[1] : on entre dans le répertoire « /home/nicolas/Sources/gstreamer-master/cerbero-test/build/sources/android_universal/armv7/taglib-1.11.1/CMakeFiles/CMakeTmp »
Building C object CMakeFiles/cmTC_896df.dir/testCCompiler.c.o
/home/nicolas/Sources/gstreamer-master/cerbero-test/build/android-ndk-18/toolchains/llvm/prebuilt/linux-x86_64/bin/clang -Wall -g -Os -gcc-toolchain /home/nicolas/Sources/gstreamer-master/cerbero-test/build/android-ndk-18/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64 -isysroot /home/nicolas/Sources/gstreamer-master/cerbero-test/build/android-ndk-18/sysroot -isystem /home/nicolas/Sources/gstreamer-master/cerbero-test/build/dist/android_universal/armv7/include -isystem /home/nicolas/Sources/gstreamer-master/cerbero-test/build/android-ndk-18/sysroot/usr/include -isystem /home/nicolas/Sources/gstreamer-master/cerbero-test/build/android-ndk-18/sysroot/usr/include/arm-linux-androideabi -fno-integrated-as -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -fPIC -Wno-invalid-command-line-argument -Wno-unused-command-line-argument -mthumb -march=armv7-a -mfloat-abi=softfp -mfpu=vfpv3-d16 -DANDROID -DPIC -D__ANDROID_API__=16 -D__ARM_ARCH_7A__ -Wa,--noexecstack -o CMakeFiles/cmTC_896df.dir/testCCompiler.c.o -c /home/nicolas/Sources/gstreamer-master/cerbero-test/build/sources/android_universal/armv7/taglib-1.11.1/CMakeFiles/CMakeTmp/testCCompiler.c
error: unknown target CPU 'armv7-a'
note: valid target CPU values are: nocona, core2, penryn, bonnell, atom, silvermont, slm, goldmont, nehalem, corei7, westmere, sandybridge, corei7-avx, ivybridge, core-avx-i, haswell, core-avx2, broadwell, skylake, skylake-avx512, skx, cannonlake, icelake, knl, knm, k8, athlon64, athlon-fx, opteron, k8-sse3, athlon64-sse3, opteron-sse3, amdfam10, barcelona, btver1, btver2, bdver1, bdver2, bdver3, bdver4, znver1, x86-64
gmake[1]: *** [CMakeFiles/cmTC_896df.dir/build.make:66: CMakeFiles/cmTC_896df.dir/testCCompiler.c.o] Error 1
gmake[1] : on quitte le répertoire « /home/nicolas/Sources/gstreamer-master/cerbero-test/build/sources/android_universal/armv7/taglib-1.11.1/CMakeFiles/CMakeTmp »
gmake: *** [Makefile:121: cmTC_896df/fast] Error 2
CMake will not be able to correctly generate this project.
Call Stack (most recent call first):
CMakeLists.txt:3 (project)
-- Configuring incomplete, errors occurred!
```Nicolas DufresneNicolas Dufresnehttps://gitlab.freedesktop.org/gstreamer/gstreamer-rs/-/issues/179Survey of functions returning `bool` under most remaining workspaces2019-02-04T21:19:00ZFrançois LaignelSurvey of functions returning `bool` under most remaining workspacesSurvey of functions returning bool under all workspaces but `gstreamer` & `gstreamer-base` (already processed: see https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/issues/171 & https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/i...Survey of functions returning bool under all workspaces but `gstreamer` & `gstreamer-base` (already processed: see https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/issues/171 & https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/issues/175) and `gstreamer-editing-services` & `gstreamer-sdp` (will come in speratate issues because many functions are concerned).
## Workspace `gstreamer-app`
| Function | Location | Gst Function | Proposed Return Type | Comment |
| -------------------------------- | -------- | ---------------------------- | -------------------- | --------------------------- |
| AppSrc.seek_data | src | GstAppSrcCallbacks.seek_data | keep `bool` | Returns TRUE if the seek succeeded. Note: Seek function -> `bool` |
| AppSrc.connect_seek_data | auto | GstAppSrcCallbacks.seek_data | same as above | |
| AppSrcCallbacks.seek_data | src | GstAppSrcCallbacks.seek_data | same as above | |
| AppSrcCallbacksBuilder.seek_data | src | GstAppSrcCallbacks.seek_data | same as above | |
## Workspace `gstreamer-audio`
| Function | Location | Gst Function | Proposed Return Type | Comment |
| -------------------------------------------------- | -------- | --------------------------------------- | -------------------- | ------- |
| AudioChannelPosition.check_valid_channel_positions | auto | gst_audio_check_valid_channel_positions | keep `bool` | Returns TRUE if the channel positions are valid. |
## Workspace `gstreamer-check`
| Function | Location | Gst Function | Proposed Return Type | Comment |
| --------------------------- | -------- | ------------------------------- | ----------------------------- | ------- |
| Harness.push_event | src | gst_harness_push_event | keep `bool` | Event function -> `bool` |
| Harness.push_upstream_event | src | gst_harness_push_upstream_event | keep `bool` | Event function -> `bool` |
| Harness.src_push_event | src | gst_harness_src_push_event | keep `bool` | Event function -> `bool` |
| | | | | |
| TestClock.crank | auto | gst_test_clock_crank | `Result<(), glib::BoolError>` | Return: TRUE if the crank was successful, FALSE otherwise. |
## Workspace `gstreamer-editing-services`
Many. Will be included in a dedicated issue.
## Workspace `gstreamer-gl`
| Function | Location | Gst Function | Proposed Return Type | Comment |
| --------------------------------------- | -------- | -------------------------------------------- | ----------------------------- | ------- |
| GlColorConvert.set_caps | auto | gst_gl_color_convert_set_caps | `Result<(), glib::BoolError>` | |
| | | | | |
| GlContext.check_feature | auto | gst_gl_context_check_feature | keep `bool` | Returns whether feature is supported by context |
| GlContext.check_framebuffer_status | auto | gst_gl_context_check_framebuffer_status | keep `bool` | Returns whether the current framebuffer is complete |
| GlContext.check_gl_version | auto | gst_gl_context_check_gl_version | keep `bool` | Returns whether OpenGL context implements the required api and specified version. |
| GlContext.set_window | auto | gst_gl_context_set_window | `Result<(), glib::BoolError>` | Returns whether the window was successfully updated |
| GlContext.supports_glsl_profile_version | auto | gst_gl_context_supports_glsl_profile_version | keep `bool` | Returns whether context supports the combination of version with profile |
| | | | | |
| GlShader.attach | auto | gst_gl_shader_attach | `Result<(), glib::BoolError>` | Returns whether stage could be attached to shader |
| GlShader.attach_unlocked | auto | gst_gl_shader_attach_unlocked | `Result<(), glib::BoolError>` | Returns whether stage could be attached to shader |
| | | | | |
| GlUpload.set_caps | auto | gst_gl_upload_set_caps | `Result<(), glib::BoolError>` | Returns whether in_caps and out_caps could be set on upload |
| | | | | |
| GlViewConvert.set_caps | auto | gst_gl_view_convert_set_caps | `Result<(), glib::BoolError>` | Result not described in doc |
| | | | | |
| GlWindow.set_render_rectangle | auto | gst_gl_window_set_render_rectangle | `Result<(), glib::BoolError>` | Returns whether the specified region could be set |
| | | | | |
| GlslStage.set_strings | auto | gst_glsl_stage_set_strings | `Result<(), glib::BoolError>` | Result not described in doc |
## Workspace `gstreamer-net`
All filtered out.
## Workspace `gstreamer-pbutils`
All filtered out.
## Workspace `gstreamer-player`
All filtered out.
## Workspace `gstreamer-rtsp`
None
## Workspace `gstreamer-rtsp-server`
| Function | Location | Gst Function | Proposed Return Type | Comment |
| ------------------------------------------------ | -------- | ----------------------------------- | --------------------------------- | ------- |
| RtspAuth.check | auto | gst_rtsp_auth_check | `Result<(), glib::BoolError>` | Returns FALSE if check failed. |
| RtspAuth.connect_accept_certificate | auto | "accept-certificate" signal | `Result<(), glib::LoggableError>` | Returns TRUE to accept peer_cert (which will also immediately end the signal emission). FALSE to allow the signal emission to continue, which will cause the handshake to fail if no one else overrides it. |
| | | | | |
| RtspServer.io_func | auto | gst_rtsp_server_io_func | `Result<(), glib::BoolError>` | Returns TRUE if the source could be connected, FALSE if an error occurred. |
| RtspServer.transfer_connection | auto | gst_rtsp_server_transfer_connection | `Result<(), glib::BoolError>` | Returns TRUE if all was ok, FALSE if an error occurred. |
| | | | | |
| RtspSession.release_media | auto | gst_rtsp_session_release_media | keep `bool` | Returns TRUE if there are more media session left in sess. |
| | | | | |
| RtspStream.set_blocked | auto | gst_rtsp_stream_set_blocked | `Result<(), glib::BoolError>` | Returns TRUE on success |
| RtspStream.unblock_linked | auto | gst_rtsp_stream_unblock_linked | `Result<(), glib::BoolError>` | Returns TRUE on success |
| RtspStream.update_crypto | auto | gst_rtsp_stream_update_crypto | `Result<(), glib::BoolError>` | Returns: TRUE if crypto could be updated |
## Workspace `gstreamer-sdp`
Many. Will be included in a dedicated issue.
## Workspace `gstreamer-video`
All filtered out.
## Workspace `gstreamer-webrtc`
All filtered out.https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/-/issues/182Survey of functions returning `bool` under workspace `gstreamer-sdp`2019-02-05T21:32:45ZFrançois LaignelSurvey of functions returning `bool` under workspace `gstreamer-sdp`This is the last part of an overall effort throughout `gstreamer-rs`, which started with discussions in #166 & !196 (closed) and continued with several merge requests.
Basically, all functions which, from their name, were not obviously ...This is the last part of an overall effort throughout `gstreamer-rs`, which started with discussions in #166 & !196 (closed) and continued with several merge requests.
Basically, all functions which, from their name, were not obviously returning a boolean are candidate for switching to `Result<(), glib::BoolError>`.
| Function | Location | Gst Function | Proposed Return Type | Comment |
| ---------------------------------- | -------- | --------------------------------------- | ----------------------------- | ------- |
| MikeyMessage.add_cs_srtp | auto | gst_mikey_message_add_cs_srtp | `Result<(), glib::BoolError>` | Add a Crypto policy for SRTP to msg. Returns TRUE on success |
| MikeyMessage.add_payload | src | gst_mikey_message_add_payload | `Result<(), glib::BoolError>` | Add a new payload to msg. Returns TRUE on success |
| MikeyMessage.add_pke | auto | gst_mikey_message_add_pke | `Result<(), glib::BoolError>` | Add a new PKE payload to msg with the given parameters. Returns TRUE on success |
| MikeyMessage.add_rand | auto | gst_mikey_message_add_rand | `Result<(), glib::BoolError>` | Add a new RAND payload to msg with the given parameters. Returns TRUE on success |
| MikeyMessage.add_rand_len | auto | gst_mikey_message_add_rand_len | `Result<(), glib::BoolError>` | Add a new RAND payload to msg with len random bytes. Returns TRUE on success |
| MikeyMessage.add_t | src | gst_mikey_message_add_t | `Result<(), glib::BoolError>` | Add a new T payload to msg with the given parameters. Returns TRUE on success |
| MikeyMessage.add_t_now_ntp_utc | auto | gst_mikey_message_add_t_now_ntp_utc | `Result<(), glib::BoolError>` | Add a new T payload to msg that contains the current time in NTP-UTC format. Returns TRUE on success |
| MikeyMessage.insert_cs_srtp | src | gst_mikey_message_insert_cs_srtp | `Result<(), glib::BoolError>` | Insert a Crypto Session map for SRTP in msg at idx. Returns TRUE on success |
| MikeyMessage.insert_payload | src | gst_mikey_message_insert_payload | `Result<(), glib::BoolError>` | Insert the payload at index idx in msg. Returns TRUE on success |
| MikeyMessage.remove_cs_srtp | auto | gst_mikey_message_remove_cs_srtp | `Result<(), glib::BoolError>` | Remove the SRTP policy at idx. Returns TRUE on success |
| MikeyMessage.remove_payload | auto | gst_mikey_message_remove_payload | `Result<(), glib::BoolError>` | Remove the payload in msg at idx. Returns TRUE on success |
| MikeyMessage.replace_cs_srtp | src | gst_mikey_message_replace_cs_srtp | `Result<(), glib::BoolError>` | Replace a Crypto Session map for SRTP in msg at idx with map. Returns TRUE on success |
| MikeyMessage.replace_payload | src | gst_mikey_message_replace_payload | `Result<(), glib::BoolError>` | Replace the payload at idx in msg with payload. Returns TRUE on success |
| MikeyMessage.set_info | auto | gst_mikey_message_set_info | `Result<(), glib::BoolError>` | Set the information in msg. Returns TRUE on success |
| MikeyMessage.to_caps | auto | gst_mikey_message_to_caps | `Result<(), glib::BoolError>` | (fills caps with SRTP parameters). Returns TRUE on success |
| | | | | |
| MikeyPayload.kemac_add_sub | src | gst_mikey_payload_kemac_add_sub | `Result<(), glib::BoolError>` | Add a new sub payload to payload. Returns TRUE on success |
| MikeyPayload.kemac_remove_sub | auto | gst_mikey_payload_kemac_remove_sub | `Result<(), glib::BoolError>` | Remove the sub payload at idx in payload. Returns TRUE on success |
| MikeyPayload.kemac_set | auto | gst_mikey_payload_kemac_set | `Result<(), glib::BoolError>` | Set the KEMAC parameters. Returns TRUE on success |
| MikeyPayload.key_data_set_interval | src | gst_mikey_payload_key_data_set_interval | `Result<(), glib::BoolError>` | Set the key validity period in the GST_MIKEY_PT_KEY_DATA payload. Returns TRUE on success |
| MikeyPayload.key_data_set_key | auto | gst_mikey_payload_key_data_set_key | `Result<(), glib::BoolError>` | Set key_len bytes of key_data of type key_type as the key for the GST_MIKEY_PT_KEY_DATA payload. Returns TRUE on success |
| MikeyPayload.key_data_set_salt | auto | gst_mikey_payload_key_data_set_salt | `Result<(), glib::BoolError>` | Set the salt key data. Returns TRUE on success |
| MikeyPayload.key_data_set_spi | auto | gst_mikey_payload_key_data_set_spi | `Result<(), glib::BoolError>` | Set the SPI/MKI validity in the GST_MIKEY_PT_KEY_DATA payload. Returns TRUE on success |
| MikeyPayload.pke_set | auto | gst_mikey_payload_pke_set | `Result<(), glib::BoolError>` | Set the PKE values in payload. payload must be of type GST_MIKEY_PT_PKE. Returns TRUE on success |
| MikeyPayload.rand_set | auto | gst_mikey_payload_rand_set | `Result<(), glib::BoolError>` | Set the random values in a GST_MIKEY_PT_RAND payload. Returns TRUE on success |
| MikeyPayload.sp_add_param | auto | gst_mikey_payload_sp_add_param | `Result<(), glib::BoolError>` | Add a new parameter to the GST_MIKEY_PT_SP payload with type , len and val. Returns TRUE on success |
| MikeyPayload.sp_remove_param | auto | gst_mikey_payload_sp_remove_param | `Result<(), glib::BoolError>` | Remove the Security Policy parameters from a GST_MIKEY_PT_SP payload at idx. Returns TRUE on success |
| MikeyPayload.sp_set | auto | gst_mikey_payload_sp_set | `Result<(), glib::BoolError>` | Set the Security Policy parameters for payload. Returns TRUE on success |
| MikeyPayload.t_set | src | gst_mikey_payload_t_set | `Result<(), glib::BoolError>` | Set the timestamp in a GST_MIKEY_PT_T payload. Returns TRUE on success |https://gitlab.freedesktop.org/gstreamer/gst-template/-/issues/3Missing includes during compile with .cc plugin file2019-02-06T18:34:25ZMickaelMissing includes during compile with .cc plugin fileHello,
I am playing with the gst-plugin sample project so I can create my own plugin. I need to be able to build the code with a C++ compiler. I will be accessing a C++ object from the plugin via a light wrapper. I basically renamed the...Hello,
I am playing with the gst-plugin sample project so I can create my own plugin. I need to be able to build the code with a C++ compiler. I will be accessing a C++ object from the plugin via a light wrapper. I basically renamed the gstplugin.c to gstplugin.cc.
I modified also the configuration files below to update the new name (gstplugin.cc) wherever it was needed:
src/.deps/libgstplugin_la-gstplugin.Plo
src/Makefile.am
configure.ac
When I run the autogen.sh I am getting the following error:
/bin/bash ../libtool --tag=CXX --tag=disable-static --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -g -O2 -MT libgstplugin_la-gstplugin.lo -MD -MP -MF .deps/libgstplugin_la-gstplugin.Tpo -c -o libgstplugin_la-gstplugin.lo `test -f 'gstplugin.cc' || echo './'`gstplugin.cc
libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -g -O2 -MT libgstplugin_la-gstplugin.lo -MD -MP -MF .deps/libgstplugin_la-gstplugin.Tpo -c gstplugin.cc -fPIC -DPIC -o .libs/libgstplugin_la-gstplugin.o
gstplugin.cc:63:21: **fatal error: gst/gst.h: No such file or directory**
I can see that Libtool is missing the include files that would come originally like in the example below:
/bin/bash ../libtool --tag=CC --tag=disable-static --mode=compile gcc -DHAVE_CONFIG_H -I. -I.. -pthread -I/usr/include/gstreamer-1.0 -I/usr/lib/i386-linux-gnu/gstreamer-1.0/include -I/usr/include/glib-2.0 -I/usr/lib/i386-linux-gnu/glib-2.0/include -Wall -g -O2 -Wall -MT libgstplugin_la-gstplugin.lo -MD -MP -MF .deps/libgstplugin_la-gstplugin.Tpo -c -o libgstplugin_la-gstplugin.lo `test -f 'gstplugin.c' || echo './'`gstplugin.c
What am I missing?
Thank you for your help and pointers.
//// Log reference (OS is Ubuntu 16.04):
./autogen.sh
autoreconf: Entering directory `.'
autoreconf: configure.ac: not using Gettext
autoreconf: running: aclocal --force
autoreconf: configure.ac: tracing
autoreconf: running: libtoolize --copy --force
libtoolize: putting auxiliary files in '.'.
libtoolize: copying file './ltmain.sh'
libtoolize: Consider adding 'AC_CONFIG_MACRO_DIRS([m4])' to configure.ac,
libtoolize: and rerunning libtoolize and aclocal.
libtoolize: Consider adding '-I m4' to ACLOCAL_AMFLAGS in Makefile.am.
autoreconf: running: /usr/bin/autoconf --force
autoreconf: running: /usr/bin/autoheader --force
autoreconf: running: automake --add-missing --copy --force-missing
configure.ac:21: installing './compile'
configure.ac:15: installing './missing'
src/Makefile.am: installing './depcomp'
autoreconf: running: ./config.status --recheck
running CONFIG_SHELL=/bin/bash /bin/bash ./configure --no-create --no-recursion
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /bin/mkdir -p
checking for gawk... no
checking for mawk... mawk
checking whether make sets $(MAKE)... yes
checking whether make supports nested variables... yes
checking whether to enable maintainer-specific portions of Makefiles... yes
checking for gcc... gcc
checking whether the C compiler works... yes
checking for C compiler default output file name... a.out
checking for suffix of executables...
checking whether we are cross compiling... no
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... yes
checking for gcc option to accept ISO C89... none needed
checking whether gcc understands -c and -o together... yes
checking for style of include used by make... GNU
checking dependency style of gcc... gcc3
checking for g++... g++
checking whether we are using the GNU C++ compiler... yes
checking whether g++ accepts -g... yes
checking dependency style of g++... gcc3
./configure: line 4358: =g++: command not found
checking build system type... i686-pc-linux-gnu
checking host system type... i686-pc-linux-gnu
checking how to print strings... printf
checking for a sed that does not truncate output... /bin/sed
checking for grep that handles long lines and -e... /bin/grep
checking for egrep... /bin/grep -E
checking for fgrep... /bin/grep -F
checking for ld used by gcc... /usr/bin/ld
checking if the linker (/usr/bin/ld) is GNU ld... yes
checking for BSD- or MS-compatible name lister (nm)... /usr/bin/nm -B
checking the name lister (/usr/bin/nm -B) interface... BSD nm
checking whether ln -s works... yes
checking the maximum length of command line arguments... 1572864
checking how to convert i686-pc-linux-gnu file names to i686-pc-linux-gnu format... func_convert_file_noop
checking how to convert i686-pc-linux-gnu file names to toolchain format... func_convert_file_noop
checking for /usr/bin/ld option to reload object files... -r
checking for objdump... objdump
checking how to recognize dependent libraries... pass_all
checking for dlltool... no
checking how to associate runtime and link libraries... printf %s\n
checking for ar... ar
checking for archiver @FILE support... @
checking for strip... strip
checking for ranlib... ranlib
checking command to parse /usr/bin/nm -B output from gcc object... ok
checking for sysroot... no
checking for a working dd... /bin/dd
checking how to truncate binary pipes... /bin/dd bs=4096 count=1
checking for mt... mt
checking if mt is a manifest tool... no
checking how to run the C preprocessor... gcc -E
checking for ANSI C header files... yes
checking for sys/types.h... yes
checking for sys/stat.h... yes
checking for stdlib.h... yes
checking for string.h... yes
checking for memory.h... yes
checking for strings.h... yes
checking for inttypes.h... yes
checking for stdint.h... yes
checking for unistd.h... yes
checking for dlfcn.h... yes
checking for objdir... .libs
checking if gcc supports -fno-rtti -fno-exceptions... no
checking for gcc option to produce PIC... -fPIC -DPIC
checking if gcc PIC flag -fPIC -DPIC works... yes
checking if gcc static flag -static works... yes
checking if gcc supports -c -o file.o... yes
checking if gcc supports -c -o file.o... (cached) yes
checking whether the gcc linker (/usr/bin/ld) supports shared libraries... yes
checking whether -lc should be explicitly linked in... no
checking dynamic linker characteristics... GNU/Linux ld.so
checking how to hardcode library paths into programs... immediate
checking whether stripping libraries is possible... yes
checking if libtool supports shared libraries... yes
checking whether to build shared libraries... yes
checking whether to build static libraries... yes
checking how to run the C++ preprocessor... g++ -E
checking for ld used by g++... /usr/bin/ld
checking if the linker (/usr/bin/ld) is GNU ld... yes
checking whether the g++ linker (/usr/bin/ld) supports shared libraries... yes
checking for g++ option to produce PIC... -fPIC -DPIC
checking if g++ PIC flag -fPIC -DPIC works... yes
checking if g++ static flag -static works... yes
checking if g++ supports -c -o file.o... yes
checking if g++ supports -c -o file.o... (cached) yes
checking whether the g++ linker (/usr/bin/ld) supports shared libraries... yes
checking dynamic linker characteristics... (cached) GNU/Linux ld.so
checking how to hardcode library paths into programs... immediate
checking for pkg-config...
checking for pkg-config... /usr/bin/pkg-config
checking pkg-config is at least version 0.9.0... yes
checking for GST... yes
checking to see if compiler understands -Wall... yes
checking that generated files are newer than configure... done
configure: creating ./config.status
autoreconf: running: ./config.status
config.status: creating Makefile
config.status: creating src/Makefile
config.status: creating config.h
config.status: config.h is unchanged
config.status: executing depfiles commands
config.status: executing libtool commands
autoreconf: running: make
make all-recursive
make[1]: Entering directory '/home/macnica/Documents/xxxxx/dev_middleware/src/gstreamerplugin/gst-plugin'
Making all in src
make[2]: Entering directory '/home/macnica/Documents/xxxxx/dev_middleware/src/gstreamerplugin/gst-plugin/src'
/bin/bash ../libtool --tag=CXX --tag=disable-static --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -g -O2 -MT libgstplugin_la-gstplugin.lo -MD -MP -MF .deps/libgstplugin_la-gstplugin.Tpo -c -o libgstplugin_la-gstplugin.lo `test -f 'gstplugin.cc' || echo './'`gstplugin.cc
libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -g -O2 -MT libgstplugin_la-gstplugin.lo -MD -MP -MF .deps/libgstplugin_la-gstplugin.Tpo -c gstplugin.cc -fPIC -DPIC -o .libs/libgstplugin_la-gstplugin.o
gstplugin.cc:63:21: fatal error: gst/gst.h: No such file or directory
compilation terminated.
Makefile:537: recipe for target 'libgstplugin_la-gstplugin.lo' failed
make[2]: *** [libgstplugin_la-gstplugin.lo] Error 1
make[2]: Leaving directory '/home/macnica/Documents/xxxxx/dev_middleware/src/gstreamerplugin/gst-plugin/src'
Makefile:406: recipe for target 'all-recursive' failed
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory '/home/macnica/Documents/xxxxx/dev_middleware/src/gstreamerplugin/gst-plugin'
Makefile:338: recipe for target 'all' failed
make: *** [all] Error 2
autoreconf: make failed with exit status: 2
autogen.sh failedhttps://gitlab.freedesktop.org/gstreamer/gstreamer-rs/-/issues/181Survey of functions returning `bool` under workspace `gstreamer-editing-servi...2019-02-07T10:37:40ZFrançois LaignelSurvey of functions returning `bool` under workspace `gstreamer-editing-services`This is part of an overall effort throughout `gstreamer-rs`, which started with discussions in #166 & !196 (closed) and continued with several merge requests.
The idea is to identify the functions returning a boolean as an indication of...This is part of an overall effort throughout `gstreamer-rs`, which started with discussions in #166 & !196 (closed) and continued with several merge requests.
The idea is to identify the functions returning a boolean as an indication of a failure and to have them return `Result<(), glib::BoolError>` instead. The main benefits are:
- Users can use Rust's early exit operator (`?`), `expect` or `map_err`.
- The compiler will issue a warning when the result is not checked.
We decided to use `Result<(), gst::LoggableError>` when the error is issued in a user implemented function. I didn't find any candidate in `gstreamer-editing-services`.
Edit: the table was updated further to the feedback from [@thiblahute](https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/issues/181#note_113729).
| Function | Location | Gst Function | Proposed Return Type | Comment |
| -------------------------------------- | -------- | ------------------------------------------- | ----------------------------- | ------- |
| Asset.needs_reload | auto | ges_asset_needs_reload | keep `bool` | Returns TRUE if the asset was in the cache and could be set as needing reload, FALSE otherwise. **Note:** See comment from @thiblahute. |
| Asset.set_proxy | auto | ges_asset_set_proxy | `Result<(), glib::BoolError>` | Returns TRUE if proxy has been set on asset , FALSE otherwise. |
| Asset.unproxy | auto | ges_asset_unproxy | `Result<(), glib::BoolError>` | Returns TRUE if proxy was a known proxy for asset, FALSE otherwise |
| | | | | |
| Clip.move_to_layer | auto | ges_clip_move_to_layer | `Result<(), glib::BoolError>` | Returns TRUE if clip could be moved FALSE otherwise |
| Clip.set_top_effect_index | auto | ges_clip_set_top_effect_index | `Result<(), glib::BoolError>` | Returns TRUE if effect was successfuly moved, FALSE otherwise. |
| Clip.set_top_effect_priority | auto | ges_clip_set_top_effect_priority | `Result<(), glib::BoolError>` | No doc. |
| | | | | |
| Extractable.set_asset | auto | ges_extractable_set_asset | `Result<(), glib::BoolError>` | Returns TRUE if asset could be set FALSE otherwise |
| | | | | |
| Layer.add_clip | auto | ges_layer_add_clip | `Result<(), glib::BoolError>` | Returns TRUE if the clip was properly added to the layer, or FALSE if the layer refuses to add the clip. |
| Layer.get_auto_transition | auto | ges_layer_get_auto_transition | keep `bool` | Returns TRUE if transitions are automatically added, else FALSE. **Note:** See comment from @thiblahute. |
| Layer.remove_clip | auto | ges_layer_remove_clip | `Result<(), glib::BoolError>` | Returns TRUE if the clip could be removed, FALSE if the layer does not want to remove the clip. |
| | | | | |
| Pipeline.set_timeline | auto | ges_pipeline_set_timeline | `Result<(), glib::BoolError>` | Returns TRUE if the timeline could be successfully set on the pipeline , else FALSE. |
| | | | | |
| Project.add_asset | auto | ges_project_add_asset | keep `bool` | Returns TRUE if the asset could be added FALSE it was already in the project. **Note:** FALSE is not an error but an indication |
| Project.add_encoding_profile | auto | ges_project_add_encoding_profile | `Result<(), glib::BoolError>` | Returns TRUE if profile could be added, FALSE otherwise |
| Project.create_asset | auto | ges_project_create_asset | keep `bool` | Returns TRUE if the asset started to be added FALSE it was already in the project. **Note:** FALSE is not an error but an indication |
| Project.remove_asset | auto | ges_project_remove_asset | `Result<(), glib::BoolError>` | Returns TRUE if the asset could be removed FALSE otherwise |
| | | | | |
| Timeline.commit | auto | ges_timeline_commit | keep `bool` | Returns TRUE if pending changes were commited or FALSE if nothing needed to be commited. This means that if FALSE is returned then no "commited" signal will be emited. **Note:** FALSE is not an error but an indication |
| Timeline.commit_sync | auto | ges_timeline_commit_sync | keep `bool` | Returns TRUE if pending changes were commited or FALSE if nothing needed to be commited. **Note:** FALSE is not an error but an indication |
| Timeline.get_auto_transition | auto | ges_timeline_get_auto_transition | keep `bool` | Returns TRUE if transitions are automatically added, else FALSE. **Note:** returned value is a genuine boolean |
| Timeline.remove_track | auto | ges_timeline_remove_track | `Result<(), glib::BoolError>` | Returns TRUE if the track was properly removed, else FALSE. |
| | | | | |
| TimelineElement.ripple | auto | ges_timeline_element_ripple | `Result<(), glib::BoolError>` | Returns TRUE if the self as been rippled properly, FALSE if an error occured |
| TimelineElement.ripple_end | auto | ges_timeline_element_ripple_end | `Result<(), glib::BoolError>` | Returns TRUE if the self as been rippled properly, FALSE if an error occured |
| TimelineElement.roll_end | auto | ges_timeline_element_roll_end | `Result<(), glib::BoolError>` | Returns TRUE if the self as been rolled properly, FALSE if an error occured |
| TimelineElement.roll_start | auto | ges_timeline_element_roll_start | `Result<(), glib::BoolError>` | Returns TRUE if the self as been roll properly, FALSE if an error occured |
| TimelineElement.set_name | auto | ges_timeline_element_set_name | `Result<(), glib::BoolError>` | No doc |
| TimelineElement.set_parent | auto | ges_timeline_element_set_parent | `Result<(), glib::BoolError>` | Returns TRUE if parent could be set or FALSE when self already had a parent or self and parent are the same. |
| TimelineElement.set_timeline | auto | ges_timeline_element_set_timeline | `Result<(), glib::BoolError>` | Returns TRUE if timeline could be set or FALSE when timeline already had a timeline. |
| TimelineElement.trim | auto | ges_timeline_element_trim | `Result<(), glib::BoolError>` | Returns TRUE if the self as been trimmed properly, FALSE if an error occured |
| | | | | |
| Track.commit | auto | ges_track_commit | keep `bool` | Returns TRUE if something as been commited FALSE if nothing needed to be commited. **Note:** FALSE is not an error but an indication |
| Track.get_mixing | auto | ges_track_get_mixing | keep `bool` | Returns True if there is a mixer, False otherwise. **Note:** returned value is a genuine boolean |
| | | | | |
| TrackElement.edit | auto | ges_track_element_edit | `Result<(), glib::BoolError>` | Returns TRUE if the object as been edited properly, FALSE if an error occured |
| TrackElement.remove_control_binding | auto | ges_track_element_remove_control_binding | `Result<(), glib::BoolError>` | Returns TRUE if the binding could be removed, FALSE if an error occured |
| TrackElement.set_active | auto | ges_track_element_set_active | keep `bool` | Returns TRUE if the property was toggled, else FALSE. **Note:** FALSE is not an error but an indication |https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/-/issues/166Proposal: `subclass` API: use `Result` for functions that can fail2019-02-07T11:09:42ZFrançois LaignelProposal: `subclass` API: use `Result` for functions that can failNote: the discussion about this enhancement proposal started [here](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/merge_requests/51#note_92776).
In the Rust `subclass` API, some functions that can fail return a [`Result`](http...Note: the discussion about this enhancement proposal started [here](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/merge_requests/51#note_92776).
In the Rust `subclass` API, some functions that can fail return a [`Result`](https://doc.rust-lang.org/std/result/index.html). Ex.:
- [`BaseSrcImpl::create`](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/blob/master/gst-plugin/src/base_src.rs#L60) returns `Result<gst::Buffer, gst::FlowError>`.
- [`AggregatorImpl::update_src_caps`](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/blob/master/gst-plugin/src/aggregator.rs#L107) returns `Result<gst::Caps, gst::FlowError>`.
Other functions retain the `bool` return value from the C API.Ex.: [`start`](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/blob/master/gst-plugin/src/base_src.rs#L34), [`set_caps`](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/blob/master/gst-plugin/src/base_src.rs#L84), …
And other functions return `gst::FlowReturn` like the C API. Ex.: [`BaseSinkImpl::render`](https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/blob/master/gstreamer-base/src/subclass/base_sink.rs#L34), [`Aggregator::aggregate`](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/blob/master/gst-plugin/src/aggregator.rs#L83), …
As an implementer, functions returning `Result` feel more convenient as we can use the facilities such as [`map`](https://doc.rust-lang.org/std/result/enum.Result.html#method.map) and [`map_err`](https://doc.rust-lang.org/std/result/enum.Result.html#method.map_err) and early exit using the [`?` operator](https://doc.rust-lang.org/std/result/index.html#the-question-mark-operator-).
This is a proposal to use `Result` for every functions from the `subclass` API which can fail. The binding would be in charge of taking care of the required adaptations to conform to the C API. E.g. for `BaseSinkImpl::render`, this would be [there](https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/blob/master/gstreamer-base/src/subclass/base_sink.rs#L212).
Functions returning a boolean could return `Result<(), gst::ErrorMessage>`. This [used to be the case for `gst-plugin-simple`](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/blob/80a2c5033f258154226e7f619b72c838cc69f6a2/gst-plugin-file/src/filesink.rs#L65). In the event of an `Err`, the binding could also take care of calling `gst_element_message_full` with the `GstGError` and optional `message` from `gst::ErrorMessage`.
Functions returning a `gst::FlowReturn` could return `Result<gst::FlowSuccess, gst::FlowError>`. The binding would take care of returning `GST_FLOW_OK` in case of an `Ok(())` result.
Edit: changed return type to `Result<gst::FlowSuccess, gst::FlowError>` thanks to @arun's suggestion.https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/-/issues/175Survey of functions returning `bool` under workspace `gstreamer-base`2019-02-07T11:22:24ZFrançois LaignelSurvey of functions returning `bool` under workspace `gstreamer-base`Survey of functions returning `bool` under workspace `gstreamer-base`
This is a survey of functions returning bool under workspace `gstreamer-base`. I filtered out the functions which, from their name, obviously return a genuine boole...Survey of functions returning `bool` under workspace `gstreamer-base`
This is a survey of functions returning bool under workspace `gstreamer-base`. I filtered out the functions which, from their name, obviously return a genuine boolean (`is_`, `has_`, ...) as well as the `get_property_xxx` and the `parent_` counterparts in order to reduce the list.
This is part of the discussions in #166 & !196 and a continuation of !200 and !207.
### Proposal
| Function | Location | Gst Function | Proposed Return Type | Optional? | Comment |
| ------------------------------ | -------- | -------------------------------------- | :---------------------------: | :-------: | ------- |
| Aggregator.negotiated_src_caps | subclass | GstAggregatorClass.negotiated_src_caps | `Result<(), LoggableError>` | yes | Notifies subclasses what caps format has been negotiated. **Note:** the return value seems to indicate whether the subclass is OK with the negotiation. @slomo comment: This is always an error it seems, and is basically like set_caps() elsewhere. I think I'd use BoolError here at least instead of a boolean |
| Aggregator.src_activate | subclass | GstAggregatorClass.src_activate | `Result<(), LoggableError>` | yes | Called when the src pad is activated, it will start/stop its pad task right after that call. **Note:** `Pad`'s `activate_function` was changed to `Result<...>` |
| Aggregator.src_event | subclass | GstAggregatorClass.src_event | keep `bool` | yes | Called when an event is received on the src pad, the subclass should always chain up. **Note:** Event fct -> bool |
| Aggregator.src_query | subclass | GstAggregatorClass.src_query | keep `bool` | yes | Called when a query is received on the src pad, the subclass should always chain up. **Note:** Query fct -> bool |
| Aggregator.start | subclass | GstAggregatorClass.start | `Result<(), ErrorMessage>` | yes | Called when the element goes from READY to PAUSED. The subclass should get ready to process aggregated buffers. See § `start` & `stop` below |
| Aggregator.stop | subclass | GstAggregatorClass.stop | `Result<(), ErrorMessage>` | yes | Called when the element goes from PAUSED to READY. The subclass should free all resources and reset its state. See § `start` & `stop` below |
| | | | | | |
| AggregatorPad.drop_buffer | auto | gst_aggregator_pad_drop_buffer | keep `bool` | n/a | Returns TRUE if there was a buffer queued in pad, or FALSE if not. **Note:** not a failure. |
| | | | | | |
| BaseSink.event | subclass | GstBaseSinkClass.sink_event | keep `bool` | yes | Event fct -> bool |
| BaseSink.query | subclass | GstBaseSinkClass.query | keep `bool` | yes | Query fct -> bool |
| BaseSink.set_caps | subclass | GstBaseSinkClass.set_caps | `Result<(), LoggableError>` | yes | Notify subclass of changed caps. |
| BaseSink.start | subclass | GstBaseSinkClass.start | `Result<(), ErrorMessage>` | yes | Start processing. Ideal for opening resources in the subclass. See § `start` & `stop` below |
| BaseSink.stop | subclass | GstBaseSinkClass.stop | `Result<(), ErrorMessage>` | yes | Stop processing. Subclasses should use this to close resources. See § `start` & `stop` below |
| BaseSink.unlock | subclass | GstBaseSinkClass.unlock | `Result<(), ErrorMessage>` | yes | Unlock any pending access to the resource. Subclasses should unblock any blocked function ASAP and call gst_base_sink_wait_preroll(). **Note:** return value is ignored. @slomo comment: This seems like a bug in the C code too (want to send a MR?). If this fails it generally means that everything is broken, so there should be an error message even. |
| BaseSink.unlock_stop | subclass | GstBaseSinkClass.unlock_stop | `Result<(), ErrorMessage>` | yes | Clear the previous unlock request. Subclasses should clear any state they set during GstBaseSinkClass.unlock(), and be ready to continue where they left off after gst_base_sink_wait_preroll(), gst_base_sink_wait() or gst_wait_sink_wait_clock() return or GstBaseSinkClass.render() is called again. **Note:** return value is ignored. See comment for `BaseSink.unlock` |
| | | | | | |
| BaseSrc.do_seek | subclass | GstBaseSinkClass.do_seek | keep `bool` | yes | Perform seeking on the resource to the indicated segment. |
| BaseSrc.event | subclass | GstBaseSinkClass.event | keep `bool` | yes | Event fct -> bool |
| BaseSrc.negotiate | subclass | GstBaseSinkClass.negotiate | `Result<(), LoggableError>` | yes | Negotiated the caps with the peer. |
| BaseSrc.new_seamless_segment | auto | gst_base_src_new_seamless_segment | `()` | n/a | Returns TRUE if preparation of the seamless segment succeeded. @slomo comment: This can literally never fail and should probably become () |
| BaseSrc.query | subclass | GstBaseSinkClass.query | keep `bool` | yes | Query fct -> bool |
| BaseSrc.set_caps | auto | gst_base_src_set_caps | `Result<(), glib::BoolError>` | n/a | Returns TRUE if the caps could be set. |
| BaseSrc.set_caps | subclass | GstBaseSinkClass.set_caps | `Result<(), LoggableError>` | yes | Notify the subclass of new caps. |
| BaseSrc.start | subclass | GstBaseSinkClass.start | `Result<(), ErrorMessage>` | yes | Start processing. Subclasses should open resources and prepare to produce data. Implementation should call gst_base_src_start_complete() when the operation completes, either from the current thread or any other thread that finishes the start operation asynchronously. See § `start` & `stop` below |
| BaseSrc.stop | subclass | GstBaseSinkClass.stop | `Result<(), ErrorMessage>` | yes | Stop processing. Subclasses should use this to close resources. See § `start` & `stop` below |
| BaseSrc.unlock | subclass | GstBaseSinkClass.unlock | `Result<(), ErrorMessage>` | yes | Unlock any pending access to the resource. Subclasses should unblock any blocked function ASAP and call gst_base_sink_wait_preroll(). **Note:** return value is ignored. See comment for `BaseSink.unlock` |
| BaseSrc.unlock_stop | subclass | GstBaseSinkClass.unlock_stop | `Result<(), ErrorMessage>` | yes | Clear the previous unlock request. Subclasses should clear any state they set during GstBaseSinkClass.unlock(), and be ready to continue where they left off after gst_base_sink_wait_preroll(), gst_base_sink_wait() or gst_wait_sink_wait_clock() return or GstBaseSinkClass.render() is called again. **Note:** return value is ignored. See comment for `BaseSink.unlock` |
| | | | | | |
| BaseTransform.sink_event | subclass | BaseTransformClass.sink_event | keep `bool` | yes | Event fct -> bool |
| BaseTransform.src_event | subclass | BaseTransformClass.src_event | keep `bool` | yes | Event fct -> bool |
| BaseTransform.start | subclass | BaseTransformClass.start | `Result<(), ErrorMessage>` | yes | Called when the element starts processing. Allows opening external resources. See § `start` & `stop` below |
| BaseTransform.stop | subclass | BaseTransformClass.stop | `Result<(), ErrorMessage>` | yes | Called when the element stops processing. Allows closing external resources. See § `start` & `stop` below |
| BaseTransform.update_src_caps | auto | gst_base_transform_update_src_caps | `Result<(), glib::BoolError>` | n/a | Returns TRUE if the caps could be sent downstream FALSE otherwise |
Edit: updated with feedback from @slomo.
Edit: update further to https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/issues/175#note_106495 and https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/merge_requests/214.
### `start` & `stop`
In https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/issues/166 and https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/merge_requests/196,
we were considering using `Result<(), ErrorMessage>` as the return type for the `start` and `stop` functions. The idea was to make it mandatory
for the implementer to characterize the error. The binding would take care of tracing the error and when it makes sense it would post the message on the bus.
In the table below, I tried to synthesize the behaviour of the `start` and `stop` function in the classes where they appear:
| Function | Trace when fct returns `FALSE` | Msg posted on the bus | Consequence |
| --------------------- | ---------------------------------- | ----------------------------------------- | ----------------------------------------------------- |
| `Aggregator.start` | ERROR "Subclass failed to start" | None | `xxx_change_state` returns `GST_STATE_CHANGE_FAILURE` |
| `Aggregator.stop` | ERROR "Subclass failed to stop." | None | None (`change_state` returns parent's `ret`) |
| | | | |
| `BaseSink.start` | DEBUG "failed to start" | ERROR CORE STATE_CHANGE "Failed to start" | `xxx_change_state` returns `GST_STATE_CHANGE_FAILURE` |
| `BaseSink.stop` | WARNING "failed to stop" | None | `xxx_change_state` returns `GST_STATE_CHANGE_SUCCESS` |
| | | | |
| `BaseSrc.start` | DEBUG "could not start" | ERROR CORE STATE_CHANGE "Failed to start" | `xxx_activate_mode` returns `FALSE` |
| `BaseSrc.stop` | DEBUG "Failed to stop in XXX mode" | None | `xxx_activate_mode` returns `FALSE` |
| | | | |
| `BaseTransform.start` | None | None | `xxx_activate_mode` returns `FALSE` |
| `BaseTransform.stop` | None | None | `xxx_activate_mode` returns `FALSE` |
Each class has its own way of dealing with the `start` / `stop` failure. `BaseSink.start` & `BaseSrc.start` already post a message on the bus.
Maybe it would be better to let the implementer in charge of the specific tracing / posting on the bus. If we'd adopted this approach, would it still
make sense to use `Result<(), ErrorMessage>`? How about just `Result<(), glib::BoolError>` since `glib::BoolError` embeds the error
building location now?
See reponse from @slomo in https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/issues/175#note_105923 and https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/issues/175#note_106331https://gitlab.freedesktop.org/gstreamer/gstreamer-vaapi/-/issues/130vaapisink doesn't handle window closing properly2019-02-07T11:52:25ZDenisvaapisink doesn't handle window closing properlyvaapisink doesn't handle window closing properly, so there is no way to finalize other elements properly. As the result window closing causes crashes in elements that expects state changing before finalizing.vaapisink doesn't handle window closing properly, so there is no way to finalize other elements properly. As the result window closing causes crashes in elements that expects state changing before finalizing.Víctor Manuel Jáquez LealVíctor Manuel Jáquez Lealhttps://gitlab.freedesktop.org/gstreamer/gstreamer-rs/-/issues/183AudioChannelPosition::to_mask transmutes negative values to u322019-02-07T15:37:29ZJosh MatthewsAudioChannelPosition::to_mask transmutes negative values to u32There are several audio channel position values that are [negative](https://gitlab.freedesktop.org/gstreamer/gstreamer-rs-sys/blob/master/gstreamer-audio-sys/src/lib.rs#L47-50), but [AudioChannelPosition::to_mask](https://gitlab.freedesk...There are several audio channel position values that are [negative](https://gitlab.freedesktop.org/gstreamer/gstreamer-rs-sys/blob/master/gstreamer-audio-sys/src/lib.rs#L47-50), but [AudioChannelPosition::to_mask](https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/blob/master/gstreamer-audio/src/audio_channel_position.rs#L22-27) blindly transmutes the value to a u32 and tries to perform a left shift. Perhaps to_mask should return an Option value and check first?https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/issues/564vpx: Build broken for libvpx 1.8.02019-02-07T18:04:09ZPhilippe Normandvpx: Build broken for libvpx 1.8.0This is happening on macOS with libvpx 1.8.0 installed using HomeBrew:
```
../subprojects/gst-plugins-good/ext/vpx/gstvpxdec.c:65:15: error: use of undeclared identifier 'VP8_DEBUG_TXT_FRAME_INFO'
{C_FLAGS (VP8_DEBUG_TXT_FRAME_INFO),...This is happening on macOS with libvpx 1.8.0 installed using HomeBrew:
```
../subprojects/gst-plugins-good/ext/vpx/gstvpxdec.c:65:15: error: use of undeclared identifier 'VP8_DEBUG_TXT_FRAME_INFO'
{C_FLAGS (VP8_DEBUG_TXT_FRAME_INFO),
^
../subprojects/gst-plugins-good/ext/vpx/gstvpxdec.c:68:15: error: use of undeclared identifier 'VP8_DEBUG_TXT_MBLK_MODES'
{C_FLAGS (VP8_DEBUG_TXT_MBLK_MODES),
^
../subprojects/gst-plugins-good/ext/vpx/gstvpxdec.c:71:15: error: use of undeclared identifier 'VP8_DEBUG_TXT_DC_DIFF'
{C_FLAGS (VP8_DEBUG_TXT_DC_DIFF),
^
../subprojects/gst-plugins-good/ext/vpx/gstvpxdec.c:74:15: error: use of undeclared identifier 'VP8_DEBUG_TXT_RATE_INFO'
{C_FLAGS (VP8_DEBUG_TXT_RATE_INFO),
^
```https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/325jhbuild : Error during phase build of gstreamer: Error running ninja2019-02-10T19:25:54ZBugzilla Migration Userjhbuild : Error during phase build of gstreamer: Error running ninja## Submitted by freeroot
**[Link to original bug (#791019)](https://bugzilla.gnome.org/show_bug.cgi?id=791019)**
## Description
JhBuild stops twice with those lines of errors.
ninja
[103/460] Generating Gst-1.0.gir with a cus...## Submitted by freeroot
**[Link to original bug (#791019)](https://bugzilla.gnome.org/show_bug.cgi?id=791019)**
## Description
JhBuild stops twice with those lines of errors.
ninja
[103/460] Generating Gst-1.0.gir with a custom command.
/usr/include/bits/mathcalls-helper-functions.h:21: syntax error, unexpected identifier, expecting ')' or ',' in 'extern int __fpclassifyf128 (_Float128 __value) __attribute__ ((__nothrow__ , __leaf__))' at '__value'
/usr/include/bits/mathcalls-helper-functions.h:25: syntax error, unexpected identifier, expecting ')' or ',' in 'extern int __signbitf128 (_Float128 __value) __attribute__ ((__nothrow__ , __leaf__))' at '__value'
/usr/include/bits/mathcalls-helper-functions.h:30: syntax error, unexpected identifier, expecting ')' or ',' in 'extern int __isinff128 (_Float128 __value) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));' at '__value'
/usr/include/bits/mathcalls-helper-functions.h:33: syntax error, unexpected identifier, expecting ')' or ',' in 'extern int __finitef128 (_Float128 __value) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));' at '__value'
/usr/include/bits/mathcalls-helper-functions.h:36: syntax error, unexpected identifier, expecting ')' or ',' in 'extern int __isnanf128 (_Float128 __value) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));' at '__value'
/usr/include/bits/mathcalls-helper-functions.h:39: syntax error, unexpected identifier, expecting ')' or ',' in 'extern int __iseqsigf128 (_Float128 __x, _Float128 __y) __attribute__ ((__nothrow__ , __leaf__));' at '__x'
/usr/include/bits/mathcalls-helper-functions.h:42: syntax error, unexpected identifier, expecting ')' or ',' in 'extern int __issignalingf128 (_Float128 __value) __attribute__ ((__nothrow__ , __leaf__))' at '__value'
g-ir-scanner: link: cc -o /home/$$$/.cache/jhbuild/build/gstreamer/tmp-introspect5teaozhm/Gst-1.0 /home/$$$/.cache/jhbuild/build/gstreamer/tmp-introspect5teaozhm/Gst-1.0.o -L. -Wl,-rpath,. -Wl,--no-as-needed -lgstreamer-1.0 -lunwind -lgobject-2.0 -lm -ldl -lgmodule-2.0 -lglib-2.0 -L/home/$$$/.cache/jhbuild/build/gstreamer/gst -Wl,-rpath,/home/$$$/.cache/jhbuild/build/gstreamer/gst -L/home/$$$/jhbuild/install/lib -Wl,-rpath,/home/$$$/jhbuild/install/lib -L/home/$$$/.cache/jhbuild/build/gstreamer/gst -Wl,-rpath,/home/$$$/.cache/jhbuild/build/gstreamer/gst -L/home/$$$/jhbuild/install/lib -lgio-2.0 -lgobject-2.0 -Wl,--export-dynamic -lgmodule-2.0 -pthread -lglib-2.0 -L/home/$$$/jhbuild/install/lib
[132/460] Generating symbol file 'libs/gst/controller/gstcontroller-1.0@sha/libs/gst/controller/libgstcontroller-1.0.so.0.1300.0.sy[134/460] Generating symbol file 'libs/gst/controller/gstcontroller-1.0@sha/libs/gst/controller/libgstcontroller-1.0.so.0.1300.0.sy[138/460] Generating GstBase-1.0.gir with a custom command.
FAILED: libs/gst/base/GstBase-1.0.gir
/home/$$$/jhbuild/install/bin/g-ir-scanner -I/home/$$$/jhbuild/install/include/gobject-introspection-1.0 -I/home/$$$/jhbuild/install/include/glib-2.0 -I/home/$$$/jhbuild/install/lib/glib-2.0/include -pthread --no-libtool --namespace=GstBase --nsversion=1.0 --warn-all --output libs/gst/base/GstBase-1.0.gir '--add-init-section=extern void gst_init(gint*,gchar**);g_setenv("GST_REGISTRY_DISABLE", "yes", TRUE);g_setenv("GST_REGISTRY_1.0", "/no/way/this/exists.reg", TRUE);g_setenv("GST_PLUGIN_PATH_1_0", "", TRUE);g_setenv("GST_PLUGIN_SYSTEM_PATH_1_0", "", TRUE);gst_init(NULL,NULL);' --c-include=gst/base/base.h -I/home/$$$/DONNEES/APPLICATIONS/JhBuild/checkout/gstreamer/libs/gst/base -I/home/$$$/.cache/jhbuild/build/gstreamer/libs/gst/base -I./. -I../../../../DONNEES/APPLICATIONS/JhBuild/checkout/gstreamer/. -I./libs -I../../../../DONNEES/APPLICATIONS/JhBuild/checkout/gstreamer/libs -I./. -I../../../../DONNEES/APPLICATIONS/JhBuild/checkout/gstreamer/. -I./. -I../../../../DONNEES/APPLICATIONS/JhBuild/checkout/gstreamer/. --filelist=/home/$$$/.cache/jhbuild/build/gstreamer/libs/gst/base/gstbase-1.0@sha/GstBase_1.0_gir_filelist --include=GLib-2.0 --include=GObject-2.0 --include=GModule-2.0 --include=Gst-1.0 --symbol-prefix=gst --identifier-prefix=Gst --pkg-export=gstreamer-base-1.0 --cflags-begin -fvisibility=hidden -I./. -I../../../../DONNEES/APPLICATIONS/JhBuild/checkout/gstreamer/. -I./libs -I../../../../DONNEES/APPLICATIONS/JhBuild/checkout/gstreamer/libs -I./gst/parse -I../../../../DONNEES/APPLICATIONS/JhBuild/checkout/gstreamer/gst/parse -I/home/$$$/jhbuild/install/include/glib-2.0 -I/home/$$$/jhbuild/install/lib/glib-2.0/include -pthread --cflags-end -L/home/$$$/.cache/jhbuild/build/gstreamer/libs/gst/base -L/home/$$$/jhbuild/install/lib --extra-library=unwind --extra-library=gobject-2.0 --extra-library=m --extra-library=dl -L/home/$$$/.cache/jhbuild/build/gstreamer/gst --extra-library=gstreamer-1.0 --extra-library=gmodule-2.0 --extra-library=glib-2.0 -pthread --add-include-path=/home/$$$/.cache/jhbuild/build/gstreamer/gst -I./. -I../../../../DONNEES/APPLICATIONS/JhBuild/checkout/gstreamer/. -I./libs -I../../../../DONNEES/APPLICATIONS/JhBuild/checkout/gstreamer/libs -I./gst -I../../../../DONNEES/APPLICATIONS/JhBuild/checkout/gstreamer/gst --add-include-path=./. --add-include-path=../../../../DONNEES/APPLICATIONS/JhBuild/checkout/gstreamer/. --add-include-path=./libs --add-include-path=../../../../DONNEES/APPLICATIONS/JhBuild/checkout/gstreamer/libs --add-include-path=./gst --add-include-path=../../../../DONNEES/APPLICATIONS/JhBuild/checkout/gstreamer/gst -L/home/$$$/.cache/jhbuild/build/gstreamer/libs/gst/base -L/home/$$$/.cache/jhbuild/build/gstreamer/gst --library gstbase-1.0
g-ir-scanner: link: cc -o /home/$$$/.cache/jhbuild/build/gstreamer/tmp-introspect9p723ycg/GstBase-1.0 /home/$$$/.cache/jhbuild/build/gstreamer/tmp-introspect9p723ycg/GstBase-1.0.o -L. -Wl,-rpath,. -Wl,--no-as-needed -lgstbase-1.0 -lunwind -lgobject-2.0 -lm -ldl -lgstreamer-1.0 -lgmodule-2.0 -lglib-2.0 -L/home/$$$/.cache/jhbuild/build/gstreamer/libs/gst/base -Wl,-rpath,/home/$$$/.cache/jhbuild/build/gstreamer/libs/gst/base -L/home/$$$/jhbuild/install/lib -Wl,-rpath,/home/$$$/jhbuild/install/lib -L/home/$$$/.cache/jhbuild/build/gstreamer/gst -Wl,-rpath,/home/$$$/.cache/jhbuild/build/gstreamer/gst -L/home/$$$/.cache/jhbuild/build/gstreamer/libs/gst/base -Wl,-rpath,/home/$$$/.cache/jhbuild/build/gstreamer/libs/gst/base -L/home/$$$/.cache/jhbuild/build/gstreamer/gst -Wl,-rpath,/home/$$$/.cache/jhbuild/build/gstreamer/gst -L/home/$$$/jhbuild/install/lib -lgio-2.0 -lgobject-2.0 -Wl,--export-dynamic -lgmodule-2.0 -pthread -lglib-2.0 -L/home/$$$/jhbuild/install/lib
/home/$$$/.cache/jhbuild/build/gstreamer/libs/gst/base/libgstbase-1.0.so : référence indéfinie vers « gst_buffer_list_calculate_size »
collect2: error: ld a retourné le statut de sortie 1
linking of temporary binary failed: Command '['cc', '-o', '/home/$$$/.cache/jhbuild/build/gstreamer/tmp-introspect9p723ycg/GstBase-1.0', '/home/$$$/.cache/jhbuild/build/gstreamer/tmp-introspect9p723ycg/GstBase-1.0.o', '-L.', '-Wl,-rpath,.', '-Wl,--no-as-needed', '-lgstbase-1.0', '-lunwind', '-lgobject-2.0', '-lm', '-ldl', '-lgstreamer-1.0', '-lgmodule-2.0', '-lglib-2.0', '-L/home/$$$/.cache/jhbuild/build/gstreamer/libs/gst/base', '-Wl,-rpath,/home/$$$/.cache/jhbuild/build/gstreamer/libs/gst/base', '-L/home/$$$/jhbuild/install/lib', '-Wl,-rpath,/home/$$$/jhbuild/install/lib', '-L/home/$$$/.cache/jhbuild/build/gstreamer/gst', '-Wl,-rpath,/home/$$$/.cache/jhbuild/build/gstreamer/gst', '-L/home/$$$/.cache/jhbuild/build/gstreamer/libs/gst/base', '-Wl,-rpath,/home/$$$/.cache/jhbuild/build/gstreamer/libs/gst/base', '-L/home/$$$/.cache/jhbuild/build/gstreamer/gst', '-Wl,-rpath,/home/$$$/.cache/jhbuild/build/gstreamer/gst', '-L/home/$$$/jhbuild/install/lib', '-lgio-2.0', '-lgobject-2.0', '-Wl,--export-dynamic', '-lgmodule-2.0', '-pthread', '-lglib-2.0', '-L/home/$$$/jhbuild/install/lib']' returned non-zero exit status 1.
[139/460] Generating GstController-1.0.gir with a custom command.
g-ir-scanner: link: cc -o /home/$$$/.cache/jhbuild/build/gstreamer/tmp-introspect4a4yq_b1/GstController-1.0 /home/$$$/.cache/jhbuild/build/gstreamer/tmp-introspect4a4yq_b1/GstController-1.0.o -L. -Wl,-rpath,. -Wl,--no-as-needed -lgstcontroller-1.0 -lunwind -lgobject-2.0 -lm -ldl -lgstreamer-1.0 -lgmodule-2.0 -lglib-2.0 -L/home/$$$/.cache/jhbuild/build/gstreamer/libs/gst/controller -Wl,-rpath,/home/$$$/.cache/jhbuild/build/gstreamer/libs/gst/controller -L/home/$$$/jhbuild/install/lib -Wl,-rpath,/home/$$$/jhbuild/install/lib -L/home/$$$/.cache/jhbuild/build/gstreamer/gst -Wl,-rpath,/home/$$$/.cache/jhbuild/build/gstreamer/gst -L/home/$$$/.cache/jhbuild/build/gstreamer/libs/gst/controller -Wl,-rpath,/home/$$$/.cache/jhbuild/build/gstreamer/libs/gst/controller -L/home/$$$/.cache/jhbuild/build/gstreamer/gst -Wl,-rpath,/home/$$$/.cache/jhbuild/build/gstreamer/gst -L/home/$$$/jhbuild/install/lib -lgio-2.0 -lgobject-2.0 -Wl,--export-dynamic -lgmodule-2.0 -pthread -lglib-2.0 -L/home/$$$/jhbuild/install/lib
[140/460] Compiling C object 'libs/gst/check/gstcheck-1.0@sha/gstcheck.c.o'.
ninja: build stopped: subcommand failed.
*** Error during phase build of gstreamer: ########## Error running ninja *** [18/86]