# Intel Media FFMPEG Transcode Container This project hosts a container demonstrating the use of ffmpeg using GPU offload for transcode operations. # Using Build the container: ```bash docker build . -t intel-media-ffmpeg ``` Run the container: ```bash docker run \ --rm \ --device=/dev/dri:/dev/dri \ -it \ intel-media-ffmpeg ``` ## Developing 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 which declare the environment variables are in **SOLUTION** and **MANIFEST**. After joining the template/* pieces together, the file **Dockerfile.solution** is then added to the Dockerfile with environment substitution. ## 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_RELEASE is used as the OS version. Possible values: disco, eoan ## MANIFEST The version of MANIFEST is created by the set of Agama packages from the Agama repository and name-mangling them to be a VERSION declaration: For example: libgl1-mesa-glx_19.0.1-agama-109_amd64.deb is changed to: LIBGL1_MESA_GLX_VERSION=19.0.1-agama-109 The script you can use to recreate the OS_RELEASE defined in SOLUTION is: NOTE: This only works on the Ubuntu releases. ```bash AGAMA_VERSION=169 . SOLUTION echo "AGAMA_VERSION=${AGAMA_VERSION}" > MANIFEST wget -q -O - \ https://osgc.jf.intel.com/packages/agama/ubuntu/dists/${OS_RELEASE}/main/binary-amd64/Packages.bz2 | bunzip2 | sed -nE 's/^(Package|Version): (.*)/\2/p' | paste -s -d' \n' | while read package version rest; do package=$(echo $package | sed -E -e s#-#_#g -e 's#(.*)#\U\1#g')_VERSION echo $package=$version done | grep ${AGAMA_VERSION}\$ >> MANIFEST ``` 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. # 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} ```