Build documentation for rust plugins
authorThibault Saunier <tsaunier@igalia.com>
Fri, 26 Aug 2022 12:43:34 +0000 (08:43 -0400)
committerGStreamer Marge Bot <gitlab-merge-bot@gstreamer-foundation.org>
Thu, 15 Sep 2022 20:11:47 +0000 (20:11 +0000)
- Update the docker image we use, starting using the standard one adding
  `gtk4-doc` as required by rust plugins
- Update the plugins_doc_caches as required, some more plugins are built
  with the new image
- Install ninja from pip as the version from F31 is too old
- Avoid buildings all GSreamer plugins when building the doc as it takes
  time and resources for no good reason
- Stop linking to `GInstanceInitFunc` as it is not present in latest GLib
  documentation, leading to warnings in hotdoc.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2954>

.gitlab-ci.yml
ci/docker/fedora/prepare.sh
subprojects/gst-libav/docs/gst_plugins_cache.json
subprojects/gst-plugins-bad/docs/plugins/gst_plugins_cache.json
subprojects/gst-plugins-bad/sys/qsv/plugin.cpp
subprojects/gstreamer/gst/gstelement.c

index 3884505..574a368 100644 (file)
@@ -24,7 +24,7 @@ variables:
   # If you are hacking on them or need a them to rebuild, its enough
   # to change any part of the string of the image you want.
   ###
-  FEDORA_TAG:  '2022-09-02.0'
+  FEDORA_TAG:  '2022-09-14.0'
   INDENT_TAG: '2022-03-07.1'
   WINDOWS_TAG: "2022-09-02.0"
 
@@ -658,25 +658,28 @@ valgrind ges:
 # ---- Integration ----- #
 
 .documentation:
-  image: $FEDORA_DOCS_IMAGE
-  extends:
-    - '.build_ccache_vars'
+  extends: '.build fedora x86_64'
   variables:
     MESON_ARGS: *simple_build
-    MESON_BUILDTYPE_ARGS: "-Ddoc=enabled -Drs=enabled"
+    MESON_BUILDTYPE_ARGS: "-Ddoc=enabled -Drs=enabled -Dgst-docs:fatal_warnings=true"
     # Disable werror for the docs build, we don't need it
     MESON_GST_WERROR: ''
     CI_ARTIFACTS_URL: "${CI_PROJECT_URL}/-/jobs/${CI_JOB_ID}/artifacts/raw/"
   script:
-  # FIXME: should rebuild the image with newer versions!
-  - pip3 install --upgrade hotdoc
-  - pip3 install --upgrade meson
-  - *build
+  - export PATH=/usr/local/cargo/bin/:/usr/local/bin/:$PATH
+  - export RUSTUP_HOME='/usr/local/rustup'
+
+  - ci/scripts/handle-subprojects-cache.py subprojects/
+  - echo $MESON_ARGS
+  - meson build/ $MESON_ARGS
+  - ccache --show-stats
+
   - ./gst-env.py ninja -C build/ plugins_doc_caches
   # Ignore modifications to wrap files made by meson
   - git checkout subprojects/*.wrap
   - ./ci/scripts/check-documentation-diff.py
-  - ./gst-env.py hotdoc run --conf-file=build/subprojects/gst-docs/GStreamer-doc.json --fatal-warnings
+
+  - ./gst-env.py ninja -C build subprojects/gst-docs/GStreamer-doc
   - mv build/subprojects/gst-docs/GStreamer-doc/html documentation/
 
   artifacts:
@@ -694,7 +697,8 @@ documentation:
   stage: integrate
   extends:
     - '.documentation'
-  needs: []
+  needs:
+    - "fedora amd64 docker"
   rules:
     - if: '$CI_PROJECT_NAMESPACE == "gstreamer" && $CI_COMMIT_BRANCH == "main"'
 
@@ -707,7 +711,7 @@ build documentation:
     - '.documentation'
   stage: build
   needs:
-    - "trigger"
+    - "fedora amd64 docker"
   rules:
     # Never run post merge, we have the `documentation` always running for that
     - if: '$CI_PROJECT_NAMESPACE == "gstreamer" && $CI_COMMIT_BRANCH == $GST_UPSTREAM_BRANCH'
index 0ed4cb6..1070d78 100644 (file)
@@ -4,7 +4,7 @@ set -eux
 # We need them to cleanly build our doc.
 sed -i "s/tsflags=nodocs//g" /etc/dnf/dnf.conf
 
-dnf install -y git-core ninja-build dnf-plugins-core python3-pip
+dnf install -y git-core dnf-plugins-core python3-pip
 
 # Configure git for various usage
 git config --global user.email "gstreamer@gstreamer.net"
@@ -41,6 +41,8 @@ dnf install -y \
     glslc \
     gtk3 \
     gtk3-devel \
+    gtk4 \
+    gtk4-devel \
     gtest \
     gtest-devel \
     graphene \
@@ -202,7 +204,10 @@ dnf builddep -y gstreamer1 \
     python3-gstreamer1
 
 dnf remove -y meson
-pip3 install meson==0.60.3 hotdoc python-gitlab
+# FIXME: Install ninja from rpm when we update our base image as we fail building
+# documentation with rust plugins as we the version from F31 we hit:
+# `ninja: error: build.ninja:26557: multiple outputs aren't (yet?) supported by depslog; bring this up on the mailing list if it affects you
+pip3 install meson==0.60.3 hotdoc python-gitlab ninja tomli
 
 
 # Remove gst-devel packages installed by builddep above
@@ -210,13 +215,13 @@ dnf remove -y "gstreamer1*devel"
 
 # FIXME: Why does installing directly with dnf doesn't actually install
 # the documentation files?
-dnf download glib2-doc gdk-pixbuf2-devel*x86_64* gtk3-devel-docs
+dnf download glib2-doc gdk-pixbuf2-devel*x86_64* gtk3-devel-docs gtk4-devel-docs
 rpm -i --reinstall *.rpm
 rm -f *.rpm
 
 # Install Rust
-RUSTUP_VERSION=1.24.3
-RUST_VERSION=1.55.0
+RUSTUP_VERSION=1.25.1
+RUST_VERSION=1.63.0
 RUST_ARCH="x86_64-unknown-linux-gnu"
 
 dnf install -y wget
@@ -233,6 +238,7 @@ chmod +x rustup-init;
 rm rustup-init;
 chmod -R a+w $RUSTUP_HOME $CARGO_HOME
 
+cargo install cargo-c --version 0.9.12+cargo-0.64
 rustup --version
 cargo --version
 rustc --version
index 5b35a0d..1e8438d 100644 (file)
                 "long-name": "libav Avid 1:1 10-bit RGB Packer encoder",
                 "pad-templates": {
                     "sink": {
-                        "caps": "video/x-raw:\n",
+                        "caps": "video/x-raw:\n         format: GBR_10LE\n",
                         "direction": "sink",
                         "presence": "always"
                     },
                         "construct": false,
                         "construct-only": false,
                         "controllable": false,
-                        "default": "128000",
+                        "default": "6300",
                         "max": "2147483647",
                         "min": "0",
                         "mutable": "null",
                 "long-name": "libav Apple ProRes encoder",
                 "pad-templates": {
                     "sink": {
-                        "caps": "video/x-raw:\n         format: { I422_10LE, Y444_10LE }\n",
+                        "caps": "video/x-raw:\n         format: { I422_10LE, Y444_10LE, A444_10LE }\n",
                         "direction": "sink",
                         "presence": "always"
                     },
                 "long-name": "libav Apple ProRes encoder",
                 "pad-templates": {
                     "sink": {
-                        "caps": "video/x-raw:\n         format: { I422_10LE, Y444_10LE }\n",
+                        "caps": "video/x-raw:\n         format: { I422_10LE, Y444_10LE, A444_10LE }\n",
                         "direction": "sink",
                         "presence": "always"
                     },
                 "long-name": "libav AJA Kona 10-bit RGB Codec encoder",
                 "pad-templates": {
                     "sink": {
-                        "caps": "video/x-raw:\n",
+                        "caps": "video/x-raw:\n         format: GBR_10LE\n",
                         "direction": "sink",
                         "presence": "always"
                     },
                 "long-name": "libav Zip Motion Blocks Video encoder",
                 "pad-templates": {
                     "sink": {
-                        "caps": "video/x-raw:\n         format: RGB8P\n",
+                        "caps": "video/x-raw:\n         format: { RGB8P, RGB15, RGB16, BGRx }\n",
                         "direction": "sink",
                         "presence": "always"
                     },
                         "value": "0x00000010"
                     },
                     {
+                        "desc": "Drop frames whose parameters differ from first decoded frame",
+                        "name": "drop_changed",
+                        "value": "0x00000020"
+                    },
+                    {
                         "desc": "use loop filter",
                         "name": "loop",
                         "value": "0x00000800"
index e9a2e34..786addb 100644 (file)
         "tracers": {},
         "url": "Unknown package origin"
     },
+    "qsv": {
+        "description": "Intel Quick Sync Video plugin",
+        "elements": {},
+        "filename": "gstqsv",
+        "license": "LGPL",
+        "other-types": {},
+        "package": "GStreamer Bad Plug-ins",
+        "source": "gst-plugins-bad",
+        "tracers": {},
+        "url": "Unknown package origin"
+    },
     "removesilence": {
         "description": "Removes silence from an audio stream",
         "elements": {
index ad9175b..18211d0 100644 (file)
 #include "config.h"
 #endif
 
+/**
+ * plugin-qsv:
+ *
+ * Since: 1.22
+ */
+
 #include <gst/gst.h>
 #include <mfx.h>
 #include "gstqsvav1enc.h"
index 346ea67..f3d119d 100644 (file)
@@ -1759,9 +1759,9 @@ gst_element_get_metadata (GstElement * element, const gchar * key)
  *
  * Retrieves a list of the pad templates associated with @element_class. The
  * list must not be modified by the calling code.
- * > If you use this function in the #GInstanceInitFunc of an object class
+ * > If you use this function in the GInstanceInitFunc of an object class
  * > that has subclasses, make sure to pass the g_class parameter of the
- * > #GInstanceInitFunc here.
+ * > GInstanceInitFunc here.
  *
  * Returns: (transfer none) (element-type Gst.PadTemplate): the #GList of
  *     pad templates.
@@ -1801,9 +1801,9 @@ gst_element_get_pad_template_list (GstElement * element)
  * @name: the name of the #GstPadTemplate to get.
  *
  * Retrieves a padtemplate from @element_class with the given name.
- * > If you use this function in the #GInstanceInitFunc of an object class
+ * > If you use this function in the GInstanceInitFunc of an object class
  * > that has subclasses, make sure to pass the g_class parameter of the
- * > #GInstanceInitFunc here.
+ * > GInstanceInitFunc here.
  *
  * Returns: (transfer none) (nullable): the #GstPadTemplate with the
  *     given name, or %NULL if none was found. No unreferencing is