# Intel Media FFMPEG Transcode Container This project hosts a container demonstrating the use of ffmpeg using GPU offload for transcode operations. The Dockerfile itself is constructed from re-usable snippets, located in the templates/ directory, and can be regenerated by running: ```bash scripts/build-dockerfile ``` The above script uses environment substitution to stamp version information within the created Dockerfile. The files used are **SOLUTION**, and **MANIFEST**. # SOLUTION Solution specific definitions: CONTAINER_IMAGE is used as the container tag name OS_DISTRO is used as the base OS distribution. Possible values: ubuntu OS_VERSION is used as the OS version. Possible values: disco, eoan # MANIFEST The version of MANIFEST was hard coded by reading the set of Agama packages on my local disk, sorting, and name-mangling them to be VERSION declarations. For example: libgl1-mesa-glx_19.0.1-agama-109_amd64.deb is changed to: LIBGL1_MESA_GLX_VERSION=19.0.1-agama-109 This allows the Dockerfile templates to then version pin Agama packages: ```Dockerfile RUN apt-get install -y libgl1-mesa-glx=$LIBGL1_MESA_GLX_VERSION ``` The `scripts/build-dockerfile` loads MANIFEST, which defines LIBGL1_MESA_GLX_VERSION. That is then subsituted for the version in the above Dockerfile snippet when being placed into the main Dockerfile. The generic script I ran to generate these names is below, although it doesn't quite work and a few entries were modified by hand. This should be replaced by a tool that is actually querying the .deb packages and building the manifest. ```bash echo "AGAMA_VERSION=109" find /var/www/packages/ -path '*public*' -name '*deb' -printf '%f\n' | sort | uniq | sed -E \ -e s,_,=,g \ -e 's,=all\.deb|\.x86_64\.deb|=amd64\.deb,_VERSION,g' \ -e s,-\([^0-9]\),_\\1,g \ -e 's,^([^=]*),\U\1,' ``` # Tagging If the build succeeds, we want to be able to tag the git project as well as corresponding Docker images with the appropriate Agama tag: ```bash . MANIFEST ; git tag -f agama-${AGAMA_VERSION} ```