├── Makefile ├── README.md ├── docker ├── Dockerfile.aarch64 ├── Dockerfile.amd64 ├── Dockerfile.amd64nvidia ├── Dockerfile.armv7 ├── Dockerfile.base ├── Dockerfile.ffmpeg.aarch64 ├── Dockerfile.ffmpeg.aarch64-jetson ├── Dockerfile.ffmpeg.amd64 ├── Dockerfile.ffmpeg.amd64nvidia ├── Dockerfile.ffmpeg.armv7 ├── Dockerfile.web └── Dockerfile.wheels └── ffmpeg └── nvmpi.patch /Makefile: -------------------------------------------------------------------------------- 1 | default_target: amd64_frigate 2 | 3 | COMMIT_HASH := $(shell git log -1 --pretty=format:"%h"|tail -1) 4 | 5 | version: 6 | echo "VERSION='0.8.4-$(COMMIT_HASH)'" > frigate/version.py 7 | 8 | web: 9 | docker build --tag frigate-web --file docker/Dockerfile.web web/ 10 | 11 | amd64_wheels: 12 | docker build --tag blakeblackshear/frigate-wheels:1.0.3-amd64 --file docker/Dockerfile.wheels . 13 | 14 | amd64_ffmpeg: 15 | docker build --tag blakeblackshear/frigate-ffmpeg:1.1.0-amd64 --file docker/Dockerfile.ffmpeg.amd64 . 16 | 17 | amd64_frigate: version web 18 | docker build --tag frigate-base --build-arg ARCH=amd64 --build-arg FFMPEG_VERSION=1.1.0 --build-arg WHEELS_VERSION=1.0.3 --file docker/Dockerfile.base . 19 | docker build --tag frigate --file docker/Dockerfile.amd64 . 20 | 21 | amd64_all: amd64_wheels amd64_ffmpeg amd64_frigate 22 | 23 | amd64nvidia_wheels: 24 | docker build --tag blakeblackshear/frigate-wheels:1.0.3-amd64nvidia --file docker/Dockerfile.wheels . 25 | 26 | amd64nvidia_ffmpeg: 27 | docker build --tag blakeblackshear/frigate-ffmpeg:1.0.0-amd64nvidia --file docker/Dockerfile.ffmpeg.amd64nvidia . 28 | 29 | amd64nvidia_frigate: version web 30 | docker build --tag frigate-base --build-arg ARCH=amd64nvidia --build-arg FFMPEG_VERSION=1.0.0 --build-arg WHEELS_VERSION=1.0.3 --file docker/Dockerfile.base . 31 | docker build --tag frigate --file docker/Dockerfile.amd64nvidia . 32 | 33 | amd64nvidia_all: amd64nvidia_wheels amd64nvidia_ffmpeg amd64nvidia_frigate 34 | 35 | aarch64_wheels: 36 | docker build --tag blakeblackshear/frigate-wheels:1.0.3-aarch64 --file docker/Dockerfile.wheels . 37 | 38 | jetson_ffmpeg: 39 | docker build --tag blakeblackshear/frigate-ffmpeg:1.0.0-aarch64 --file docker/Dockerfile.ffmpeg.aarch64-jetson . 40 | 41 | jetson_frigate: version web 42 | docker build --tag frigate-base --build-arg ARCH=aarch64 --build-arg FFMPEG_VERSION=1.0.0 --build-arg WHEELS_VERSION=1.0.3 --file docker/Dockerfile.base . 43 | docker build --tag frigate --file docker/Dockerfile.aarch64 . 44 | 45 | aarch64_ffmpeg: 46 | docker build --tag blakeblackshear/frigate-ffmpeg:1.0.0-aarch64 --file docker/Dockerfile.ffmpeg.aarch64 . 47 | 48 | aarch64_frigate: version web 49 | docker build --tag frigate-base --build-arg ARCH=aarch64 --build-arg FFMPEG_VERSION=1.0.0 --build-arg WHEELS_VERSION=1.0.3 --file docker/Dockerfile.base . 50 | docker build --tag frigate --file docker/Dockerfile.aarch64 . 51 | 52 | armv7_all: armv7_wheels armv7_ffmpeg armv7_frigate 53 | 54 | armv7_wheels: 55 | docker build --tag blakeblackshear/frigate-wheels:1.0.3-armv7 --file docker/Dockerfile.wheels . 56 | 57 | armv7_ffmpeg: 58 | docker build --tag blakeblackshear/frigate-ffmpeg:1.0.0-armv7 --file docker/Dockerfile.ffmpeg.armv7 . 59 | 60 | armv7_frigate: version web 61 | docker build --tag frigate-base --build-arg ARCH=armv7 --build-arg FFMPEG_VERSION=1.0.0 --build-arg WHEELS_VERSION=1.0.3 --file docker/Dockerfile.base . 62 | docker build --tag frigate --file docker/Dockerfile.armv7 . 63 | 64 | armv7_all: armv7_wheels armv7_ffmpeg armv7_frigate 65 | 66 | clean: 67 | docker container prune 68 | docker image prune -a 69 | docker volume prune 70 | 71 | .PHONY: web 72 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # jetson-frigate 2 | [Frigate](https://github.com/blakeblackshear/frigate) on [Jetson Nano](https://developer.nvidia.com/embedded/jetson-nano-developer-kit) with ffmpeg 4.1.3 NVMPI patches for encoding/decoding hardware acceleration, docker build files and many more. 3 | 4 | # Install 5 | 6 | ## Enable nvidia container runtime by default 7 | You need use nvidia-container-runtime as explained in docs: "It is also the only way to have GPU access during docker build". 8 | ``` 9 | sudo apt-get install nvidia-container-runtime 10 | ``` 11 | Edit/create the **/etc/docker/daemon.json** with content: 12 | ``` 13 | { 14 | "runtimes": { 15 | "nvidia": { 16 | "path": "/usr/bin/nvidia-container-runtime", 17 | "runtimeArgs": [] 18 | } 19 | }, 20 | "default-runtime": "nvidia" 21 | } 22 | ``` 23 | 24 | Restart docker daemon: 25 | 26 | ``` 27 | sudo systemctl restart docker 28 | ``` 29 | Build your image (now GPU available during build): 30 | ``` 31 | docker build -t my_image_name:latest . 32 | ``` 33 | ## Download frigate 34 | 35 | ``` 36 | git clone https://github.com/blakeblackshear/frigate.git 37 | cd frigate 38 | ``` 39 | 40 | ## Download docker build files and replace them 41 | 42 | ``` 43 | git clone https://github.com/e1z0/jetson-frigate.git 44 | rm -rf docker Makefile 45 | mv jetson-frigate/docker . 46 | mv jetson-frigate/Makefile . 47 | ``` 48 | 49 | ## Build ffmpeg and frigate 50 | 51 | First you need to build ffmpeg with jetson nano support patches 52 | ``` 53 | make jetson_ffmpeg 54 | ``` 55 | 56 | Now you can build frigate itself 57 | ``` 58 | make jetson_frigate 59 | ``` 60 | 61 | After that you will have **frigate:latest** docker image. 62 | 63 | ## Running 64 | ``` 65 | docker run -d \ 66 | --runtime nvidia \ 67 | --gpus all \ 68 | --name frigate \ 69 | --restart unless-stopped \ 70 | --privileged \ 71 | --shm-size=1024m \ 72 | -p 5000:5000 \ 73 | -v /path/to/config:/config:ro \ 74 | -v /etc/localtime:/etc/localtime:ro \ 75 | -v /media/storage:/media/frigate \ 76 | --device /dev/bus/usb:/dev/bus/usb \ 77 | -e FRIGATE_RTSP_PASSWORD='pass' \ 78 | frigate:latest 79 | ``` 80 | 81 | ## TODO 82 | 83 | * Backport support for [yuvj420p](https://github.com/jocover/jetson-ffmpeg/commit/20067187641389ba309bd3ca51933718b6b475ef) 84 | -------------------------------------------------------------------------------- /docker/Dockerfile.aarch64: -------------------------------------------------------------------------------- 1 | FROM frigate-base 2 | LABEL maintainer "blakeb@blakeshome.com" 3 | 4 | ENV DEBIAN_FRONTEND=noninteractive 5 | # Install packages for apt repo 6 | RUN apt-get -qq update \ 7 | && apt-get -qq install --no-install-recommends -y \ 8 | # ffmpeg runtime dependencies 9 | libgomp1 \ 10 | # runtime dependencies 11 | libopenexr24 \ 12 | libgstreamer1.0-0 \ 13 | libgstreamer-plugins-base1.0-0 \ 14 | libopenblas-base \ 15 | libjpeg-turbo8 \ 16 | libpng16-16 \ 17 | libtiff5 \ 18 | libdc1394-22 \ 19 | ## Tensorflow lite 20 | && pip3 install https://github.com/google-coral/pycoral/releases/download/release-frogfish/tflite_runtime-2.5.0-cp38-cp38-linux_aarch64.whl \ 21 | && rm -rf /var/lib/apt/lists/* \ 22 | && (apt-get autoremove -y; apt-get autoclean -y) -------------------------------------------------------------------------------- /docker/Dockerfile.amd64: -------------------------------------------------------------------------------- 1 | FROM frigate-base 2 | LABEL maintainer "blakeb@blakeshome.com" 3 | 4 | # By default, use the i965 driver 5 | ENV LIBVA_DRIVER_NAME=i965 6 | # Install packages for apt repo 7 | RUN apt-get -qq update \ 8 | && apt-get -qq install --no-install-recommends -y \ 9 | # ffmpeg dependencies 10 | libgomp1 \ 11 | # VAAPI drivers for Intel hardware accel 12 | libva-drm2 libva2 libmfx1 i965-va-driver vainfo intel-media-va-driver mesa-va-drivers \ 13 | ## Tensorflow lite 14 | && wget -q https://github.com/google-coral/pycoral/releases/download/release-frogfish/tflite_runtime-2.5.0-cp38-cp38-linux_x86_64.whl \ 15 | && python3.8 -m pip install tflite_runtime-2.5.0-cp38-cp38-linux_x86_64.whl \ 16 | && rm tflite_runtime-2.5.0-cp38-cp38-linux_x86_64.whl \ 17 | && rm -rf /var/lib/apt/lists/* \ 18 | && (apt-get autoremove -y; apt-get autoclean -y) -------------------------------------------------------------------------------- /docker/Dockerfile.amd64nvidia: -------------------------------------------------------------------------------- 1 | FROM frigate-base 2 | LABEL maintainer "blakeb@blakeshome.com" 3 | 4 | # Install packages for apt repo 5 | RUN apt-get -qq update \ 6 | && apt-get -qq install --no-install-recommends -y \ 7 | # ffmpeg dependencies 8 | libgomp1 \ 9 | ## Tensorflow lite 10 | && wget -q https://github.com/google-coral/pycoral/releases/download/release-frogfish/tflite_runtime-2.5.0-cp38-cp38-linux_x86_64.whl \ 11 | && python3.8 -m pip install tflite_runtime-2.5.0-cp38-cp38-linux_x86_64.whl \ 12 | && rm tflite_runtime-2.5.0-cp38-cp38-linux_x86_64.whl \ 13 | && rm -rf /var/lib/apt/lists/* \ 14 | && (apt-get autoremove -y; apt-get autoclean -y) 15 | 16 | 17 | # nvidia layer (see https://gitlab.com/nvidia/container-images/cuda/blob/master/dist/11.1/ubuntu20.04-x86_64/base/Dockerfile) 18 | ENV NVIDIA_DRIVER_CAPABILITIES compute,utility,video 19 | 20 | RUN apt-get update && apt-get install -y --no-install-recommends \ 21 | gnupg2 curl ca-certificates && \ 22 | curl -fsSL https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/7fa2af80.pub | apt-key add - && \ 23 | echo "deb https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64 /" > /etc/apt/sources.list.d/cuda.list && \ 24 | echo "deb https://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu2004/x86_64 /" > /etc/apt/sources.list.d/nvidia-ml.list && \ 25 | apt-get purge --autoremove -y curl \ 26 | && rm -rf /var/lib/apt/lists/* 27 | 28 | ENV CUDA_VERSION 11.1.1 29 | 30 | # For libraries in the cuda-compat-* package: https://docs.nvidia.com/cuda/eula/index.html#attachment-a 31 | RUN apt-get update && apt-get install -y --no-install-recommends \ 32 | cuda-cudart-11-1=11.1.74-1 \ 33 | cuda-compat-11-1 \ 34 | && ln -s cuda-11.1 /usr/local/cuda && \ 35 | rm -rf /var/lib/apt/lists/* 36 | 37 | # Required for nvidia-docker v1 38 | RUN echo "/usr/local/nvidia/lib" >> /etc/ld.so.conf.d/nvidia.conf && \ 39 | echo "/usr/local/nvidia/lib64" >> /etc/ld.so.conf.d/nvidia.conf 40 | 41 | ENV PATH /usr/local/nvidia/bin:/usr/local/cuda/bin:${PATH} 42 | ENV LD_LIBRARY_PATH /usr/local/nvidia/lib:/usr/local/nvidia/lib64 43 | 44 | # nvidia-container-runtime 45 | ENV NVIDIA_VISIBLE_DEVICES all 46 | ENV NVIDIA_DRIVER_CAPABILITIES compute,utility,video 47 | ENV NVIDIA_REQUIRE_CUDA "cuda>=11.1 brand=tesla,driver>=418,driver<419 brand=tesla,driver>=440,driver<441 brand=tesla,driver>=450,driver<451" 48 | -------------------------------------------------------------------------------- /docker/Dockerfile.armv7: -------------------------------------------------------------------------------- 1 | FROM frigate-base 2 | LABEL maintainer "blakeb@blakeshome.com" 3 | 4 | ENV DEBIAN_FRONTEND=noninteractive 5 | # Install packages for apt repo 6 | RUN apt-get -qq update \ 7 | && apt-get -qq install --no-install-recommends -y \ 8 | # ffmpeg runtime dependencies 9 | libgomp1 \ 10 | # runtime dependencies 11 | libopenexr24 \ 12 | libgstreamer1.0-0 \ 13 | libgstreamer-plugins-base1.0-0 \ 14 | libopenblas-base \ 15 | libjpeg-turbo8 \ 16 | libpng16-16 \ 17 | libtiff5 \ 18 | libdc1394-22 \ 19 | libaom0 \ 20 | libx265-179 \ 21 | ## Tensorflow lite 22 | && pip3 install https://github.com/google-coral/pycoral/releases/download/release-frogfish/tflite_runtime-2.5.0-cp38-cp38-linux_armv7l.whl \ 23 | && rm -rf /var/lib/apt/lists/* \ 24 | && (apt-get autoremove -y; apt-get autoclean -y) -------------------------------------------------------------------------------- /docker/Dockerfile.base: -------------------------------------------------------------------------------- 1 | ARG ARCH=aarch64 2 | ARG WHEELS_VERSION 3 | ARG FFMPEG_VERSION 4 | FROM blakeblackshear/frigate-wheels:${WHEELS_VERSION}-${ARCH} as wheels 5 | FROM blakeblackshear/frigate-ffmpeg:${FFMPEG_VERSION}-${ARCH} as ffmpeg 6 | FROM frigate-web as web 7 | 8 | FROM ubuntu:20.04 9 | LABEL maintainer "blakeb@blakeshome.com" 10 | 11 | COPY --from=ffmpeg /usr/local /usr/local/ 12 | 13 | COPY --from=wheels /wheels/. /wheels/ 14 | 15 | ENV FLASK_ENV=development 16 | # ENV FONTCONFIG_PATH=/etc/fonts 17 | ENV DEBIAN_FRONTEND=noninteractive 18 | # Install packages for apt repo 19 | RUN apt-get -qq update \ 20 | && apt-get upgrade -y \ 21 | && apt-get -qq install --no-install-recommends -y \ 22 | gnupg wget unzip tzdata nginx libnginx-mod-rtmp \ 23 | && apt-get -qq install --no-install-recommends -y \ 24 | python3-pip \ 25 | && pip3 install -U /wheels/*.whl \ 26 | && APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=DontWarn apt-key adv --fetch-keys https://packages.cloud.google.com/apt/doc/apt-key.gpg \ 27 | && echo "deb https://packages.cloud.google.com/apt coral-edgetpu-stable main" > /etc/apt/sources.list.d/coral-edgetpu.list \ 28 | && echo "libedgetpu1-max libedgetpu/accepted-eula select true" | debconf-set-selections \ 29 | && apt-get -qq update && apt-get -qq install --no-install-recommends -y \ 30 | libedgetpu1-max=15.0 \ 31 | && rm -rf /var/lib/apt/lists/* /wheels \ 32 | && (apt-get autoremove -y; apt-get autoclean -y) 33 | 34 | RUN pip3 install \ 35 | peewee_migrate \ 36 | zeroconf \ 37 | voluptuous\ 38 | Flask-Sockets \ 39 | gevent \ 40 | gevent-websocket 41 | 42 | COPY nginx/nginx.conf /etc/nginx/nginx.conf 43 | 44 | # get model and labels 45 | COPY labelmap.txt /labelmap.txt 46 | RUN wget -q https://github.com/google-coral/test_data/raw/master/ssdlite_mobiledet_coco_qat_postprocess_edgetpu.tflite -O /edgetpu_model.tflite 47 | RUN wget -q https://github.com/google-coral/test_data/raw/master/ssdlite_mobiledet_coco_qat_postprocess.tflite -O /cpu_model.tflite 48 | 49 | WORKDIR /opt/frigate/ 50 | ADD frigate frigate/ 51 | ADD migrations migrations/ 52 | 53 | COPY --from=web /opt/frigate/build web/ 54 | 55 | COPY run.sh /run.sh 56 | RUN chmod +x /run.sh 57 | 58 | EXPOSE 5000 59 | EXPOSE 1935 60 | 61 | CMD ["/run.sh"] 62 | -------------------------------------------------------------------------------- /docker/Dockerfile.ffmpeg.aarch64: -------------------------------------------------------------------------------- 1 | # inspired by: 2 | # https://github.com/collelog/ffmpeg/blob/master/4.3.1-alpine-rpi4-arm64v8.Dockerfile 3 | # https://github.com/mmastrac/ffmpeg-omx-rpi-docker/blob/master/Dockerfile 4 | # https://github.com/jrottenberg/ffmpeg/pull/158/files 5 | # https://github.com/jrottenberg/ffmpeg/pull/239 6 | FROM ubuntu:20.04 AS base 7 | 8 | WORKDIR /tmp/workdir 9 | 10 | ENV DEBIAN_FRONTEND=noninteractive 11 | RUN apt-get -yqq update && \ 12 | apt-get install -yq --no-install-recommends ca-certificates expat libgomp1 && \ 13 | apt-get autoremove -y && \ 14 | apt-get clean -y 15 | 16 | FROM base as build 17 | 18 | ENV FFMPEG_VERSION=4.3.1 \ 19 | AOM_VERSION=v1.0.0 \ 20 | FDKAAC_VERSION=0.1.5 \ 21 | FREETYPE_VERSION=2.5.5 \ 22 | FRIBIDI_VERSION=0.19.7 \ 23 | KVAZAAR_VERSION=1.2.0 \ 24 | LAME_VERSION=3.100 \ 25 | LIBPTHREAD_STUBS_VERSION=0.4 \ 26 | LIBVIDSTAB_VERSION=1.1.0 \ 27 | LIBXCB_VERSION=1.13.1 \ 28 | XCBPROTO_VERSION=1.13 \ 29 | OGG_VERSION=1.3.2 \ 30 | OPENCOREAMR_VERSION=0.1.5 \ 31 | OPUS_VERSION=1.2 \ 32 | OPENJPEG_VERSION=2.1.2 \ 33 | THEORA_VERSION=1.1.1 \ 34 | VORBIS_VERSION=1.3.5 \ 35 | VPX_VERSION=1.8.0 \ 36 | WEBP_VERSION=1.0.2 \ 37 | X264_VERSION=20170226-2245-stable \ 38 | X265_VERSION=3.1.1 \ 39 | XAU_VERSION=1.0.9 \ 40 | XORG_MACROS_VERSION=1.19.2 \ 41 | XPROTO_VERSION=7.0.31 \ 42 | XVID_VERSION=1.3.4 \ 43 | LIBZMQ_VERSION=4.3.2 \ 44 | SRC=/usr/local 45 | 46 | ARG FREETYPE_SHA256SUM="5d03dd76c2171a7601e9ce10551d52d4471cf92cd205948e60289251daddffa8 freetype-2.5.5.tar.gz" 47 | ARG FRIBIDI_SHA256SUM="3fc96fa9473bd31dcb5500bdf1aa78b337ba13eb8c301e7c28923fea982453a8 0.19.7.tar.gz" 48 | ARG LIBVIDSTAB_SHA256SUM="14d2a053e56edad4f397be0cb3ef8eb1ec3150404ce99a426c4eb641861dc0bb v1.1.0.tar.gz" 49 | ARG OGG_SHA256SUM="e19ee34711d7af328cb26287f4137e70630e7261b17cbe3cd41011d73a654692 libogg-1.3.2.tar.gz" 50 | ARG OPUS_SHA256SUM="77db45a87b51578fbc49555ef1b10926179861d854eb2613207dc79d9ec0a9a9 opus-1.2.tar.gz" 51 | ARG THEORA_SHA256SUM="40952956c47811928d1e7922cda3bc1f427eb75680c3c37249c91e949054916b libtheora-1.1.1.tar.gz" 52 | ARG VORBIS_SHA256SUM="6efbcecdd3e5dfbf090341b485da9d176eb250d893e3eb378c428a2db38301ce libvorbis-1.3.5.tar.gz" 53 | ARG XVID_SHA256SUM="4e9fd62728885855bc5007fe1be58df42e5e274497591fec37249e1052ae316f xvidcore-1.3.4.tar.gz" 54 | ARG LIBZMQ_SHA256SUM="02ecc88466ae38cf2c8d79f09cfd2675ba299a439680b64ade733e26a349edeb v4.3.2.tar.gz" 55 | 56 | 57 | ARG LD_LIBRARY_PATH=/opt/ffmpeg/lib 58 | ARG MAKEFLAGS="-j2" 59 | ARG PKG_CONFIG_PATH="/opt/ffmpeg/share/pkgconfig:/opt/ffmpeg/lib/pkgconfig:/opt/ffmpeg/lib64/pkgconfig" 60 | ARG PREFIX=/opt/ffmpeg 61 | ARG LD_LIBRARY_PATH="/opt/ffmpeg/lib:/opt/ffmpeg/lib64:/usr/lib64:/usr/lib:/lib64:/lib" 62 | 63 | 64 | RUN buildDeps="autoconf \ 65 | automake \ 66 | cmake \ 67 | curl \ 68 | bzip2 \ 69 | libexpat1-dev \ 70 | g++ \ 71 | gcc \ 72 | git \ 73 | gperf \ 74 | libtool \ 75 | make \ 76 | nasm \ 77 | perl \ 78 | pkg-config \ 79 | python \ 80 | libssl-dev \ 81 | yasm \ 82 | linux-headers-raspi2 \ 83 | libomxil-bellagio-dev \ 84 | zlib1g-dev" && \ 85 | apt-get -yqq update && \ 86 | apt-get install -yq --no-install-recommends ${buildDeps} 87 | ## opencore-amr https://sourceforge.net/projects/opencore-amr/ 88 | RUN \ 89 | DIR=/tmp/opencore-amr && \ 90 | mkdir -p ${DIR} && \ 91 | cd ${DIR} && \ 92 | curl -sL https://versaweb.dl.sourceforge.net/project/opencore-amr/opencore-amr/opencore-amr-${OPENCOREAMR_VERSION}.tar.gz | \ 93 | tar -zx --strip-components=1 && \ 94 | ./configure --prefix="${PREFIX}" --enable-shared && \ 95 | make -j $(nproc) && \ 96 | make -j $(nproc) install && \ 97 | rm -rf ${DIR} 98 | ## x264 http://www.videolan.org/developers/x264.html 99 | RUN \ 100 | DIR=/tmp/x264 && \ 101 | mkdir -p ${DIR} && \ 102 | cd ${DIR} && \ 103 | curl -sL https://download.videolan.org/pub/videolan/x264/snapshots/x264-snapshot-${X264_VERSION}.tar.bz2 | \ 104 | tar -jx --strip-components=1 && \ 105 | ./configure --prefix="${PREFIX}" --enable-shared --enable-pic --disable-cli && \ 106 | make -j $(nproc) && \ 107 | make -j $(nproc) install && \ 108 | rm -rf ${DIR} 109 | ### x265 http://x265.org/ 110 | RUN \ 111 | DIR=/tmp/x265 && \ 112 | mkdir -p ${DIR} && \ 113 | cd ${DIR} && \ 114 | curl -sL https://download.videolan.org/pub/videolan/x265/x265_${X265_VERSION}.tar.gz | \ 115 | tar -zx && \ 116 | cd x265_${X265_VERSION}/build/linux && \ 117 | sed -i "/-DEXTRA_LIB/ s/$/ -DCMAKE_INSTALL_PREFIX=\${PREFIX}/" multilib.sh && \ 118 | sed -i "/^cmake/ s/$/ -DENABLE_CLI=OFF/" multilib.sh && \ 119 | export CXXFLAGS="${CXXFLAGS} -fPIC" && \ 120 | ./multilib.sh && \ 121 | make -C 8bit install && \ 122 | rm -rf ${DIR} 123 | ### libogg https://www.xiph.org/ogg/ 124 | RUN \ 125 | DIR=/tmp/ogg && \ 126 | mkdir -p ${DIR} && \ 127 | cd ${DIR} && \ 128 | curl -sLO http://downloads.xiph.org/releases/ogg/libogg-${OGG_VERSION}.tar.gz && \ 129 | echo ${OGG_SHA256SUM} | sha256sum --check && \ 130 | tar -zx --strip-components=1 -f libogg-${OGG_VERSION}.tar.gz && \ 131 | ./configure --prefix="${PREFIX}" --enable-shared && \ 132 | make -j $(nproc) && \ 133 | make -j $(nproc) install && \ 134 | rm -rf ${DIR} 135 | ### libopus https://www.opus-codec.org/ 136 | RUN \ 137 | DIR=/tmp/opus && \ 138 | mkdir -p ${DIR} && \ 139 | cd ${DIR} && \ 140 | curl -sLO https://archive.mozilla.org/pub/opus/opus-${OPUS_VERSION}.tar.gz && \ 141 | echo ${OPUS_SHA256SUM} | sha256sum --check && \ 142 | tar -zx --strip-components=1 -f opus-${OPUS_VERSION}.tar.gz && \ 143 | autoreconf -fiv && \ 144 | ./configure --prefix="${PREFIX}" --enable-shared && \ 145 | make -j $(nproc) && \ 146 | make -j $(nproc) install && \ 147 | rm -rf ${DIR} 148 | ### libvorbis https://xiph.org/vorbis/ 149 | RUN \ 150 | DIR=/tmp/vorbis && \ 151 | mkdir -p ${DIR} && \ 152 | cd ${DIR} && \ 153 | curl -sLO http://downloads.xiph.org/releases/vorbis/libvorbis-${VORBIS_VERSION}.tar.gz && \ 154 | echo ${VORBIS_SHA256SUM} | sha256sum --check && \ 155 | tar -zx --strip-components=1 -f libvorbis-${VORBIS_VERSION}.tar.gz && \ 156 | ./configure --prefix="${PREFIX}" --with-ogg="${PREFIX}" --enable-shared && \ 157 | make -j $(nproc) && \ 158 | make -j $(nproc) install && \ 159 | rm -rf ${DIR} 160 | ### libtheora http://www.theora.org/ 161 | RUN \ 162 | DIR=/tmp/theora && \ 163 | mkdir -p ${DIR} && \ 164 | cd ${DIR} && \ 165 | curl -sLO http://downloads.xiph.org/releases/theora/libtheora-${THEORA_VERSION}.tar.gz && \ 166 | echo ${THEORA_SHA256SUM} | sha256sum --check && \ 167 | tar -zx --strip-components=1 -f libtheora-${THEORA_VERSION}.tar.gz && \ 168 | curl -sL 'http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD' -o config.guess && \ 169 | curl -sL 'http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD' -o config.sub && \ 170 | ./configure --prefix="${PREFIX}" --with-ogg="${PREFIX}" --enable-shared && \ 171 | make -j $(nproc) && \ 172 | make -j $(nproc) install && \ 173 | rm -rf ${DIR} 174 | ### libvpx https://www.webmproject.org/code/ 175 | RUN \ 176 | DIR=/tmp/vpx && \ 177 | mkdir -p ${DIR} && \ 178 | cd ${DIR} && \ 179 | curl -sL https://codeload.github.com/webmproject/libvpx/tar.gz/v${VPX_VERSION} | \ 180 | tar -zx --strip-components=1 && \ 181 | ./configure --prefix="${PREFIX}" --enable-vp8 --enable-vp9 --enable-vp9-highbitdepth --enable-pic --enable-shared \ 182 | --disable-debug --disable-examples --disable-docs --disable-install-bins && \ 183 | make -j $(nproc) && \ 184 | make -j $(nproc) install && \ 185 | rm -rf ${DIR} 186 | ### libwebp https://developers.google.com/speed/webp/ 187 | RUN \ 188 | DIR=/tmp/vebp && \ 189 | mkdir -p ${DIR} && \ 190 | cd ${DIR} && \ 191 | curl -sL https://storage.googleapis.com/downloads.webmproject.org/releases/webp/libwebp-${WEBP_VERSION}.tar.gz | \ 192 | tar -zx --strip-components=1 && \ 193 | ./configure --prefix="${PREFIX}" --enable-shared && \ 194 | make -j $(nproc) && \ 195 | make -j $(nproc) install && \ 196 | rm -rf ${DIR} 197 | ### libmp3lame http://lame.sourceforge.net/ 198 | RUN \ 199 | DIR=/tmp/lame && \ 200 | mkdir -p ${DIR} && \ 201 | cd ${DIR} && \ 202 | curl -sL https://versaweb.dl.sourceforge.net/project/lame/lame/$(echo ${LAME_VERSION} | sed -e 's/[^0-9]*\([0-9]*\)[.]\([0-9]*\)[.]\([0-9]*\)\([0-9A-Za-z-]*\)/\1.\2/')/lame-${LAME_VERSION}.tar.gz | \ 203 | tar -zx --strip-components=1 && \ 204 | ./configure --prefix="${PREFIX}" --bindir="${PREFIX}/bin" --enable-shared --enable-nasm --disable-frontend && \ 205 | make -j $(nproc) && \ 206 | make -j $(nproc) install && \ 207 | rm -rf ${DIR} 208 | ### xvid https://www.xvid.com/ 209 | RUN \ 210 | DIR=/tmp/xvid && \ 211 | mkdir -p ${DIR} && \ 212 | cd ${DIR} && \ 213 | curl -sLO http://downloads.xvid.org/downloads/xvidcore-${XVID_VERSION}.tar.gz && \ 214 | echo ${XVID_SHA256SUM} | sha256sum --check && \ 215 | tar -zx -f xvidcore-${XVID_VERSION}.tar.gz && \ 216 | cd xvidcore/build/generic && \ 217 | ./configure --prefix="${PREFIX}" --bindir="${PREFIX}/bin" && \ 218 | make -j $(nproc) && \ 219 | make -j $(nproc) install && \ 220 | rm -rf ${DIR} 221 | ### fdk-aac https://github.com/mstorsjo/fdk-aac 222 | RUN \ 223 | DIR=/tmp/fdk-aac && \ 224 | mkdir -p ${DIR} && \ 225 | cd ${DIR} && \ 226 | curl -sL https://github.com/mstorsjo/fdk-aac/archive/v${FDKAAC_VERSION}.tar.gz | \ 227 | tar -zx --strip-components=1 && \ 228 | autoreconf -fiv && \ 229 | ./configure --prefix="${PREFIX}" --enable-shared --datadir="${DIR}" && \ 230 | make -j $(nproc) && \ 231 | make -j $(nproc) install && \ 232 | rm -rf ${DIR} 233 | ## openjpeg https://github.com/uclouvain/openjpeg 234 | RUN \ 235 | DIR=/tmp/openjpeg && \ 236 | mkdir -p ${DIR} && \ 237 | cd ${DIR} && \ 238 | curl -sL https://github.com/uclouvain/openjpeg/archive/v${OPENJPEG_VERSION}.tar.gz | \ 239 | tar -zx --strip-components=1 && \ 240 | export CFLAGS="${CFLAGS} -DPNG_ARM_NEON_OPT=0" && \ 241 | cmake -DBUILD_THIRDPARTY:BOOL=ON -DCMAKE_INSTALL_PREFIX="${PREFIX}" . && \ 242 | make -j $(nproc) && \ 243 | make -j $(nproc) install && \ 244 | rm -rf ${DIR} 245 | ## freetype https://www.freetype.org/ 246 | RUN \ 247 | DIR=/tmp/freetype && \ 248 | mkdir -p ${DIR} && \ 249 | cd ${DIR} && \ 250 | curl -sLO https://download.savannah.gnu.org/releases/freetype/freetype-${FREETYPE_VERSION}.tar.gz && \ 251 | echo ${FREETYPE_SHA256SUM} | sha256sum --check && \ 252 | tar -zx --strip-components=1 -f freetype-${FREETYPE_VERSION}.tar.gz && \ 253 | ./configure --prefix="${PREFIX}" --disable-static --enable-shared && \ 254 | make -j $(nproc) && \ 255 | make -j $(nproc) install && \ 256 | rm -rf ${DIR} 257 | ## libvstab https://github.com/georgmartius/vid.stab 258 | RUN \ 259 | DIR=/tmp/vid.stab && \ 260 | mkdir -p ${DIR} && \ 261 | cd ${DIR} && \ 262 | curl -sLO https://github.com/georgmartius/vid.stab/archive/v${LIBVIDSTAB_VERSION}.tar.gz && \ 263 | echo ${LIBVIDSTAB_SHA256SUM} | sha256sum --check && \ 264 | tar -zx --strip-components=1 -f v${LIBVIDSTAB_VERSION}.tar.gz && \ 265 | cmake -DCMAKE_INSTALL_PREFIX="${PREFIX}" . && \ 266 | make -j $(nproc) && \ 267 | make -j $(nproc) install && \ 268 | rm -rf ${DIR} 269 | ## fridibi https://www.fribidi.org/ 270 | RUN \ 271 | DIR=/tmp/fribidi && \ 272 | mkdir -p ${DIR} && \ 273 | cd ${DIR} && \ 274 | curl -sLO https://github.com/fribidi/fribidi/archive/${FRIBIDI_VERSION}.tar.gz && \ 275 | echo ${FRIBIDI_SHA256SUM} | sha256sum --check && \ 276 | tar -zx --strip-components=1 -f ${FRIBIDI_VERSION}.tar.gz && \ 277 | sed -i 's/^SUBDIRS =.*/SUBDIRS=gen.tab charset lib bin/' Makefile.am && \ 278 | ./bootstrap --no-config --auto && \ 279 | ./configure --prefix="${PREFIX}" --disable-static --enable-shared && \ 280 | make -j1 && \ 281 | make -j $(nproc) install && \ 282 | rm -rf ${DIR} 283 | 284 | ## kvazaar https://github.com/ultravideo/kvazaar 285 | RUN \ 286 | DIR=/tmp/kvazaar && \ 287 | mkdir -p ${DIR} && \ 288 | cd ${DIR} && \ 289 | curl -sLO https://github.com/ultravideo/kvazaar/archive/v${KVAZAAR_VERSION}.tar.gz && \ 290 | tar -zx --strip-components=1 -f v${KVAZAAR_VERSION}.tar.gz && \ 291 | ./autogen.sh && \ 292 | ./configure --prefix="${PREFIX}" --disable-static --enable-shared && \ 293 | make -j $(nproc) && \ 294 | make -j $(nproc) install && \ 295 | rm -rf ${DIR} 296 | 297 | RUN \ 298 | DIR=/tmp/aom && \ 299 | git clone --branch ${AOM_VERSION} --depth 1 https://aomedia.googlesource.com/aom ${DIR} ; \ 300 | cd ${DIR} ; \ 301 | rm -rf CMakeCache.txt CMakeFiles ; \ 302 | mkdir -p ./aom_build ; \ 303 | cd ./aom_build ; \ 304 | cmake -DCMAKE_INSTALL_PREFIX="${PREFIX}" -DBUILD_SHARED_LIBS=1 ..; \ 305 | make ; \ 306 | make install ; \ 307 | rm -rf ${DIR} 308 | 309 | ## libxcb (and supporting libraries) for screen capture https://xcb.freedesktop.org/ 310 | RUN \ 311 | DIR=/tmp/xorg-macros && \ 312 | mkdir -p ${DIR} && \ 313 | cd ${DIR} && \ 314 | curl -sLO https://www.x.org/archive//individual/util/util-macros-${XORG_MACROS_VERSION}.tar.gz && \ 315 | tar -zx --strip-components=1 -f util-macros-${XORG_MACROS_VERSION}.tar.gz && \ 316 | ./configure --srcdir=${DIR} --prefix="${PREFIX}" && \ 317 | make -j $(nproc) && \ 318 | make -j $(nproc) install && \ 319 | rm -rf ${DIR} 320 | 321 | RUN \ 322 | DIR=/tmp/xproto && \ 323 | mkdir -p ${DIR} && \ 324 | cd ${DIR} && \ 325 | curl -sLO https://www.x.org/archive/individual/proto/xproto-${XPROTO_VERSION}.tar.gz && \ 326 | tar -zx --strip-components=1 -f xproto-${XPROTO_VERSION}.tar.gz && \ 327 | curl -sL 'http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD' -o config.guess && \ 328 | curl -sL 'http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD' -o config.sub && \ 329 | ./configure --srcdir=${DIR} --prefix="${PREFIX}" && \ 330 | make -j $(nproc) && \ 331 | make -j $(nproc) install && \ 332 | rm -rf ${DIR} 333 | 334 | RUN \ 335 | DIR=/tmp/libXau && \ 336 | mkdir -p ${DIR} && \ 337 | cd ${DIR} && \ 338 | curl -sLO https://www.x.org/archive/individual/lib/libXau-${XAU_VERSION}.tar.gz && \ 339 | tar -zx --strip-components=1 -f libXau-${XAU_VERSION}.tar.gz && \ 340 | ./configure --srcdir=${DIR} --prefix="${PREFIX}" && \ 341 | make -j $(nproc) && \ 342 | make -j $(nproc) install && \ 343 | rm -rf ${DIR} 344 | 345 | RUN \ 346 | DIR=/tmp/libpthread-stubs && \ 347 | mkdir -p ${DIR} && \ 348 | cd ${DIR} && \ 349 | curl -sLO https://xcb.freedesktop.org/dist/libpthread-stubs-${LIBPTHREAD_STUBS_VERSION}.tar.gz && \ 350 | tar -zx --strip-components=1 -f libpthread-stubs-${LIBPTHREAD_STUBS_VERSION}.tar.gz && \ 351 | ./configure --prefix="${PREFIX}" && \ 352 | make -j $(nproc) && \ 353 | make -j $(nproc) install && \ 354 | rm -rf ${DIR} 355 | 356 | RUN \ 357 | DIR=/tmp/libxcb-proto && \ 358 | mkdir -p ${DIR} && \ 359 | cd ${DIR} && \ 360 | curl -sLO https://xcb.freedesktop.org/dist/xcb-proto-${XCBPROTO_VERSION}.tar.gz && \ 361 | tar -zx --strip-components=1 -f xcb-proto-${XCBPROTO_VERSION}.tar.gz && \ 362 | ACLOCAL_PATH="${PREFIX}/share/aclocal" ./autogen.sh && \ 363 | ./configure --prefix="${PREFIX}" && \ 364 | make -j $(nproc) && \ 365 | make -j $(nproc) install && \ 366 | rm -rf ${DIR} 367 | 368 | RUN \ 369 | DIR=/tmp/libxcb && \ 370 | mkdir -p ${DIR} && \ 371 | cd ${DIR} && \ 372 | curl -sLO https://xcb.freedesktop.org/dist/libxcb-${LIBXCB_VERSION}.tar.gz && \ 373 | tar -zx --strip-components=1 -f libxcb-${LIBXCB_VERSION}.tar.gz && \ 374 | ACLOCAL_PATH="${PREFIX}/share/aclocal" ./autogen.sh && \ 375 | ./configure --prefix="${PREFIX}" --disable-static --enable-shared && \ 376 | make -j $(nproc) && \ 377 | make -j $(nproc) install && \ 378 | rm -rf ${DIR} 379 | 380 | ## libzmq https://github.com/zeromq/libzmq/ 381 | RUN \ 382 | DIR=/tmp/libzmq && \ 383 | mkdir -p ${DIR} && \ 384 | cd ${DIR} && \ 385 | curl -sLO https://github.com/zeromq/libzmq/archive/v${LIBZMQ_VERSION}.tar.gz && \ 386 | echo ${LIBZMQ_SHA256SUM} | sha256sum --check && \ 387 | tar -xz --strip-components=1 -f v${LIBZMQ_VERSION}.tar.gz && \ 388 | ./autogen.sh && \ 389 | ./configure --prefix="${PREFIX}" && \ 390 | make -j $(nproc) && \ 391 | make check && \ 392 | make -j $(nproc) install && \ 393 | rm -rf ${DIR} 394 | 395 | ## ffmpeg https://ffmpeg.org/ 396 | RUN \ 397 | DIR=/tmp/ffmpeg && mkdir -p ${DIR} && cd ${DIR} && \ 398 | curl -sLO https://ffmpeg.org/releases/ffmpeg-${FFMPEG_VERSION}.tar.bz2 && \ 399 | tar -jx --strip-components=1 -f ffmpeg-${FFMPEG_VERSION}.tar.bz2 400 | 401 | RUN \ 402 | DIR=/tmp/ffmpeg && mkdir -p ${DIR} && cd ${DIR} && \ 403 | ./configure \ 404 | --disable-debug \ 405 | --disable-doc \ 406 | --disable-ffplay \ 407 | --enable-shared \ 408 | --enable-avresample \ 409 | --enable-libopencore-amrnb \ 410 | --enable-libopencore-amrwb \ 411 | --enable-gpl \ 412 | --enable-libfreetype \ 413 | --enable-libvidstab \ 414 | --enable-libmp3lame \ 415 | --enable-libopus \ 416 | --enable-libtheora \ 417 | --enable-libvorbis \ 418 | --enable-libvpx \ 419 | --enable-libwebp \ 420 | --enable-libxcb \ 421 | --enable-libx265 \ 422 | --enable-libxvid \ 423 | --enable-libx264 \ 424 | --enable-nonfree \ 425 | --enable-openssl \ 426 | --enable-libfdk_aac \ 427 | --enable-postproc \ 428 | --enable-small \ 429 | --enable-version3 \ 430 | --enable-libzmq \ 431 | --extra-libs=-ldl \ 432 | --prefix="${PREFIX}" \ 433 | --enable-libopenjpeg \ 434 | --enable-libkvazaar \ 435 | --enable-libaom \ 436 | --extra-libs=-lpthread \ 437 | # --enable-omx \ 438 | # --enable-omx-rpi \ 439 | # --enable-mmal \ 440 | --enable-v4l2_m2m \ 441 | --enable-neon \ 442 | --extra-cflags="-I${PREFIX}/include" \ 443 | --extra-ldflags="-L${PREFIX}/lib" && \ 444 | make -j $(nproc) && \ 445 | make -j $(nproc) install && \ 446 | make tools/zmqsend && cp tools/zmqsend ${PREFIX}/bin/ && \ 447 | make distclean && \ 448 | hash -r && \ 449 | cd tools && \ 450 | make qt-faststart && cp qt-faststart ${PREFIX}/bin/ 451 | 452 | ## cleanup 453 | RUN \ 454 | ldd ${PREFIX}/bin/ffmpeg | grep opt/ffmpeg | cut -d ' ' -f 3 | xargs -i cp {} /usr/local/lib/ && \ 455 | for lib in /usr/local/lib/*.so.*; do ln -s "${lib##*/}" "${lib%%.so.*}".so; done && \ 456 | cp ${PREFIX}/bin/* /usr/local/bin/ && \ 457 | cp -r ${PREFIX}/share/ffmpeg /usr/local/share/ && \ 458 | LD_LIBRARY_PATH=/usr/local/lib ffmpeg -buildconf && \ 459 | cp -r ${PREFIX}/include/libav* ${PREFIX}/include/libpostproc ${PREFIX}/include/libsw* /usr/local/include && \ 460 | mkdir -p /usr/local/lib/pkgconfig && \ 461 | for pc in ${PREFIX}/lib/pkgconfig/libav*.pc ${PREFIX}/lib/pkgconfig/libpostproc.pc ${PREFIX}/lib/pkgconfig/libsw*.pc; do \ 462 | sed "s:${PREFIX}:/usr/local:g" <"$pc" >/usr/local/lib/pkgconfig/"${pc##*/}"; \ 463 | done 464 | 465 | FROM base AS release 466 | 467 | ENV LD_LIBRARY_PATH=/usr/local/lib:/usr/local/lib64:/usr/lib:/usr/lib64:/lib:/lib64 468 | 469 | CMD ["--help"] 470 | ENTRYPOINT ["ffmpeg"] 471 | 472 | COPY --from=build /usr/local /usr/local/ 473 | 474 | # Run ffmpeg with -c:v h264_v4l2m2m to enable HW accell for decoding on raspberry pi4 64-bit -------------------------------------------------------------------------------- /docker/Dockerfile.ffmpeg.aarch64-jetson: -------------------------------------------------------------------------------- 1 | # inspired by: 2 | # https://github.com/collelog/ffmpeg/blob/master/4.3.1-alpine-rpi4-arm64v8.Dockerfile 3 | # https://github.com/mmastrac/ffmpeg-omx-rpi-docker/blob/master/Dockerfile 4 | # https://github.com/jrottenberg/ffmpeg/pull/158/files 5 | # https://github.com/jrottenberg/ffmpeg/pull/239 6 | FROM balenalib/jetson-nano-ubuntu:latest AS base 7 | 8 | WORKDIR /tmp/workdir 9 | 10 | ENV DEBIAN_FRONTEND=noninteractive 11 | RUN \ 12 | echo '#!/bin/sh\nsu -c "$*"' > /usr/local/bin/sudo && chmod +x /usr/local/bin/sudo && \ 13 | apt-get -yqq update && \ 14 | mkdir -p /opt/nvidia/l4t-packages/ && \ 15 | touch /opt/nvidia/l4t-packages/.nv-l4t-disable-boot-fw-update-in-preinstall && \ 16 | echo "/usr/lib/aarch64-linux-gnu/tegra" > /etc/ld.so.conf.d/aarch64-linux-gnu_GL.conf && ldconfig && \ 17 | apt-get -yqq -o Dpkg::Options::=--force-confdef -o Dpkg::Options::=--force-confnew install \ 18 | --no-install-recommends ca-certificates expat libgomp1 cmake git nvidia-l4t-core nvidia-l4t-jetson-multimedia-api wget && \ 19 | apt-get autoremove -y && \ 20 | apt-get clean -y 21 | 22 | #ENV UDEV=1 23 | 24 | FROM base as build 25 | 26 | ENV FFMPEG_VERSION=4.3.1 \ 27 | AOM_VERSION=v1.0.0 \ 28 | FDKAAC_VERSION=0.1.5 \ 29 | FREETYPE_VERSION=2.5.5 \ 30 | FRIBIDI_VERSION=0.19.7 \ 31 | KVAZAAR_VERSION=1.2.0 \ 32 | LAME_VERSION=3.100 \ 33 | LIBPTHREAD_STUBS_VERSION=0.4 \ 34 | LIBVIDSTAB_VERSION=1.1.0 \ 35 | LIBXCB_VERSION=1.13.1 \ 36 | XCBPROTO_VERSION=1.13 \ 37 | OGG_VERSION=1.3.2 \ 38 | OPENCOREAMR_VERSION=0.1.5 \ 39 | OPUS_VERSION=1.2 \ 40 | OPENJPEG_VERSION=2.1.2 \ 41 | THEORA_VERSION=1.1.1 \ 42 | VORBIS_VERSION=1.3.5 \ 43 | VPX_VERSION=1.8.0 \ 44 | WEBP_VERSION=1.0.2 \ 45 | X264_VERSION=20170226-2245-stable \ 46 | X265_VERSION=3.1.1 \ 47 | XAU_VERSION=1.0.9 \ 48 | XORG_MACROS_VERSION=1.19.2 \ 49 | XPROTO_VERSION=7.0.31 \ 50 | XVID_VERSION=1.3.4 \ 51 | LIBZMQ_VERSION=4.3.2 \ 52 | SRC=/usr/local 53 | 54 | ARG FREETYPE_SHA256SUM="5d03dd76c2171a7601e9ce10551d52d4471cf92cd205948e60289251daddffa8 freetype-2.5.5.tar.gz" 55 | ARG FRIBIDI_SHA256SUM="3fc96fa9473bd31dcb5500bdf1aa78b337ba13eb8c301e7c28923fea982453a8 0.19.7.tar.gz" 56 | ARG LIBVIDSTAB_SHA256SUM="14d2a053e56edad4f397be0cb3ef8eb1ec3150404ce99a426c4eb641861dc0bb v1.1.0.tar.gz" 57 | ARG OGG_SHA256SUM="e19ee34711d7af328cb26287f4137e70630e7261b17cbe3cd41011d73a654692 libogg-1.3.2.tar.gz" 58 | ARG OPUS_SHA256SUM="77db45a87b51578fbc49555ef1b10926179861d854eb2613207dc79d9ec0a9a9 opus-1.2.tar.gz" 59 | ARG THEORA_SHA256SUM="40952956c47811928d1e7922cda3bc1f427eb75680c3c37249c91e949054916b libtheora-1.1.1.tar.gz" 60 | ARG VORBIS_SHA256SUM="6efbcecdd3e5dfbf090341b485da9d176eb250d893e3eb378c428a2db38301ce libvorbis-1.3.5.tar.gz" 61 | ARG XVID_SHA256SUM="4e9fd62728885855bc5007fe1be58df42e5e274497591fec37249e1052ae316f xvidcore-1.3.4.tar.gz" 62 | ARG LIBZMQ_SHA256SUM="02ecc88466ae38cf2c8d79f09cfd2675ba299a439680b64ade733e26a349edeb v4.3.2.tar.gz" 63 | 64 | 65 | ARG LD_LIBRARY_PATH=/opt/ffmpeg/lib 66 | ARG MAKEFLAGS="-j2" 67 | ARG PKG_CONFIG_PATH="/opt/ffmpeg/share/pkgconfig:/opt/ffmpeg/lib/pkgconfig:/opt/ffmpeg/lib64/pkgconfig" 68 | ARG PREFIX=/opt/ffmpeg 69 | ARG LD_LIBRARY_PATH="/opt/ffmpeg/lib:/opt/ffmpeg/lib64:/usr/lib64:/usr/lib:/lib64:/lib" 70 | 71 | 72 | RUN buildDeps="autoconf \ 73 | automake \ 74 | cmake \ 75 | curl \ 76 | bzip2 \ 77 | libexpat1-dev \ 78 | g++ \ 79 | gcc \ 80 | git \ 81 | gperf \ 82 | libtool \ 83 | make \ 84 | nasm \ 85 | perl \ 86 | pkg-config \ 87 | python \ 88 | libssl-dev \ 89 | yasm \ 90 | linux-headers-raspi2 \ 91 | libomxil-bellagio-dev \ 92 | zlib1g-dev" && \ 93 | apt-get -yqq update && \ 94 | apt-get install -yq --no-install-recommends ${buildDeps} 95 | # jetson-ffmpeg 96 | RUN \ 97 | DIR=/tmp/jetson-ffmpeg && \ 98 | mkdir -p ${DIR} && \ 99 | cd ${DIR} && \ 100 | git clone https://github.com/jocover/jetson-ffmpeg.git && \ 101 | cd jetson-ffmpeg && \ 102 | mkdir build && \ 103 | cd build && \ 104 | cmake -DCMAKE_INSTALL_PREFIX:PATH="${PREFIX}" .. && \ 105 | make -j $(nproc) && \ 106 | make -j $(nproc) install && \ 107 | ldconfig && \ 108 | rm -rf ${DIR} 109 | ## opencore-amr https://sourceforge.net/projects/opencore-amr/ 110 | RUN \ 111 | DIR=/tmp/opencore-amr && \ 112 | mkdir -p ${DIR} && \ 113 | cd ${DIR} && \ 114 | curl -sL https://versaweb.dl.sourceforge.net/project/opencore-amr/opencore-amr/opencore-amr-${OPENCOREAMR_VERSION}.tar.gz | \ 115 | tar -zx --strip-components=1 && \ 116 | ./configure --prefix="${PREFIX}" --enable-shared && \ 117 | make -j $(nproc) && \ 118 | make -j $(nproc) install && \ 119 | rm -rf ${DIR} 120 | ## x264 http://www.videolan.org/developers/x264.html 121 | RUN \ 122 | DIR=/tmp/x264 && \ 123 | mkdir -p ${DIR} && \ 124 | cd ${DIR} && \ 125 | curl -sL https://download.videolan.org/pub/videolan/x264/snapshots/x264-snapshot-${X264_VERSION}.tar.bz2 | \ 126 | tar -jx --strip-components=1 && \ 127 | ./configure --prefix="${PREFIX}" --enable-shared --enable-pic --disable-cli && \ 128 | make -j $(nproc) && \ 129 | make -j $(nproc) install && \ 130 | rm -rf ${DIR} 131 | ### x265 http://x265.org/ 132 | RUN \ 133 | DIR=/tmp/x265 && \ 134 | mkdir -p ${DIR} && \ 135 | cd ${DIR} && \ 136 | curl -sL https://download.videolan.org/pub/videolan/x265/x265_${X265_VERSION}.tar.gz | \ 137 | tar -zx && \ 138 | cd x265_${X265_VERSION}/build/linux && \ 139 | sed -i "/-DEXTRA_LIB/ s/$/ -DCMAKE_INSTALL_PREFIX=\${PREFIX}/" multilib.sh && \ 140 | sed -i "/^cmake/ s/$/ -DENABLE_CLI=OFF/" multilib.sh && \ 141 | export CXXFLAGS="${CXXFLAGS} -fPIC" && \ 142 | ./multilib.sh && \ 143 | make -C 8bit install && \ 144 | rm -rf ${DIR} 145 | ### libogg https://www.xiph.org/ogg/ 146 | RUN \ 147 | DIR=/tmp/ogg && \ 148 | mkdir -p ${DIR} && \ 149 | cd ${DIR} && \ 150 | curl -sLO http://downloads.xiph.org/releases/ogg/libogg-${OGG_VERSION}.tar.gz && \ 151 | echo ${OGG_SHA256SUM} | sha256sum --check && \ 152 | tar -zx --strip-components=1 -f libogg-${OGG_VERSION}.tar.gz && \ 153 | ./configure --prefix="${PREFIX}" --enable-shared && \ 154 | make -j $(nproc) && \ 155 | make -j $(nproc) install && \ 156 | rm -rf ${DIR} 157 | ### libopus https://www.opus-codec.org/ 158 | RUN \ 159 | DIR=/tmp/opus && \ 160 | mkdir -p ${DIR} && \ 161 | cd ${DIR} && \ 162 | curl -sLO https://archive.mozilla.org/pub/opus/opus-${OPUS_VERSION}.tar.gz && \ 163 | echo ${OPUS_SHA256SUM} | sha256sum --check && \ 164 | tar -zx --strip-components=1 -f opus-${OPUS_VERSION}.tar.gz && \ 165 | autoreconf -fiv && \ 166 | ./configure --prefix="${PREFIX}" --enable-shared && \ 167 | make -j $(nproc) && \ 168 | make -j $(nproc) install && \ 169 | rm -rf ${DIR} 170 | ### libvorbis https://xiph.org/vorbis/ 171 | RUN \ 172 | DIR=/tmp/vorbis && \ 173 | mkdir -p ${DIR} && \ 174 | cd ${DIR} && \ 175 | curl -sLO http://downloads.xiph.org/releases/vorbis/libvorbis-${VORBIS_VERSION}.tar.gz && \ 176 | echo ${VORBIS_SHA256SUM} | sha256sum --check && \ 177 | tar -zx --strip-components=1 -f libvorbis-${VORBIS_VERSION}.tar.gz && \ 178 | ./configure --prefix="${PREFIX}" --with-ogg="${PREFIX}" --enable-shared && \ 179 | make -j $(nproc) && \ 180 | make -j $(nproc) install && \ 181 | rm -rf ${DIR} 182 | ### libtheora http://www.theora.org/ 183 | RUN \ 184 | DIR=/tmp/theora && \ 185 | mkdir -p ${DIR} && \ 186 | cd ${DIR} && \ 187 | curl -sLO http://downloads.xiph.org/releases/theora/libtheora-${THEORA_VERSION}.tar.gz && \ 188 | echo ${THEORA_SHA256SUM} | sha256sum --check && \ 189 | tar -zx --strip-components=1 -f libtheora-${THEORA_VERSION}.tar.gz && \ 190 | curl -sL 'http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD' -o config.guess && \ 191 | curl -sL 'http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD' -o config.sub && \ 192 | ./configure --prefix="${PREFIX}" --with-ogg="${PREFIX}" --enable-shared && \ 193 | make -j $(nproc) && \ 194 | make -j $(nproc) install && \ 195 | rm -rf ${DIR} 196 | ### libvpx https://www.webmproject.org/code/ 197 | RUN \ 198 | DIR=/tmp/vpx && \ 199 | mkdir -p ${DIR} && \ 200 | cd ${DIR} && \ 201 | curl -sL https://codeload.github.com/webmproject/libvpx/tar.gz/v${VPX_VERSION} | \ 202 | tar -zx --strip-components=1 && \ 203 | ./configure --prefix="${PREFIX}" --enable-vp8 --enable-vp9 --enable-vp9-highbitdepth --enable-pic --enable-shared \ 204 | --disable-debug --disable-examples --disable-docs --disable-install-bins && \ 205 | make -j $(nproc) && \ 206 | make -j $(nproc) install && \ 207 | rm -rf ${DIR} 208 | ### libwebp https://developers.google.com/speed/webp/ 209 | RUN \ 210 | DIR=/tmp/vebp && \ 211 | mkdir -p ${DIR} && \ 212 | cd ${DIR} && \ 213 | curl -sL https://storage.googleapis.com/downloads.webmproject.org/releases/webp/libwebp-${WEBP_VERSION}.tar.gz | \ 214 | tar -zx --strip-components=1 && \ 215 | ./configure --prefix="${PREFIX}" --enable-shared && \ 216 | make -j $(nproc) && \ 217 | make -j $(nproc) install && \ 218 | rm -rf ${DIR} 219 | ### libmp3lame http://lame.sourceforge.net/ 220 | RUN \ 221 | DIR=/tmp/lame && \ 222 | mkdir -p ${DIR} && \ 223 | cd ${DIR} && \ 224 | curl -sL https://versaweb.dl.sourceforge.net/project/lame/lame/$(echo ${LAME_VERSION} | sed -e 's/[^0-9]*\([0-9]*\)[.]\([0-9]*\)[.]\([0-9]*\)\([0-9A-Za-z-]*\)/\1.\2/')/lame-${LAME_VERSION}.tar.gz | \ 225 | tar -zx --strip-components=1 && \ 226 | ./configure --prefix="${PREFIX}" --bindir="${PREFIX}/bin" --enable-shared --enable-nasm --disable-frontend && \ 227 | make -j $(nproc) && \ 228 | make -j $(nproc) install && \ 229 | rm -rf ${DIR} 230 | ### xvid https://www.xvid.com/ 231 | RUN \ 232 | DIR=/tmp/xvid && \ 233 | mkdir -p ${DIR} && \ 234 | cd ${DIR} && \ 235 | curl -sLO http://downloads.xvid.org/downloads/xvidcore-${XVID_VERSION}.tar.gz && \ 236 | echo ${XVID_SHA256SUM} | sha256sum --check && \ 237 | tar -zx -f xvidcore-${XVID_VERSION}.tar.gz && \ 238 | cd xvidcore/build/generic && \ 239 | ./configure --prefix="${PREFIX}" --bindir="${PREFIX}/bin" && \ 240 | make -j $(nproc) && \ 241 | make -j $(nproc) install && \ 242 | rm -rf ${DIR} 243 | ### fdk-aac https://github.com/mstorsjo/fdk-aac 244 | RUN \ 245 | DIR=/tmp/fdk-aac && \ 246 | mkdir -p ${DIR} && \ 247 | cd ${DIR} && \ 248 | curl -sL https://github.com/mstorsjo/fdk-aac/archive/v${FDKAAC_VERSION}.tar.gz | \ 249 | tar -zx --strip-components=1 && \ 250 | autoreconf -fiv && \ 251 | ./configure --prefix="${PREFIX}" --enable-shared --datadir="${DIR}" && \ 252 | make -j $(nproc) && \ 253 | make -j $(nproc) install && \ 254 | rm -rf ${DIR} 255 | ## openjpeg https://github.com/uclouvain/openjpeg 256 | RUN \ 257 | DIR=/tmp/openjpeg && \ 258 | mkdir -p ${DIR} && \ 259 | cd ${DIR} && \ 260 | curl -sL https://github.com/uclouvain/openjpeg/archive/v${OPENJPEG_VERSION}.tar.gz | \ 261 | tar -zx --strip-components=1 && \ 262 | export CFLAGS="${CFLAGS} -DPNG_ARM_NEON_OPT=0" && \ 263 | cmake -DBUILD_THIRDPARTY:BOOL=ON -DCMAKE_INSTALL_PREFIX="${PREFIX}" . && \ 264 | make -j $(nproc) && \ 265 | make -j $(nproc) install && \ 266 | rm -rf ${DIR} 267 | ## freetype https://www.freetype.org/ 268 | RUN \ 269 | DIR=/tmp/freetype && \ 270 | mkdir -p ${DIR} && \ 271 | cd ${DIR} && \ 272 | curl -sLO https://download.savannah.gnu.org/releases/freetype/freetype-${FREETYPE_VERSION}.tar.gz && \ 273 | echo ${FREETYPE_SHA256SUM} | sha256sum --check && \ 274 | tar -zx --strip-components=1 -f freetype-${FREETYPE_VERSION}.tar.gz && \ 275 | ./configure --prefix="${PREFIX}" --disable-static --enable-shared && \ 276 | make -j $(nproc) && \ 277 | make -j $(nproc) install && \ 278 | rm -rf ${DIR} 279 | ## libvstab https://github.com/georgmartius/vid.stab 280 | RUN \ 281 | DIR=/tmp/vid.stab && \ 282 | mkdir -p ${DIR} && \ 283 | cd ${DIR} && \ 284 | curl -sLO https://github.com/georgmartius/vid.stab/archive/v${LIBVIDSTAB_VERSION}.tar.gz && \ 285 | echo ${LIBVIDSTAB_SHA256SUM} | sha256sum --check && \ 286 | tar -zx --strip-components=1 -f v${LIBVIDSTAB_VERSION}.tar.gz && \ 287 | cmake -DCMAKE_INSTALL_PREFIX="${PREFIX}" . && \ 288 | make -j $(nproc) && \ 289 | make -j $(nproc) install && \ 290 | rm -rf ${DIR} 291 | ## fridibi https://www.fribidi.org/ 292 | RUN \ 293 | DIR=/tmp/fribidi && \ 294 | mkdir -p ${DIR} && \ 295 | cd ${DIR} && \ 296 | curl -sLO https://github.com/fribidi/fribidi/archive/${FRIBIDI_VERSION}.tar.gz && \ 297 | echo ${FRIBIDI_SHA256SUM} | sha256sum --check && \ 298 | tar -zx --strip-components=1 -f ${FRIBIDI_VERSION}.tar.gz && \ 299 | sed -i 's/^SUBDIRS =.*/SUBDIRS=gen.tab charset lib bin/' Makefile.am && \ 300 | ./bootstrap --no-config --auto && \ 301 | ./configure --prefix="${PREFIX}" --disable-static --enable-shared && \ 302 | make -j1 && \ 303 | make -j $(nproc) install && \ 304 | rm -rf ${DIR} 305 | 306 | ## kvazaar https://github.com/ultravideo/kvazaar 307 | RUN \ 308 | DIR=/tmp/kvazaar && \ 309 | mkdir -p ${DIR} && \ 310 | cd ${DIR} && \ 311 | curl -sLO https://github.com/ultravideo/kvazaar/archive/v${KVAZAAR_VERSION}.tar.gz && \ 312 | tar -zx --strip-components=1 -f v${KVAZAAR_VERSION}.tar.gz && \ 313 | ./autogen.sh && \ 314 | ./configure --prefix="${PREFIX}" --disable-static --enable-shared && \ 315 | make -j $(nproc) && \ 316 | make -j $(nproc) install && \ 317 | rm -rf ${DIR} 318 | 319 | RUN \ 320 | DIR=/tmp/aom && \ 321 | git clone --branch ${AOM_VERSION} --depth 1 https://aomedia.googlesource.com/aom ${DIR} ; \ 322 | cd ${DIR} ; \ 323 | rm -rf CMakeCache.txt CMakeFiles ; \ 324 | mkdir -p ./aom_build ; \ 325 | cd ./aom_build ; \ 326 | cmake -DCMAKE_INSTALL_PREFIX="${PREFIX}" -DBUILD_SHARED_LIBS=1 ..; \ 327 | make ; \ 328 | make install ; \ 329 | rm -rf ${DIR} 330 | 331 | ## libxcb (and supporting libraries) for screen capture https://xcb.freedesktop.org/ 332 | RUN \ 333 | DIR=/tmp/xorg-macros && \ 334 | mkdir -p ${DIR} && \ 335 | cd ${DIR} && \ 336 | curl -sLO https://www.x.org/archive//individual/util/util-macros-${XORG_MACROS_VERSION}.tar.gz && \ 337 | tar -zx --strip-components=1 -f util-macros-${XORG_MACROS_VERSION}.tar.gz && \ 338 | ./configure --srcdir=${DIR} --prefix="${PREFIX}" && \ 339 | make -j $(nproc) && \ 340 | make -j $(nproc) install && \ 341 | rm -rf ${DIR} 342 | 343 | RUN \ 344 | DIR=/tmp/xproto && \ 345 | mkdir -p ${DIR} && \ 346 | cd ${DIR} && \ 347 | curl -sLO https://www.x.org/archive/individual/proto/xproto-${XPROTO_VERSION}.tar.gz && \ 348 | tar -zx --strip-components=1 -f xproto-${XPROTO_VERSION}.tar.gz && \ 349 | curl -sL 'http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD' -o config.guess && \ 350 | curl -sL 'http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD' -o config.sub && \ 351 | ./configure --srcdir=${DIR} --prefix="${PREFIX}" && \ 352 | make -j $(nproc) && \ 353 | make -j $(nproc) install && \ 354 | rm -rf ${DIR} 355 | 356 | RUN \ 357 | DIR=/tmp/libXau && \ 358 | mkdir -p ${DIR} && \ 359 | cd ${DIR} && \ 360 | curl -sLO https://www.x.org/archive/individual/lib/libXau-${XAU_VERSION}.tar.gz && \ 361 | tar -zx --strip-components=1 -f libXau-${XAU_VERSION}.tar.gz && \ 362 | ./configure --srcdir=${DIR} --prefix="${PREFIX}" && \ 363 | make -j $(nproc) && \ 364 | make -j $(nproc) install && \ 365 | rm -rf ${DIR} 366 | 367 | RUN \ 368 | DIR=/tmp/libpthread-stubs && \ 369 | mkdir -p ${DIR} && \ 370 | cd ${DIR} && \ 371 | curl -sLO https://xcb.freedesktop.org/dist/libpthread-stubs-${LIBPTHREAD_STUBS_VERSION}.tar.gz && \ 372 | tar -zx --strip-components=1 -f libpthread-stubs-${LIBPTHREAD_STUBS_VERSION}.tar.gz && \ 373 | ./configure --prefix="${PREFIX}" && \ 374 | make -j $(nproc) && \ 375 | make -j $(nproc) install && \ 376 | rm -rf ${DIR} 377 | 378 | RUN \ 379 | DIR=/tmp/libxcb-proto && \ 380 | mkdir -p ${DIR} && \ 381 | cd ${DIR} && \ 382 | curl -sLO https://xcb.freedesktop.org/dist/xcb-proto-${XCBPROTO_VERSION}.tar.gz && \ 383 | tar -zx --strip-components=1 -f xcb-proto-${XCBPROTO_VERSION}.tar.gz && \ 384 | ACLOCAL_PATH="${PREFIX}/share/aclocal" ./autogen.sh && \ 385 | ./configure --prefix="${PREFIX}" && \ 386 | make -j $(nproc) && \ 387 | make -j $(nproc) install && \ 388 | rm -rf ${DIR} 389 | 390 | RUN \ 391 | DIR=/tmp/libxcb && \ 392 | mkdir -p ${DIR} && \ 393 | cd ${DIR} && \ 394 | curl -sLO https://xcb.freedesktop.org/dist/libxcb-${LIBXCB_VERSION}.tar.gz && \ 395 | tar -zx --strip-components=1 -f libxcb-${LIBXCB_VERSION}.tar.gz && \ 396 | ACLOCAL_PATH="${PREFIX}/share/aclocal" ./autogen.sh && \ 397 | ./configure --prefix="${PREFIX}" --disable-static --enable-shared && \ 398 | make -j $(nproc) && \ 399 | make -j $(nproc) install && \ 400 | rm -rf ${DIR} 401 | 402 | ## libzmq https://github.com/zeromq/libzmq/ 403 | RUN \ 404 | DIR=/tmp/libzmq && \ 405 | mkdir -p ${DIR} && \ 406 | cd ${DIR} && \ 407 | curl -sLO https://github.com/zeromq/libzmq/archive/v${LIBZMQ_VERSION}.tar.gz && \ 408 | echo ${LIBZMQ_SHA256SUM} | sha256sum --check && \ 409 | tar -xz --strip-components=1 -f v${LIBZMQ_VERSION}.tar.gz && \ 410 | ./autogen.sh && \ 411 | ./configure --prefix="${PREFIX}" && \ 412 | make -j $(nproc) && \ 413 | make check && \ 414 | make -j $(nproc) install && \ 415 | rm -rf ${DIR} 416 | 417 | ## ffmpeg https://ffmpeg.org/ 418 | RUN \ 419 | DIR=/tmp/ffmpeg && mkdir -p ${DIR} && cd ${DIR} && \ 420 | curl -sLO https://ffmpeg.org/releases/ffmpeg-${FFMPEG_VERSION}.tar.bz2 && \ 421 | tar -jx --strip-components=1 -f ffmpeg-${FFMPEG_VERSION}.tar.bz2 422 | 423 | RUN \ 424 | DIR=/tmp/ffmpeg && mkdir -p ${DIR} && cd ${DIR} && \ 425 | wget -q https://raw.githubusercontent.com/e1z0/jetson-frigate/main/ffmpeg/nvmpi.patch && \ 426 | patch -p1 < nvmpi.patch && \ 427 | # echo "/usr/lib/aarch64-linux-gnu/tegra" > /etc/ld.so.conf.d/aarch64-linux-gnu_GL.conf && ldconfig && \ 428 | ./configure \ 429 | --enable-nvmpi \ 430 | --disable-debug \ 431 | --disable-doc \ 432 | --disable-ffplay \ 433 | --enable-shared \ 434 | --enable-avresample \ 435 | --enable-libopencore-amrnb \ 436 | --enable-libopencore-amrwb \ 437 | --enable-gpl \ 438 | --enable-libfreetype \ 439 | --enable-libvidstab \ 440 | --enable-libmp3lame \ 441 | --enable-libopus \ 442 | --enable-libtheora \ 443 | --enable-libvorbis \ 444 | --enable-libvpx \ 445 | --enable-libwebp \ 446 | --enable-libxcb \ 447 | --enable-libx265 \ 448 | --enable-libxvid \ 449 | --enable-libx264 \ 450 | --enable-nonfree \ 451 | --enable-openssl \ 452 | --enable-libfdk_aac \ 453 | --enable-postproc \ 454 | --enable-small \ 455 | --enable-version3 \ 456 | --enable-libzmq \ 457 | --extra-libs=-ldl \ 458 | --prefix="${PREFIX}" \ 459 | --enable-libopenjpeg \ 460 | --enable-libkvazaar \ 461 | --enable-libaom \ 462 | --extra-libs=-lpthread \ 463 | # --enable-omx \ 464 | # --enable-omx-rpi \ 465 | # --enable-mmal \ 466 | --enable-v4l2_m2m \ 467 | --enable-neon \ 468 | --extra-cflags="-I${PREFIX}/include" \ 469 | --extra-ldflags="-L${PREFIX}/lib" && \ 470 | make -j $(nproc) && \ 471 | make -j $(nproc) install && \ 472 | make tools/zmqsend && cp tools/zmqsend ${PREFIX}/bin/ && \ 473 | make distclean && \ 474 | hash -r && \ 475 | cd tools && \ 476 | make qt-faststart && cp qt-faststart ${PREFIX}/bin/ 477 | 478 | ## cleanup 479 | RUN \ 480 | cp -rv /opt/ffmpeg/lib/* /usr/local/lib/ && \ 481 | cp ${PREFIX}/bin/* /usr/local/bin/ && \ 482 | cp -r ${PREFIX}/share/ffmpeg /usr/local/share/ && ls /usr/local/lib && \ 483 | ldd /usr/local/bin/ffmpeg && \ 484 | # LD_LIBRARY_PATH=/usr/local/lib ffmpeg -buildconf && \ 485 | cp -r ${PREFIX}/include/libav* ${PREFIX}/include/libpostproc ${PREFIX}/include/libsw* /usr/local/include && \ 486 | mkdir -p /usr/local/lib/pkgconfig && \ 487 | for pc in ${PREFIX}/lib/pkgconfig/libav*.pc ${PREFIX}/lib/pkgconfig/libpostproc.pc ${PREFIX}/lib/pkgconfig/libsw*.pc; do \ 488 | sed "s:${PREFIX}:/usr/local:g" <"$pc" >/usr/local/lib/pkgconfig/"${pc##*/}"; \ 489 | done 490 | 491 | FROM base AS release 492 | 493 | ENV LD_LIBRARY_PATH=/usr/local/lib:/usr/local/lib64:/usr/lib:/usr/lib64:/lib:/lib64 494 | 495 | CMD ["--help"] 496 | ENTRYPOINT ["ffmpeg"] 497 | 498 | COPY --from=build /usr/local /usr/local/ 499 | 500 | # Run ffmpeg with -c:v h264_nvmpi to enable HW accell for decoding on Jetson Nano 501 | -------------------------------------------------------------------------------- /docker/Dockerfile.ffmpeg.amd64: -------------------------------------------------------------------------------- 1 | # inspired by: 2 | # https://github.com/collelog/ffmpeg/blob/master/4.3.1-alpine-rpi4-arm64v8.Dockerfile 3 | # https://github.com/jrottenberg/ffmpeg/pull/158/files 4 | # https://github.com/jrottenberg/ffmpeg/pull/239 5 | FROM ubuntu:20.04 AS base 6 | 7 | WORKDIR /tmp/workdir 8 | 9 | ENV DEBIAN_FRONTEND=noninteractive 10 | RUN apt-get -yqq update && \ 11 | apt-get install -yq --no-install-recommends ca-certificates expat libgomp1 && \ 12 | apt-get autoremove -y && \ 13 | apt-get clean -y 14 | 15 | FROM base as build 16 | 17 | ENV FFMPEG_VERSION=4.3.1 \ 18 | AOM_VERSION=v1.0.0 \ 19 | FDKAAC_VERSION=0.1.5 \ 20 | FREETYPE_VERSION=2.5.5 \ 21 | FRIBIDI_VERSION=0.19.7 \ 22 | KVAZAAR_VERSION=1.2.0 \ 23 | LAME_VERSION=3.100 \ 24 | LIBPTHREAD_STUBS_VERSION=0.4 \ 25 | LIBVIDSTAB_VERSION=1.1.0 \ 26 | LIBXCB_VERSION=1.13.1 \ 27 | XCBPROTO_VERSION=1.13 \ 28 | OGG_VERSION=1.3.2 \ 29 | OPENCOREAMR_VERSION=0.1.5 \ 30 | OPUS_VERSION=1.2 \ 31 | OPENJPEG_VERSION=2.1.2 \ 32 | THEORA_VERSION=1.1.1 \ 33 | VORBIS_VERSION=1.3.5 \ 34 | VPX_VERSION=1.8.0 \ 35 | WEBP_VERSION=1.0.2 \ 36 | X264_VERSION=20170226-2245-stable \ 37 | X265_VERSION=3.1.1 \ 38 | XAU_VERSION=1.0.9 \ 39 | XORG_MACROS_VERSION=1.19.2 \ 40 | XPROTO_VERSION=7.0.31 \ 41 | XVID_VERSION=1.3.4 \ 42 | LIBZMQ_VERSION=4.3.2 \ 43 | SRC=/usr/local 44 | 45 | ARG FREETYPE_SHA256SUM="5d03dd76c2171a7601e9ce10551d52d4471cf92cd205948e60289251daddffa8 freetype-2.5.5.tar.gz" 46 | ARG FRIBIDI_SHA256SUM="3fc96fa9473bd31dcb5500bdf1aa78b337ba13eb8c301e7c28923fea982453a8 0.19.7.tar.gz" 47 | ARG LIBVIDSTAB_SHA256SUM="14d2a053e56edad4f397be0cb3ef8eb1ec3150404ce99a426c4eb641861dc0bb v1.1.0.tar.gz" 48 | ARG OGG_SHA256SUM="e19ee34711d7af328cb26287f4137e70630e7261b17cbe3cd41011d73a654692 libogg-1.3.2.tar.gz" 49 | ARG OPUS_SHA256SUM="77db45a87b51578fbc49555ef1b10926179861d854eb2613207dc79d9ec0a9a9 opus-1.2.tar.gz" 50 | ARG THEORA_SHA256SUM="40952956c47811928d1e7922cda3bc1f427eb75680c3c37249c91e949054916b libtheora-1.1.1.tar.gz" 51 | ARG VORBIS_SHA256SUM="6efbcecdd3e5dfbf090341b485da9d176eb250d893e3eb378c428a2db38301ce libvorbis-1.3.5.tar.gz" 52 | ARG XVID_SHA256SUM="4e9fd62728885855bc5007fe1be58df42e5e274497591fec37249e1052ae316f xvidcore-1.3.4.tar.gz" 53 | ARG LIBZMQ_SHA256SUM="02ecc88466ae38cf2c8d79f09cfd2675ba299a439680b64ade733e26a349edeb v4.3.2.tar.gz" 54 | 55 | 56 | ARG LD_LIBRARY_PATH=/opt/ffmpeg/lib 57 | ARG MAKEFLAGS="-j2" 58 | ARG PKG_CONFIG_PATH="/opt/ffmpeg/share/pkgconfig:/opt/ffmpeg/lib/pkgconfig:/opt/ffmpeg/lib64/pkgconfig" 59 | ARG PREFIX=/opt/ffmpeg 60 | ARG LD_LIBRARY_PATH="/opt/ffmpeg/lib:/opt/ffmpeg/lib64:/usr/lib64:/usr/lib:/lib64:/lib" 61 | 62 | 63 | RUN buildDeps="autoconf \ 64 | automake \ 65 | cmake \ 66 | curl \ 67 | bzip2 \ 68 | libexpat1-dev \ 69 | g++ \ 70 | gcc \ 71 | git \ 72 | gperf \ 73 | libtool \ 74 | make \ 75 | nasm \ 76 | perl \ 77 | pkg-config \ 78 | python \ 79 | libssl-dev \ 80 | yasm \ 81 | libva-dev \ 82 | libmfx-dev \ 83 | zlib1g-dev" && \ 84 | apt-get -yqq update && \ 85 | apt-get install -yq --no-install-recommends ${buildDeps} 86 | ## opencore-amr https://sourceforge.net/projects/opencore-amr/ 87 | RUN \ 88 | DIR=/tmp/opencore-amr && \ 89 | mkdir -p ${DIR} && \ 90 | cd ${DIR} && \ 91 | curl -sL https://versaweb.dl.sourceforge.net/project/opencore-amr/opencore-amr/opencore-amr-${OPENCOREAMR_VERSION}.tar.gz | \ 92 | tar -zx --strip-components=1 && \ 93 | ./configure --prefix="${PREFIX}" --enable-shared && \ 94 | make && \ 95 | make install && \ 96 | rm -rf ${DIR} 97 | ## x264 http://www.videolan.org/developers/x264.html 98 | RUN \ 99 | DIR=/tmp/x264 && \ 100 | mkdir -p ${DIR} && \ 101 | cd ${DIR} && \ 102 | curl -sL https://download.videolan.org/pub/videolan/x264/snapshots/x264-snapshot-${X264_VERSION}.tar.bz2 | \ 103 | tar -jx --strip-components=1 && \ 104 | ./configure --prefix="${PREFIX}" --enable-shared --enable-pic --disable-cli && \ 105 | make && \ 106 | make install && \ 107 | rm -rf ${DIR} 108 | ### x265 http://x265.org/ 109 | RUN \ 110 | DIR=/tmp/x265 && \ 111 | mkdir -p ${DIR} && \ 112 | cd ${DIR} && \ 113 | curl -sL https://download.videolan.org/pub/videolan/x265/x265_${X265_VERSION}.tar.gz | \ 114 | tar -zx && \ 115 | cd x265_${X265_VERSION}/build/linux && \ 116 | sed -i "/-DEXTRA_LIB/ s/$/ -DCMAKE_INSTALL_PREFIX=\${PREFIX}/" multilib.sh && \ 117 | sed -i "/^cmake/ s/$/ -DENABLE_CLI=OFF/" multilib.sh && \ 118 | ./multilib.sh && \ 119 | make -C 8bit install && \ 120 | rm -rf ${DIR} 121 | ### libogg https://www.xiph.org/ogg/ 122 | RUN \ 123 | DIR=/tmp/ogg && \ 124 | mkdir -p ${DIR} && \ 125 | cd ${DIR} && \ 126 | curl -sLO http://downloads.xiph.org/releases/ogg/libogg-${OGG_VERSION}.tar.gz && \ 127 | echo ${OGG_SHA256SUM} | sha256sum --check && \ 128 | tar -zx --strip-components=1 -f libogg-${OGG_VERSION}.tar.gz && \ 129 | ./configure --prefix="${PREFIX}" --enable-shared && \ 130 | make && \ 131 | make install && \ 132 | rm -rf ${DIR} 133 | ### libopus https://www.opus-codec.org/ 134 | RUN \ 135 | DIR=/tmp/opus && \ 136 | mkdir -p ${DIR} && \ 137 | cd ${DIR} && \ 138 | curl -sLO https://archive.mozilla.org/pub/opus/opus-${OPUS_VERSION}.tar.gz && \ 139 | echo ${OPUS_SHA256SUM} | sha256sum --check && \ 140 | tar -zx --strip-components=1 -f opus-${OPUS_VERSION}.tar.gz && \ 141 | autoreconf -fiv && \ 142 | ./configure --prefix="${PREFIX}" --enable-shared && \ 143 | make && \ 144 | make install && \ 145 | rm -rf ${DIR} 146 | ### libvorbis https://xiph.org/vorbis/ 147 | RUN \ 148 | DIR=/tmp/vorbis && \ 149 | mkdir -p ${DIR} && \ 150 | cd ${DIR} && \ 151 | curl -sLO http://downloads.xiph.org/releases/vorbis/libvorbis-${VORBIS_VERSION}.tar.gz && \ 152 | echo ${VORBIS_SHA256SUM} | sha256sum --check && \ 153 | tar -zx --strip-components=1 -f libvorbis-${VORBIS_VERSION}.tar.gz && \ 154 | ./configure --prefix="${PREFIX}" --with-ogg="${PREFIX}" --enable-shared && \ 155 | make && \ 156 | make install && \ 157 | rm -rf ${DIR} 158 | ### libtheora http://www.theora.org/ 159 | RUN \ 160 | DIR=/tmp/theora && \ 161 | mkdir -p ${DIR} && \ 162 | cd ${DIR} && \ 163 | curl -sLO http://downloads.xiph.org/releases/theora/libtheora-${THEORA_VERSION}.tar.gz && \ 164 | echo ${THEORA_SHA256SUM} | sha256sum --check && \ 165 | tar -zx --strip-components=1 -f libtheora-${THEORA_VERSION}.tar.gz && \ 166 | ./configure --prefix="${PREFIX}" --with-ogg="${PREFIX}" --enable-shared && \ 167 | make && \ 168 | make install && \ 169 | rm -rf ${DIR} 170 | ### libvpx https://www.webmproject.org/code/ 171 | RUN \ 172 | DIR=/tmp/vpx && \ 173 | mkdir -p ${DIR} && \ 174 | cd ${DIR} && \ 175 | curl -sL https://codeload.github.com/webmproject/libvpx/tar.gz/v${VPX_VERSION} | \ 176 | tar -zx --strip-components=1 && \ 177 | ./configure --prefix="${PREFIX}" --enable-vp8 --enable-vp9 --enable-vp9-highbitdepth --enable-pic --enable-shared \ 178 | --disable-debug --disable-examples --disable-docs --disable-install-bins && \ 179 | make && \ 180 | make install && \ 181 | rm -rf ${DIR} 182 | ### libwebp https://developers.google.com/speed/webp/ 183 | RUN \ 184 | DIR=/tmp/vebp && \ 185 | mkdir -p ${DIR} && \ 186 | cd ${DIR} && \ 187 | curl -sL https://storage.googleapis.com/downloads.webmproject.org/releases/webp/libwebp-${WEBP_VERSION}.tar.gz | \ 188 | tar -zx --strip-components=1 && \ 189 | ./configure --prefix="${PREFIX}" --enable-shared && \ 190 | make && \ 191 | make install && \ 192 | rm -rf ${DIR} 193 | ### libmp3lame http://lame.sourceforge.net/ 194 | RUN \ 195 | DIR=/tmp/lame && \ 196 | mkdir -p ${DIR} && \ 197 | cd ${DIR} && \ 198 | curl -sL https://versaweb.dl.sourceforge.net/project/lame/lame/$(echo ${LAME_VERSION} | sed -e 's/[^0-9]*\([0-9]*\)[.]\([0-9]*\)[.]\([0-9]*\)\([0-9A-Za-z-]*\)/\1.\2/')/lame-${LAME_VERSION}.tar.gz | \ 199 | tar -zx --strip-components=1 && \ 200 | ./configure --prefix="${PREFIX}" --bindir="${PREFIX}/bin" --enable-shared --enable-nasm --disable-frontend && \ 201 | make && \ 202 | make install && \ 203 | rm -rf ${DIR} 204 | ### xvid https://www.xvid.com/ 205 | RUN \ 206 | DIR=/tmp/xvid && \ 207 | mkdir -p ${DIR} && \ 208 | cd ${DIR} && \ 209 | curl -sLO http://downloads.xvid.org/downloads/xvidcore-${XVID_VERSION}.tar.gz && \ 210 | echo ${XVID_SHA256SUM} | sha256sum --check && \ 211 | tar -zx -f xvidcore-${XVID_VERSION}.tar.gz && \ 212 | cd xvidcore/build/generic && \ 213 | ./configure --prefix="${PREFIX}" --bindir="${PREFIX}/bin" && \ 214 | make && \ 215 | make install && \ 216 | rm -rf ${DIR} 217 | ### fdk-aac https://github.com/mstorsjo/fdk-aac 218 | RUN \ 219 | DIR=/tmp/fdk-aac && \ 220 | mkdir -p ${DIR} && \ 221 | cd ${DIR} && \ 222 | curl -sL https://github.com/mstorsjo/fdk-aac/archive/v${FDKAAC_VERSION}.tar.gz | \ 223 | tar -zx --strip-components=1 && \ 224 | autoreconf -fiv && \ 225 | ./configure --prefix="${PREFIX}" --enable-shared --datadir="${DIR}" && \ 226 | make && \ 227 | make install && \ 228 | rm -rf ${DIR} 229 | ## openjpeg https://github.com/uclouvain/openjpeg 230 | RUN \ 231 | DIR=/tmp/openjpeg && \ 232 | mkdir -p ${DIR} && \ 233 | cd ${DIR} && \ 234 | curl -sL https://github.com/uclouvain/openjpeg/archive/v${OPENJPEG_VERSION}.tar.gz | \ 235 | tar -zx --strip-components=1 && \ 236 | cmake -DBUILD_THIRDPARTY:BOOL=ON -DCMAKE_INSTALL_PREFIX="${PREFIX}" . && \ 237 | make && \ 238 | make install && \ 239 | rm -rf ${DIR} 240 | ## freetype https://www.freetype.org/ 241 | RUN \ 242 | DIR=/tmp/freetype && \ 243 | mkdir -p ${DIR} && \ 244 | cd ${DIR} && \ 245 | curl -sLO https://download.savannah.gnu.org/releases/freetype/freetype-${FREETYPE_VERSION}.tar.gz && \ 246 | echo ${FREETYPE_SHA256SUM} | sha256sum --check && \ 247 | tar -zx --strip-components=1 -f freetype-${FREETYPE_VERSION}.tar.gz && \ 248 | ./configure --prefix="${PREFIX}" --disable-static --enable-shared && \ 249 | make && \ 250 | make install && \ 251 | rm -rf ${DIR} 252 | ## libvstab https://github.com/georgmartius/vid.stab 253 | RUN \ 254 | DIR=/tmp/vid.stab && \ 255 | mkdir -p ${DIR} && \ 256 | cd ${DIR} && \ 257 | curl -sLO https://github.com/georgmartius/vid.stab/archive/v${LIBVIDSTAB_VERSION}.tar.gz && \ 258 | echo ${LIBVIDSTAB_SHA256SUM} | sha256sum --check && \ 259 | tar -zx --strip-components=1 -f v${LIBVIDSTAB_VERSION}.tar.gz && \ 260 | cmake -DCMAKE_INSTALL_PREFIX="${PREFIX}" . && \ 261 | make && \ 262 | make install && \ 263 | rm -rf ${DIR} 264 | ## fridibi https://www.fribidi.org/ 265 | RUN \ 266 | DIR=/tmp/fribidi && \ 267 | mkdir -p ${DIR} && \ 268 | cd ${DIR} && \ 269 | curl -sLO https://github.com/fribidi/fribidi/archive/${FRIBIDI_VERSION}.tar.gz && \ 270 | echo ${FRIBIDI_SHA256SUM} | sha256sum --check && \ 271 | tar -zx --strip-components=1 -f ${FRIBIDI_VERSION}.tar.gz && \ 272 | sed -i 's/^SUBDIRS =.*/SUBDIRS=gen.tab charset lib bin/' Makefile.am && \ 273 | ./bootstrap --no-config --auto && \ 274 | ./configure --prefix="${PREFIX}" --disable-static --enable-shared && \ 275 | make -j1 && \ 276 | make install && \ 277 | rm -rf ${DIR} 278 | ## kvazaar https://github.com/ultravideo/kvazaar 279 | RUN \ 280 | DIR=/tmp/kvazaar && \ 281 | mkdir -p ${DIR} && \ 282 | cd ${DIR} && \ 283 | curl -sLO https://github.com/ultravideo/kvazaar/archive/v${KVAZAAR_VERSION}.tar.gz && \ 284 | tar -zx --strip-components=1 -f v${KVAZAAR_VERSION}.tar.gz && \ 285 | ./autogen.sh && \ 286 | ./configure --prefix="${PREFIX}" --disable-static --enable-shared && \ 287 | make && \ 288 | make install && \ 289 | rm -rf ${DIR} 290 | 291 | RUN \ 292 | DIR=/tmp/aom && \ 293 | git clone --branch ${AOM_VERSION} --depth 1 https://aomedia.googlesource.com/aom ${DIR} ; \ 294 | cd ${DIR} ; \ 295 | rm -rf CMakeCache.txt CMakeFiles ; \ 296 | mkdir -p ./aom_build ; \ 297 | cd ./aom_build ; \ 298 | cmake -DCMAKE_INSTALL_PREFIX="${PREFIX}" -DBUILD_SHARED_LIBS=1 ..; \ 299 | make ; \ 300 | make install ; \ 301 | rm -rf ${DIR} 302 | 303 | ## libxcb (and supporting libraries) for screen capture https://xcb.freedesktop.org/ 304 | RUN \ 305 | DIR=/tmp/xorg-macros && \ 306 | mkdir -p ${DIR} && \ 307 | cd ${DIR} && \ 308 | curl -sLO https://www.x.org/archive//individual/util/util-macros-${XORG_MACROS_VERSION}.tar.gz && \ 309 | tar -zx --strip-components=1 -f util-macros-${XORG_MACROS_VERSION}.tar.gz && \ 310 | ./configure --srcdir=${DIR} --prefix="${PREFIX}" && \ 311 | make && \ 312 | make install && \ 313 | rm -rf ${DIR} 314 | 315 | RUN \ 316 | DIR=/tmp/xproto && \ 317 | mkdir -p ${DIR} && \ 318 | cd ${DIR} && \ 319 | curl -sLO https://www.x.org/archive/individual/proto/xproto-${XPROTO_VERSION}.tar.gz && \ 320 | tar -zx --strip-components=1 -f xproto-${XPROTO_VERSION}.tar.gz && \ 321 | ./configure --srcdir=${DIR} --prefix="${PREFIX}" && \ 322 | make && \ 323 | make install && \ 324 | rm -rf ${DIR} 325 | 326 | RUN \ 327 | DIR=/tmp/libXau && \ 328 | mkdir -p ${DIR} && \ 329 | cd ${DIR} && \ 330 | curl -sLO https://www.x.org/archive/individual/lib/libXau-${XAU_VERSION}.tar.gz && \ 331 | tar -zx --strip-components=1 -f libXau-${XAU_VERSION}.tar.gz && \ 332 | ./configure --srcdir=${DIR} --prefix="${PREFIX}" && \ 333 | make && \ 334 | make install && \ 335 | rm -rf ${DIR} 336 | 337 | RUN \ 338 | DIR=/tmp/libpthread-stubs && \ 339 | mkdir -p ${DIR} && \ 340 | cd ${DIR} && \ 341 | curl -sLO https://xcb.freedesktop.org/dist/libpthread-stubs-${LIBPTHREAD_STUBS_VERSION}.tar.gz && \ 342 | tar -zx --strip-components=1 -f libpthread-stubs-${LIBPTHREAD_STUBS_VERSION}.tar.gz && \ 343 | ./configure --prefix="${PREFIX}" && \ 344 | make && \ 345 | make install && \ 346 | rm -rf ${DIR} 347 | 348 | RUN \ 349 | DIR=/tmp/libxcb-proto && \ 350 | mkdir -p ${DIR} && \ 351 | cd ${DIR} && \ 352 | curl -sLO https://xcb.freedesktop.org/dist/xcb-proto-${XCBPROTO_VERSION}.tar.gz && \ 353 | tar -zx --strip-components=1 -f xcb-proto-${XCBPROTO_VERSION}.tar.gz && \ 354 | ACLOCAL_PATH="${PREFIX}/share/aclocal" ./autogen.sh && \ 355 | ./configure --prefix="${PREFIX}" && \ 356 | make && \ 357 | make install && \ 358 | rm -rf ${DIR} 359 | 360 | RUN \ 361 | DIR=/tmp/libxcb && \ 362 | mkdir -p ${DIR} && \ 363 | cd ${DIR} && \ 364 | curl -sLO https://xcb.freedesktop.org/dist/libxcb-${LIBXCB_VERSION}.tar.gz && \ 365 | tar -zx --strip-components=1 -f libxcb-${LIBXCB_VERSION}.tar.gz && \ 366 | ACLOCAL_PATH="${PREFIX}/share/aclocal" ./autogen.sh && \ 367 | ./configure --prefix="${PREFIX}" --disable-static --enable-shared && \ 368 | make && \ 369 | make install && \ 370 | rm -rf ${DIR} 371 | 372 | ## libzmq https://github.com/zeromq/libzmq/ 373 | RUN \ 374 | DIR=/tmp/libzmq && \ 375 | mkdir -p ${DIR} && \ 376 | cd ${DIR} && \ 377 | curl -sLO https://github.com/zeromq/libzmq/archive/v${LIBZMQ_VERSION}.tar.gz && \ 378 | echo ${LIBZMQ_SHA256SUM} | sha256sum --check && \ 379 | tar -xz --strip-components=1 -f v${LIBZMQ_VERSION}.tar.gz && \ 380 | ./autogen.sh && \ 381 | ./configure --prefix="${PREFIX}" && \ 382 | make && \ 383 | make check && \ 384 | make install && \ 385 | rm -rf ${DIR} 386 | 387 | ## ffmpeg https://ffmpeg.org/ 388 | RUN \ 389 | DIR=/tmp/ffmpeg && mkdir -p ${DIR} && cd ${DIR} && \ 390 | curl -sLO https://ffmpeg.org/releases/ffmpeg-${FFMPEG_VERSION}.tar.bz2 && \ 391 | tar -jx --strip-components=1 -f ffmpeg-${FFMPEG_VERSION}.tar.bz2 392 | 393 | 394 | 395 | RUN \ 396 | DIR=/tmp/ffmpeg && mkdir -p ${DIR} && cd ${DIR} && \ 397 | ./configure \ 398 | --disable-debug \ 399 | --disable-doc \ 400 | --disable-ffplay \ 401 | --enable-shared \ 402 | --enable-avresample \ 403 | --enable-libopencore-amrnb \ 404 | --enable-libopencore-amrwb \ 405 | --enable-gpl \ 406 | --enable-libfreetype \ 407 | --enable-libvidstab \ 408 | --enable-libmfx \ 409 | --enable-libmp3lame \ 410 | --enable-libopus \ 411 | --enable-libtheora \ 412 | --enable-libvorbis \ 413 | --enable-libvpx \ 414 | --enable-libwebp \ 415 | --enable-libxcb \ 416 | --enable-libx265 \ 417 | --enable-libxvid \ 418 | --enable-libx264 \ 419 | --enable-nonfree \ 420 | --enable-openssl \ 421 | --enable-libfdk_aac \ 422 | --enable-postproc \ 423 | --enable-small \ 424 | --enable-version3 \ 425 | --enable-libzmq \ 426 | --extra-libs=-ldl \ 427 | --prefix="${PREFIX}" \ 428 | --enable-libopenjpeg \ 429 | --enable-libkvazaar \ 430 | --enable-libaom \ 431 | --extra-libs=-lpthread \ 432 | --enable-vaapi \ 433 | --extra-cflags="-I${PREFIX}/include" \ 434 | --extra-ldflags="-L${PREFIX}/lib" && \ 435 | make && \ 436 | make install && \ 437 | make tools/zmqsend && cp tools/zmqsend ${PREFIX}/bin/ && \ 438 | make distclean && \ 439 | hash -r && \ 440 | cd tools && \ 441 | make qt-faststart && cp qt-faststart ${PREFIX}/bin/ 442 | 443 | ## cleanup 444 | RUN \ 445 | ldd ${PREFIX}/bin/ffmpeg | grep opt/ffmpeg | cut -d ' ' -f 3 | xargs -i cp {} /usr/local/lib/ && \ 446 | for lib in /usr/local/lib/*.so.*; do ln -s "${lib##*/}" "${lib%%.so.*}".so; done && \ 447 | cp ${PREFIX}/bin/* /usr/local/bin/ && \ 448 | cp -r ${PREFIX}/share/ffmpeg /usr/local/share/ && \ 449 | LD_LIBRARY_PATH=/usr/local/lib ffmpeg -buildconf && \ 450 | cp -r ${PREFIX}/include/libav* ${PREFIX}/include/libpostproc ${PREFIX}/include/libsw* /usr/local/include && \ 451 | mkdir -p /usr/local/lib/pkgconfig && \ 452 | for pc in ${PREFIX}/lib/pkgconfig/libav*.pc ${PREFIX}/lib/pkgconfig/libpostproc.pc ${PREFIX}/lib/pkgconfig/libsw*.pc; do \ 453 | sed "s:${PREFIX}:/usr/local:g" <"$pc" >/usr/local/lib/pkgconfig/"${pc##*/}"; \ 454 | done 455 | 456 | FROM base AS release 457 | 458 | ENV LD_LIBRARY_PATH=/usr/local/lib:/usr/local/lib64:/usr/lib:/usr/lib64:/lib:/lib64 459 | 460 | CMD ["--help"] 461 | ENTRYPOINT ["ffmpeg"] 462 | 463 | COPY --from=build /usr/local /usr/local/ 464 | 465 | RUN \ 466 | apt-get update -y && \ 467 | apt-get install -y --no-install-recommends libva-drm2 libva2 i965-va-driver mesa-va-drivers && \ 468 | rm -rf /var/lib/apt/lists/* 469 | -------------------------------------------------------------------------------- /docker/Dockerfile.ffmpeg.amd64nvidia: -------------------------------------------------------------------------------- 1 | # inspired by https://github.com/jrottenberg/ffmpeg/blob/master/docker-images/4.3/ubuntu1804/Dockerfile 2 | 3 | # ffmpeg - http://ffmpeg.org/download.html 4 | # 5 | # From https://trac.ffmpeg.org/wiki/CompilationGuide/Ubuntu 6 | # 7 | # https://hub.docker.com/r/jrottenberg/ffmpeg/ 8 | # 9 | # 10 | 11 | FROM nvidia/cuda:11.1-devel-ubuntu20.04 AS devel-base 12 | 13 | ENV NVIDIA_DRIVER_CAPABILITIES compute,utility,video 14 | ENV DEBIAN_FRONTEND=noninteractive 15 | 16 | WORKDIR /tmp/workdir 17 | 18 | RUN apt-get -yqq update && \ 19 | apt-get install -yq --no-install-recommends ca-certificates expat libgomp1 && \ 20 | apt-get autoremove -y && \ 21 | apt-get clean -y 22 | 23 | FROM nvidia/cuda:11.1-runtime-ubuntu20.04 AS runtime-base 24 | 25 | ENV NVIDIA_DRIVER_CAPABILITIES compute,utility,video 26 | ENV DEBIAN_FRONTEND=noninteractive 27 | 28 | WORKDIR /tmp/workdir 29 | 30 | RUN apt-get -yqq update && \ 31 | apt-get install -yq --no-install-recommends ca-certificates expat libgomp1 libxcb-shape0-dev && \ 32 | apt-get autoremove -y && \ 33 | apt-get clean -y 34 | 35 | 36 | FROM devel-base as build 37 | 38 | ENV NVIDIA_HEADERS_VERSION=9.1.23.1 39 | 40 | ENV FFMPEG_VERSION=4.3.1 \ 41 | AOM_VERSION=v1.0.0 \ 42 | FDKAAC_VERSION=0.1.5 \ 43 | FREETYPE_VERSION=2.5.5 \ 44 | FRIBIDI_VERSION=0.19.7 \ 45 | KVAZAAR_VERSION=1.2.0 \ 46 | LAME_VERSION=3.100 \ 47 | LIBPTHREAD_STUBS_VERSION=0.4 \ 48 | LIBVIDSTAB_VERSION=1.1.0 \ 49 | LIBXCB_VERSION=1.13.1 \ 50 | XCBPROTO_VERSION=1.13 \ 51 | OGG_VERSION=1.3.2 \ 52 | OPENCOREAMR_VERSION=0.1.5 \ 53 | OPUS_VERSION=1.2 \ 54 | OPENJPEG_VERSION=2.1.2 \ 55 | THEORA_VERSION=1.1.1 \ 56 | VORBIS_VERSION=1.3.5 \ 57 | VPX_VERSION=1.8.0 \ 58 | WEBP_VERSION=1.0.2 \ 59 | X264_VERSION=20170226-2245-stable \ 60 | X265_VERSION=3.1.1 \ 61 | XAU_VERSION=1.0.9 \ 62 | XORG_MACROS_VERSION=1.19.2 \ 63 | XPROTO_VERSION=7.0.31 \ 64 | XVID_VERSION=1.3.4 \ 65 | LIBZMQ_VERSION=4.3.2 \ 66 | LIBSRT_VERSION=1.4.1 \ 67 | LIBARIBB24_VERSION=1.0.3 \ 68 | LIBPNG_VERSION=1.6.9 \ 69 | SRC=/usr/local 70 | 71 | ARG FREETYPE_SHA256SUM="5d03dd76c2171a7601e9ce10551d52d4471cf92cd205948e60289251daddffa8 freetype-2.5.5.tar.gz" 72 | ARG FRIBIDI_SHA256SUM="3fc96fa9473bd31dcb5500bdf1aa78b337ba13eb8c301e7c28923fea982453a8 0.19.7.tar.gz" 73 | ARG LIBVIDSTAB_SHA256SUM="14d2a053e56edad4f397be0cb3ef8eb1ec3150404ce99a426c4eb641861dc0bb v1.1.0.tar.gz" 74 | ARG OGG_SHA256SUM="e19ee34711d7af328cb26287f4137e70630e7261b17cbe3cd41011d73a654692 libogg-1.3.2.tar.gz" 75 | ARG OPUS_SHA256SUM="77db45a87b51578fbc49555ef1b10926179861d854eb2613207dc79d9ec0a9a9 opus-1.2.tar.gz" 76 | ARG THEORA_SHA256SUM="40952956c47811928d1e7922cda3bc1f427eb75680c3c37249c91e949054916b libtheora-1.1.1.tar.gz" 77 | ARG VORBIS_SHA256SUM="6efbcecdd3e5dfbf090341b485da9d176eb250d893e3eb378c428a2db38301ce libvorbis-1.3.5.tar.gz" 78 | ARG XVID_SHA256SUM="4e9fd62728885855bc5007fe1be58df42e5e274497591fec37249e1052ae316f xvidcore-1.3.4.tar.gz" 79 | ARG LIBZMQ_SHA256SUM="02ecc88466ae38cf2c8d79f09cfd2675ba299a439680b64ade733e26a349edeb v4.3.2.tar.gz" 80 | ARG LIBARIBB24_SHA256SUM="f61560738926e57f9173510389634d8c06cabedfa857db4b28fb7704707ff128 v1.0.3.tar.gz" 81 | 82 | 83 | ARG LD_LIBRARY_PATH=/opt/ffmpeg/lib 84 | ARG MAKEFLAGS="-j2" 85 | ARG PKG_CONFIG_PATH="/opt/ffmpeg/share/pkgconfig:/opt/ffmpeg/lib/pkgconfig:/opt/ffmpeg/lib64/pkgconfig" 86 | ARG PREFIX=/opt/ffmpeg 87 | ARG LD_LIBRARY_PATH="/opt/ffmpeg/lib:/opt/ffmpeg/lib64" 88 | 89 | 90 | RUN buildDeps="autoconf \ 91 | automake \ 92 | cmake \ 93 | curl \ 94 | bzip2 \ 95 | libexpat1-dev \ 96 | g++ \ 97 | gcc \ 98 | git \ 99 | gperf \ 100 | libtool \ 101 | make \ 102 | nasm \ 103 | perl \ 104 | pkg-config \ 105 | python \ 106 | libssl-dev \ 107 | yasm \ 108 | zlib1g-dev" && \ 109 | apt-get -yqq update && \ 110 | apt-get install -yq --no-install-recommends ${buildDeps} 111 | 112 | RUN \ 113 | DIR=/tmp/nv-codec-headers && \ 114 | git clone https://github.com/FFmpeg/nv-codec-headers ${DIR} && \ 115 | cd ${DIR} && \ 116 | git checkout n${NVIDIA_HEADERS_VERSION} && \ 117 | make PREFIX="${PREFIX}" && \ 118 | make install PREFIX="${PREFIX}" && \ 119 | rm -rf ${DIR} 120 | 121 | ## opencore-amr https://sourceforge.net/projects/opencore-amr/ 122 | RUN \ 123 | DIR=/tmp/opencore-amr && \ 124 | mkdir -p ${DIR} && \ 125 | cd ${DIR} && \ 126 | curl -sL https://versaweb.dl.sourceforge.net/project/opencore-amr/opencore-amr/opencore-amr-${OPENCOREAMR_VERSION}.tar.gz | \ 127 | tar -zx --strip-components=1 && \ 128 | ./configure --prefix="${PREFIX}" --enable-shared && \ 129 | make && \ 130 | make install && \ 131 | rm -rf ${DIR} 132 | ## x264 http://www.videolan.org/developers/x264.html 133 | RUN \ 134 | DIR=/tmp/x264 && \ 135 | mkdir -p ${DIR} && \ 136 | cd ${DIR} && \ 137 | curl -sL https://download.videolan.org/pub/videolan/x264/snapshots/x264-snapshot-${X264_VERSION}.tar.bz2 | \ 138 | tar -jx --strip-components=1 && \ 139 | ./configure --prefix="${PREFIX}" --enable-shared --enable-pic --disable-cli && \ 140 | make && \ 141 | make install && \ 142 | rm -rf ${DIR} 143 | ### x265 http://x265.org/ 144 | RUN \ 145 | DIR=/tmp/x265 && \ 146 | mkdir -p ${DIR} && \ 147 | cd ${DIR} && \ 148 | curl -sL https://download.videolan.org/pub/videolan/x265/x265_${X265_VERSION}.tar.gz | \ 149 | tar -zx && \ 150 | cd x265_${X265_VERSION}/build/linux && \ 151 | sed -i "/-DEXTRA_LIB/ s/$/ -DCMAKE_INSTALL_PREFIX=\${PREFIX}/" multilib.sh && \ 152 | sed -i "/^cmake/ s/$/ -DENABLE_CLI=OFF/" multilib.sh && \ 153 | ./multilib.sh && \ 154 | make -C 8bit install && \ 155 | rm -rf ${DIR} 156 | ### libogg https://www.xiph.org/ogg/ 157 | RUN \ 158 | DIR=/tmp/ogg && \ 159 | mkdir -p ${DIR} && \ 160 | cd ${DIR} && \ 161 | curl -sLO http://downloads.xiph.org/releases/ogg/libogg-${OGG_VERSION}.tar.gz && \ 162 | echo ${OGG_SHA256SUM} | sha256sum --check && \ 163 | tar -zx --strip-components=1 -f libogg-${OGG_VERSION}.tar.gz && \ 164 | ./configure --prefix="${PREFIX}" --enable-shared && \ 165 | make && \ 166 | make install && \ 167 | rm -rf ${DIR} 168 | ### libopus https://www.opus-codec.org/ 169 | RUN \ 170 | DIR=/tmp/opus && \ 171 | mkdir -p ${DIR} && \ 172 | cd ${DIR} && \ 173 | curl -sLO https://archive.mozilla.org/pub/opus/opus-${OPUS_VERSION}.tar.gz && \ 174 | echo ${OPUS_SHA256SUM} | sha256sum --check && \ 175 | tar -zx --strip-components=1 -f opus-${OPUS_VERSION}.tar.gz && \ 176 | autoreconf -fiv && \ 177 | ./configure --prefix="${PREFIX}" --enable-shared && \ 178 | make && \ 179 | make install && \ 180 | rm -rf ${DIR} 181 | ### libvorbis https://xiph.org/vorbis/ 182 | RUN \ 183 | DIR=/tmp/vorbis && \ 184 | mkdir -p ${DIR} && \ 185 | cd ${DIR} && \ 186 | curl -sLO http://downloads.xiph.org/releases/vorbis/libvorbis-${VORBIS_VERSION}.tar.gz && \ 187 | echo ${VORBIS_SHA256SUM} | sha256sum --check && \ 188 | tar -zx --strip-components=1 -f libvorbis-${VORBIS_VERSION}.tar.gz && \ 189 | ./configure --prefix="${PREFIX}" --with-ogg="${PREFIX}" --enable-shared && \ 190 | make && \ 191 | make install && \ 192 | rm -rf ${DIR} 193 | ### libtheora http://www.theora.org/ 194 | RUN \ 195 | DIR=/tmp/theora && \ 196 | mkdir -p ${DIR} && \ 197 | cd ${DIR} && \ 198 | curl -sLO http://downloads.xiph.org/releases/theora/libtheora-${THEORA_VERSION}.tar.gz && \ 199 | echo ${THEORA_SHA256SUM} | sha256sum --check && \ 200 | tar -zx --strip-components=1 -f libtheora-${THEORA_VERSION}.tar.gz && \ 201 | ./configure --prefix="${PREFIX}" --with-ogg="${PREFIX}" --enable-shared && \ 202 | make && \ 203 | make install && \ 204 | rm -rf ${DIR} 205 | ### libvpx https://www.webmproject.org/code/ 206 | RUN \ 207 | DIR=/tmp/vpx && \ 208 | mkdir -p ${DIR} && \ 209 | cd ${DIR} && \ 210 | curl -sL https://codeload.github.com/webmproject/libvpx/tar.gz/v${VPX_VERSION} | \ 211 | tar -zx --strip-components=1 && \ 212 | ./configure --prefix="${PREFIX}" --enable-vp8 --enable-vp9 --enable-vp9-highbitdepth --enable-pic --enable-shared \ 213 | --disable-debug --disable-examples --disable-docs --disable-install-bins && \ 214 | make && \ 215 | make install && \ 216 | rm -rf ${DIR} 217 | ### libwebp https://developers.google.com/speed/webp/ 218 | RUN \ 219 | DIR=/tmp/vebp && \ 220 | mkdir -p ${DIR} && \ 221 | cd ${DIR} && \ 222 | curl -sL https://storage.googleapis.com/downloads.webmproject.org/releases/webp/libwebp-${WEBP_VERSION}.tar.gz | \ 223 | tar -zx --strip-components=1 && \ 224 | ./configure --prefix="${PREFIX}" --enable-shared && \ 225 | make && \ 226 | make install && \ 227 | rm -rf ${DIR} 228 | ### libmp3lame http://lame.sourceforge.net/ 229 | RUN \ 230 | DIR=/tmp/lame && \ 231 | mkdir -p ${DIR} && \ 232 | cd ${DIR} && \ 233 | curl -sL https://versaweb.dl.sourceforge.net/project/lame/lame/$(echo ${LAME_VERSION} | sed -e 's/[^0-9]*\([0-9]*\)[.]\([0-9]*\)[.]\([0-9]*\)\([0-9A-Za-z-]*\)/\1.\2/')/lame-${LAME_VERSION}.tar.gz | \ 234 | tar -zx --strip-components=1 && \ 235 | ./configure --prefix="${PREFIX}" --bindir="${PREFIX}/bin" --enable-shared --enable-nasm --disable-frontend && \ 236 | make && \ 237 | make install && \ 238 | rm -rf ${DIR} 239 | ### xvid https://www.xvid.com/ 240 | RUN \ 241 | DIR=/tmp/xvid && \ 242 | mkdir -p ${DIR} && \ 243 | cd ${DIR} && \ 244 | curl -sLO http://downloads.xvid.org/downloads/xvidcore-${XVID_VERSION}.tar.gz && \ 245 | echo ${XVID_SHA256SUM} | sha256sum --check && \ 246 | tar -zx -f xvidcore-${XVID_VERSION}.tar.gz && \ 247 | cd xvidcore/build/generic && \ 248 | ./configure --prefix="${PREFIX}" --bindir="${PREFIX}/bin" && \ 249 | make && \ 250 | make install && \ 251 | rm -rf ${DIR} 252 | ### fdk-aac https://github.com/mstorsjo/fdk-aac 253 | RUN \ 254 | DIR=/tmp/fdk-aac && \ 255 | mkdir -p ${DIR} && \ 256 | cd ${DIR} && \ 257 | curl -sL https://github.com/mstorsjo/fdk-aac/archive/v${FDKAAC_VERSION}.tar.gz | \ 258 | tar -zx --strip-components=1 && \ 259 | autoreconf -fiv && \ 260 | ./configure --prefix="${PREFIX}" --enable-shared --datadir="${DIR}" && \ 261 | make && \ 262 | make install && \ 263 | rm -rf ${DIR} 264 | ## openjpeg https://github.com/uclouvain/openjpeg 265 | RUN \ 266 | DIR=/tmp/openjpeg && \ 267 | mkdir -p ${DIR} && \ 268 | cd ${DIR} && \ 269 | curl -sL https://github.com/uclouvain/openjpeg/archive/v${OPENJPEG_VERSION}.tar.gz | \ 270 | tar -zx --strip-components=1 && \ 271 | cmake -DBUILD_THIRDPARTY:BOOL=ON -DCMAKE_INSTALL_PREFIX="${PREFIX}" . && \ 272 | make && \ 273 | make install && \ 274 | rm -rf ${DIR} 275 | ## freetype https://www.freetype.org/ 276 | RUN \ 277 | DIR=/tmp/freetype && \ 278 | mkdir -p ${DIR} && \ 279 | cd ${DIR} && \ 280 | curl -sLO https://download.savannah.gnu.org/releases/freetype/freetype-${FREETYPE_VERSION}.tar.gz && \ 281 | echo ${FREETYPE_SHA256SUM} | sha256sum --check && \ 282 | tar -zx --strip-components=1 -f freetype-${FREETYPE_VERSION}.tar.gz && \ 283 | ./configure --prefix="${PREFIX}" --disable-static --enable-shared && \ 284 | make && \ 285 | make install && \ 286 | rm -rf ${DIR} 287 | ## libvstab https://github.com/georgmartius/vid.stab 288 | RUN \ 289 | DIR=/tmp/vid.stab && \ 290 | mkdir -p ${DIR} && \ 291 | cd ${DIR} && \ 292 | curl -sLO https://github.com/georgmartius/vid.stab/archive/v${LIBVIDSTAB_VERSION}.tar.gz && \ 293 | echo ${LIBVIDSTAB_SHA256SUM} | sha256sum --check && \ 294 | tar -zx --strip-components=1 -f v${LIBVIDSTAB_VERSION}.tar.gz && \ 295 | cmake -DCMAKE_INSTALL_PREFIX="${PREFIX}" . && \ 296 | make && \ 297 | make install && \ 298 | rm -rf ${DIR} 299 | ## fridibi https://www.fribidi.org/ 300 | RUN \ 301 | DIR=/tmp/fribidi && \ 302 | mkdir -p ${DIR} && \ 303 | cd ${DIR} && \ 304 | curl -sLO https://github.com/fribidi/fribidi/archive/${FRIBIDI_VERSION}.tar.gz && \ 305 | echo ${FRIBIDI_SHA256SUM} | sha256sum --check && \ 306 | tar -zx --strip-components=1 -f ${FRIBIDI_VERSION}.tar.gz && \ 307 | sed -i 's/^SUBDIRS =.*/SUBDIRS=gen.tab charset lib bin/' Makefile.am && \ 308 | ./bootstrap --no-config --auto && \ 309 | ./configure --prefix="${PREFIX}" --disable-static --enable-shared && \ 310 | make -j1 && \ 311 | make install && \ 312 | rm -rf ${DIR} 313 | ## kvazaar https://github.com/ultravideo/kvazaar 314 | RUN \ 315 | DIR=/tmp/kvazaar && \ 316 | mkdir -p ${DIR} && \ 317 | cd ${DIR} && \ 318 | curl -sLO https://github.com/ultravideo/kvazaar/archive/v${KVAZAAR_VERSION}.tar.gz && \ 319 | tar -zx --strip-components=1 -f v${KVAZAAR_VERSION}.tar.gz && \ 320 | ./autogen.sh && \ 321 | ./configure --prefix="${PREFIX}" --disable-static --enable-shared && \ 322 | make && \ 323 | make install && \ 324 | rm -rf ${DIR} 325 | 326 | RUN \ 327 | DIR=/tmp/aom && \ 328 | git clone --branch ${AOM_VERSION} --depth 1 https://aomedia.googlesource.com/aom ${DIR} ; \ 329 | cd ${DIR} ; \ 330 | rm -rf CMakeCache.txt CMakeFiles ; \ 331 | mkdir -p ./aom_build ; \ 332 | cd ./aom_build ; \ 333 | cmake -DCMAKE_INSTALL_PREFIX="${PREFIX}" -DBUILD_SHARED_LIBS=1 ..; \ 334 | make ; \ 335 | make install ; \ 336 | rm -rf ${DIR} 337 | 338 | ## libxcb (and supporting libraries) for screen capture https://xcb.freedesktop.org/ 339 | RUN \ 340 | DIR=/tmp/xorg-macros && \ 341 | mkdir -p ${DIR} && \ 342 | cd ${DIR} && \ 343 | curl -sLO https://www.x.org/archive//individual/util/util-macros-${XORG_MACROS_VERSION}.tar.gz && \ 344 | tar -zx --strip-components=1 -f util-macros-${XORG_MACROS_VERSION}.tar.gz && \ 345 | ./configure --srcdir=${DIR} --prefix="${PREFIX}" && \ 346 | make && \ 347 | make install && \ 348 | rm -rf ${DIR} 349 | 350 | RUN \ 351 | DIR=/tmp/xproto && \ 352 | mkdir -p ${DIR} && \ 353 | cd ${DIR} && \ 354 | curl -sLO https://www.x.org/archive/individual/proto/xproto-${XPROTO_VERSION}.tar.gz && \ 355 | tar -zx --strip-components=1 -f xproto-${XPROTO_VERSION}.tar.gz && \ 356 | ./configure --srcdir=${DIR} --prefix="${PREFIX}" && \ 357 | make && \ 358 | make install && \ 359 | rm -rf ${DIR} 360 | 361 | RUN \ 362 | DIR=/tmp/libXau && \ 363 | mkdir -p ${DIR} && \ 364 | cd ${DIR} && \ 365 | curl -sLO https://www.x.org/archive/individual/lib/libXau-${XAU_VERSION}.tar.gz && \ 366 | tar -zx --strip-components=1 -f libXau-${XAU_VERSION}.tar.gz && \ 367 | ./configure --srcdir=${DIR} --prefix="${PREFIX}" && \ 368 | make && \ 369 | make install && \ 370 | rm -rf ${DIR} 371 | 372 | RUN \ 373 | DIR=/tmp/libpthread-stubs && \ 374 | mkdir -p ${DIR} && \ 375 | cd ${DIR} && \ 376 | curl -sLO https://xcb.freedesktop.org/dist/libpthread-stubs-${LIBPTHREAD_STUBS_VERSION}.tar.gz && \ 377 | tar -zx --strip-components=1 -f libpthread-stubs-${LIBPTHREAD_STUBS_VERSION}.tar.gz && \ 378 | ./configure --prefix="${PREFIX}" && \ 379 | make && \ 380 | make install && \ 381 | rm -rf ${DIR} 382 | 383 | RUN \ 384 | DIR=/tmp/libxcb-proto && \ 385 | mkdir -p ${DIR} && \ 386 | cd ${DIR} && \ 387 | curl -sLO https://xcb.freedesktop.org/dist/xcb-proto-${XCBPROTO_VERSION}.tar.gz && \ 388 | tar -zx --strip-components=1 -f xcb-proto-${XCBPROTO_VERSION}.tar.gz && \ 389 | ACLOCAL_PATH="${PREFIX}/share/aclocal" ./autogen.sh && \ 390 | ./configure --prefix="${PREFIX}" && \ 391 | make && \ 392 | make install && \ 393 | rm -rf ${DIR} 394 | 395 | RUN \ 396 | DIR=/tmp/libxcb && \ 397 | mkdir -p ${DIR} && \ 398 | cd ${DIR} && \ 399 | curl -sLO https://xcb.freedesktop.org/dist/libxcb-${LIBXCB_VERSION}.tar.gz && \ 400 | tar -zx --strip-components=1 -f libxcb-${LIBXCB_VERSION}.tar.gz && \ 401 | ACLOCAL_PATH="${PREFIX}/share/aclocal" ./autogen.sh && \ 402 | ./configure --prefix="${PREFIX}" --disable-static --enable-shared && \ 403 | make && \ 404 | make install && \ 405 | rm -rf ${DIR} 406 | 407 | ## libzmq https://github.com/zeromq/libzmq/ 408 | RUN \ 409 | DIR=/tmp/libzmq && \ 410 | mkdir -p ${DIR} && \ 411 | cd ${DIR} && \ 412 | curl -sLO https://github.com/zeromq/libzmq/archive/v${LIBZMQ_VERSION}.tar.gz && \ 413 | echo ${LIBZMQ_SHA256SUM} | sha256sum --check && \ 414 | tar -xz --strip-components=1 -f v${LIBZMQ_VERSION}.tar.gz && \ 415 | ./autogen.sh && \ 416 | ./configure --prefix="${PREFIX}" && \ 417 | make && \ 418 | make check && \ 419 | make install && \ 420 | rm -rf ${DIR} 421 | 422 | ## libsrt https://github.com/Haivision/srt 423 | RUN \ 424 | DIR=/tmp/srt && \ 425 | mkdir -p ${DIR} && \ 426 | cd ${DIR} && \ 427 | curl -sLO https://github.com/Haivision/srt/archive/v${LIBSRT_VERSION}.tar.gz && \ 428 | tar -xz --strip-components=1 -f v${LIBSRT_VERSION}.tar.gz && \ 429 | cmake -DCMAKE_INSTALL_PREFIX="${PREFIX}" . && \ 430 | make && \ 431 | make install && \ 432 | rm -rf ${DIR} 433 | 434 | ## libpng 435 | RUN \ 436 | DIR=/tmp/png && \ 437 | mkdir -p ${DIR} && \ 438 | cd ${DIR} && \ 439 | git clone https://git.code.sf.net/p/libpng/code ${DIR} -b v${LIBPNG_VERSION} --depth 1 && \ 440 | ./autogen.sh && \ 441 | ./configure --prefix="${PREFIX}" && \ 442 | make check && \ 443 | make install && \ 444 | rm -rf ${DIR} 445 | 446 | ## libaribb24 447 | RUN \ 448 | DIR=/tmp/b24 && \ 449 | mkdir -p ${DIR} && \ 450 | cd ${DIR} && \ 451 | curl -sLO https://github.com/nkoriyama/aribb24/archive/v${LIBARIBB24_VERSION}.tar.gz && \ 452 | echo ${LIBARIBB24_SHA256SUM} | sha256sum --check && \ 453 | tar -xz --strip-components=1 -f v${LIBARIBB24_VERSION}.tar.gz && \ 454 | autoreconf -fiv && \ 455 | ./configure CFLAGS="-I${PREFIX}/include -fPIC" --prefix="${PREFIX}" && \ 456 | make && \ 457 | make install && \ 458 | rm -rf ${DIR} 459 | 460 | ## ffmpeg https://ffmpeg.org/ 461 | RUN \ 462 | DIR=/tmp/ffmpeg && mkdir -p ${DIR} && cd ${DIR} && \ 463 | curl -sLO https://ffmpeg.org/releases/ffmpeg-${FFMPEG_VERSION}.tar.bz2 && \ 464 | tar -jx --strip-components=1 -f ffmpeg-${FFMPEG_VERSION}.tar.bz2 465 | 466 | 467 | 468 | RUN \ 469 | DIR=/tmp/ffmpeg && mkdir -p ${DIR} && cd ${DIR} && \ 470 | ./configure \ 471 | --disable-debug \ 472 | --disable-doc \ 473 | --disable-ffplay \ 474 | --enable-shared \ 475 | --enable-avresample \ 476 | --enable-libopencore-amrnb \ 477 | --enable-libopencore-amrwb \ 478 | --enable-gpl \ 479 | --enable-libfreetype \ 480 | --enable-libvidstab \ 481 | --enable-libmp3lame \ 482 | --enable-libopus \ 483 | --enable-libtheora \ 484 | --enable-libvorbis \ 485 | --enable-libvpx \ 486 | --enable-libwebp \ 487 | --enable-libxcb \ 488 | --enable-libx265 \ 489 | --enable-libxvid \ 490 | --enable-libx264 \ 491 | --enable-nonfree \ 492 | --enable-openssl \ 493 | --enable-libfdk_aac \ 494 | --enable-postproc \ 495 | --enable-small \ 496 | --enable-version3 \ 497 | --enable-libzmq \ 498 | --extra-libs=-ldl \ 499 | --prefix="${PREFIX}" \ 500 | --enable-libopenjpeg \ 501 | --enable-libkvazaar \ 502 | --enable-libaom \ 503 | --extra-libs=-lpthread \ 504 | --enable-libsrt \ 505 | --enable-libaribb24 \ 506 | --enable-nvenc \ 507 | --enable-cuda \ 508 | --enable-cuvid \ 509 | --enable-libnpp \ 510 | --extra-cflags="-I${PREFIX}/include -I${PREFIX}/include/ffnvcodec -I/usr/local/cuda/include/" \ 511 | --extra-ldflags="-L${PREFIX}/lib -L/usr/local/cuda/lib64 -L/usr/local/cuda/lib32/" && \ 512 | make && \ 513 | make install && \ 514 | make tools/zmqsend && cp tools/zmqsend ${PREFIX}/bin/ && \ 515 | make distclean && \ 516 | hash -r && \ 517 | cd tools && \ 518 | make qt-faststart && cp qt-faststart ${PREFIX}/bin/ 519 | 520 | ## cleanup 521 | RUN \ 522 | LD_LIBRARY_PATH="${PREFIX}/lib:${PREFIX}/lib64:${LD_LIBRARY_PATH}" ldd ${PREFIX}/bin/ffmpeg | grep opt/ffmpeg | cut -d ' ' -f 3 | xargs -i cp {} /usr/local/lib/ && \ 523 | for lib in /usr/local/lib/*.so.*; do ln -s "${lib##*/}" "${lib%%.so.*}".so; done && \ 524 | cp ${PREFIX}/bin/* /usr/local/bin/ && \ 525 | cp -r ${PREFIX}/share/* /usr/local/share/ && \ 526 | LD_LIBRARY_PATH=/usr/local/lib ffmpeg -buildconf && \ 527 | cp -r ${PREFIX}/include/libav* ${PREFIX}/include/libpostproc ${PREFIX}/include/libsw* /usr/local/include && \ 528 | mkdir -p /usr/local/lib/pkgconfig && \ 529 | for pc in ${PREFIX}/lib/pkgconfig/libav*.pc ${PREFIX}/lib/pkgconfig/libpostproc.pc ${PREFIX}/lib/pkgconfig/libsw*.pc; do \ 530 | sed "s:${PREFIX}:/usr/local:g; s:/lib64:/lib:g" <"$pc" >/usr/local/lib/pkgconfig/"${pc##*/}"; \ 531 | done 532 | 533 | 534 | 535 | FROM runtime-base AS release 536 | 537 | ENV LD_LIBRARY_PATH=/usr/local/lib:/usr/local/lib64 538 | 539 | CMD ["--help"] 540 | ENTRYPOINT ["ffmpeg"] 541 | 542 | # copy only needed files, without copying nvidia dev files 543 | COPY --from=build /usr/local/bin /usr/local/bin/ 544 | COPY --from=build /usr/local/share /usr/local/share/ 545 | COPY --from=build /usr/local/lib /usr/local/lib/ 546 | COPY --from=build /usr/local/include /usr/local/include/ 547 | 548 | # Let's make sure the app built correctly 549 | # Convenient to verify on https://hub.docker.com/r/jrottenberg/ffmpeg/builds/ console output -------------------------------------------------------------------------------- /docker/Dockerfile.ffmpeg.armv7: -------------------------------------------------------------------------------- 1 | # inspired by: 2 | # https://github.com/collelog/ffmpeg/blob/master/4.3.1-alpine-rpi4-arm64v8.Dockerfile 3 | # https://github.com/mmastrac/ffmpeg-omx-rpi-docker/blob/master/Dockerfile 4 | # https://github.com/jrottenberg/ffmpeg/pull/158/files 5 | # https://github.com/jrottenberg/ffmpeg/pull/239 6 | FROM ubuntu:20.04 AS base 7 | 8 | WORKDIR /tmp/workdir 9 | 10 | ENV DEBIAN_FRONTEND=noninteractive 11 | RUN apt-get -yqq update && \ 12 | apt-get install -yq --no-install-recommends ca-certificates expat libgomp1 && \ 13 | apt-get autoremove -y && \ 14 | apt-get clean -y 15 | 16 | FROM base as build 17 | 18 | ENV FFMPEG_VERSION=4.3.1 \ 19 | AOM_VERSION=v1.0.0 \ 20 | FDKAAC_VERSION=0.1.5 \ 21 | FREETYPE_VERSION=2.5.5 \ 22 | FRIBIDI_VERSION=0.19.7 \ 23 | KVAZAAR_VERSION=1.2.0 \ 24 | LAME_VERSION=3.100 \ 25 | LIBPTHREAD_STUBS_VERSION=0.4 \ 26 | LIBVIDSTAB_VERSION=1.1.0 \ 27 | LIBXCB_VERSION=1.13.1 \ 28 | XCBPROTO_VERSION=1.13 \ 29 | OGG_VERSION=1.3.2 \ 30 | OPENCOREAMR_VERSION=0.1.5 \ 31 | OPUS_VERSION=1.2 \ 32 | OPENJPEG_VERSION=2.1.2 \ 33 | THEORA_VERSION=1.1.1 \ 34 | VORBIS_VERSION=1.3.5 \ 35 | VPX_VERSION=1.8.0 \ 36 | WEBP_VERSION=1.0.2 \ 37 | X264_VERSION=20170226-2245-stable \ 38 | X265_VERSION=3.1.1 \ 39 | XAU_VERSION=1.0.9 \ 40 | XORG_MACROS_VERSION=1.19.2 \ 41 | XPROTO_VERSION=7.0.31 \ 42 | XVID_VERSION=1.3.4 \ 43 | LIBZMQ_VERSION=4.3.3 \ 44 | SRC=/usr/local 45 | 46 | ARG FREETYPE_SHA256SUM="5d03dd76c2171a7601e9ce10551d52d4471cf92cd205948e60289251daddffa8 freetype-2.5.5.tar.gz" 47 | ARG FRIBIDI_SHA256SUM="3fc96fa9473bd31dcb5500bdf1aa78b337ba13eb8c301e7c28923fea982453a8 0.19.7.tar.gz" 48 | ARG LIBVIDSTAB_SHA256SUM="14d2a053e56edad4f397be0cb3ef8eb1ec3150404ce99a426c4eb641861dc0bb v1.1.0.tar.gz" 49 | ARG OGG_SHA256SUM="e19ee34711d7af328cb26287f4137e70630e7261b17cbe3cd41011d73a654692 libogg-1.3.2.tar.gz" 50 | ARG OPUS_SHA256SUM="77db45a87b51578fbc49555ef1b10926179861d854eb2613207dc79d9ec0a9a9 opus-1.2.tar.gz" 51 | ARG THEORA_SHA256SUM="40952956c47811928d1e7922cda3bc1f427eb75680c3c37249c91e949054916b libtheora-1.1.1.tar.gz" 52 | ARG VORBIS_SHA256SUM="6efbcecdd3e5dfbf090341b485da9d176eb250d893e3eb378c428a2db38301ce libvorbis-1.3.5.tar.gz" 53 | ARG XVID_SHA256SUM="4e9fd62728885855bc5007fe1be58df42e5e274497591fec37249e1052ae316f xvidcore-1.3.4.tar.gz" 54 | 55 | 56 | ARG LD_LIBRARY_PATH=/opt/ffmpeg/lib 57 | ARG MAKEFLAGS="-j2" 58 | ARG PKG_CONFIG_PATH="/opt/ffmpeg/share/pkgconfig:/opt/ffmpeg/lib/pkgconfig:/opt/ffmpeg/lib64/pkgconfig:/opt/vc/lib/pkgconfig" 59 | ARG PREFIX=/opt/ffmpeg 60 | ARG LD_LIBRARY_PATH="/opt/ffmpeg/lib:/opt/ffmpeg/lib64:/usr/lib64:/usr/lib:/lib64:/lib:/opt/vc/lib" 61 | 62 | 63 | RUN buildDeps="autoconf \ 64 | automake \ 65 | cmake \ 66 | curl \ 67 | bzip2 \ 68 | libexpat1-dev \ 69 | g++ \ 70 | gcc \ 71 | git \ 72 | gperf \ 73 | libtool \ 74 | make \ 75 | nasm \ 76 | perl \ 77 | pkg-config \ 78 | python \ 79 | sudo \ 80 | libssl-dev \ 81 | yasm \ 82 | linux-headers-raspi2 \ 83 | libomxil-bellagio-dev \ 84 | libx265-dev \ 85 | libaom-dev \ 86 | zlib1g-dev" && \ 87 | apt-get -yqq update && \ 88 | apt-get install -yq --no-install-recommends ${buildDeps} 89 | ## opencore-amr https://sourceforge.net/projects/opencore-amr/ 90 | RUN \ 91 | DIR=/tmp/opencore-amr && \ 92 | mkdir -p ${DIR} && \ 93 | cd ${DIR} && \ 94 | curl -sL https://versaweb.dl.sourceforge.net/project/opencore-amr/opencore-amr/opencore-amr-${OPENCOREAMR_VERSION}.tar.gz | \ 95 | tar -zx --strip-components=1 && \ 96 | ./configure --prefix="${PREFIX}" --enable-shared && \ 97 | make -j $(nproc) && \ 98 | make -j $(nproc) install && \ 99 | rm -rf ${DIR} 100 | ## x264 http://www.videolan.org/developers/x264.html 101 | RUN \ 102 | DIR=/tmp/x264 && \ 103 | mkdir -p ${DIR} && \ 104 | cd ${DIR} && \ 105 | curl -sL https://download.videolan.org/pub/videolan/x264/snapshots/x264-snapshot-${X264_VERSION}.tar.bz2 | \ 106 | tar -jx --strip-components=1 && \ 107 | ./configure --prefix="${PREFIX}" --enable-shared --enable-pic --disable-cli && \ 108 | make -j $(nproc) && \ 109 | make -j $(nproc) install && \ 110 | rm -rf ${DIR} 111 | # ### x265 http://x265.org/ 112 | # RUN \ 113 | # DIR=/tmp/x265 && \ 114 | # mkdir -p ${DIR} && \ 115 | # cd ${DIR} && \ 116 | # curl -sL https://download.videolan.org/pub/videolan/x265/x265_${X265_VERSION}.tar.gz | \ 117 | # tar -zx && \ 118 | # cd x265_${X265_VERSION}/build/linux && \ 119 | # sed -i "/-DEXTRA_LIB/ s/$/ -DCMAKE_INSTALL_PREFIX=\${PREFIX}/" multilib.sh && \ 120 | # sed -i "/^cmake/ s/$/ -DENABLE_CLI=OFF/" multilib.sh && \ 121 | # # export CXXFLAGS="${CXXFLAGS} -fPIC" && \ 122 | # ./multilib.sh && \ 123 | # make -C 8bit install && \ 124 | # rm -rf ${DIR} 125 | ### libogg https://www.xiph.org/ogg/ 126 | RUN \ 127 | DIR=/tmp/ogg && \ 128 | mkdir -p ${DIR} && \ 129 | cd ${DIR} && \ 130 | curl -sLO http://downloads.xiph.org/releases/ogg/libogg-${OGG_VERSION}.tar.gz && \ 131 | echo ${OGG_SHA256SUM} | sha256sum --check && \ 132 | tar -zx --strip-components=1 -f libogg-${OGG_VERSION}.tar.gz && \ 133 | ./configure --prefix="${PREFIX}" --enable-shared && \ 134 | make -j $(nproc) && \ 135 | make -j $(nproc) install && \ 136 | rm -rf ${DIR} 137 | ### libopus https://www.opus-codec.org/ 138 | RUN \ 139 | DIR=/tmp/opus && \ 140 | mkdir -p ${DIR} && \ 141 | cd ${DIR} && \ 142 | curl -sLO https://archive.mozilla.org/pub/opus/opus-${OPUS_VERSION}.tar.gz && \ 143 | echo ${OPUS_SHA256SUM} | sha256sum --check && \ 144 | tar -zx --strip-components=1 -f opus-${OPUS_VERSION}.tar.gz && \ 145 | autoreconf -fiv && \ 146 | ./configure --prefix="${PREFIX}" --enable-shared && \ 147 | make -j $(nproc) && \ 148 | make -j $(nproc) install && \ 149 | rm -rf ${DIR} 150 | ### libvorbis https://xiph.org/vorbis/ 151 | RUN \ 152 | DIR=/tmp/vorbis && \ 153 | mkdir -p ${DIR} && \ 154 | cd ${DIR} && \ 155 | curl -sLO http://downloads.xiph.org/releases/vorbis/libvorbis-${VORBIS_VERSION}.tar.gz && \ 156 | echo ${VORBIS_SHA256SUM} | sha256sum --check && \ 157 | tar -zx --strip-components=1 -f libvorbis-${VORBIS_VERSION}.tar.gz && \ 158 | ./configure --prefix="${PREFIX}" --with-ogg="${PREFIX}" --enable-shared && \ 159 | make -j $(nproc) && \ 160 | make -j $(nproc) install && \ 161 | rm -rf ${DIR} 162 | ### libtheora http://www.theora.org/ 163 | RUN \ 164 | DIR=/tmp/theora && \ 165 | mkdir -p ${DIR} && \ 166 | cd ${DIR} && \ 167 | curl -sLO http://downloads.xiph.org/releases/theora/libtheora-${THEORA_VERSION}.tar.gz && \ 168 | echo ${THEORA_SHA256SUM} | sha256sum --check && \ 169 | tar -zx --strip-components=1 -f libtheora-${THEORA_VERSION}.tar.gz && \ 170 | curl -sL 'http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD' -o config.guess && \ 171 | curl -sL 'http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD' -o config.sub && \ 172 | ./configure --prefix="${PREFIX}" --with-ogg="${PREFIX}" --enable-shared && \ 173 | make -j $(nproc) && \ 174 | make -j $(nproc) install && \ 175 | rm -rf ${DIR} 176 | ### libvpx https://www.webmproject.org/code/ 177 | RUN \ 178 | DIR=/tmp/vpx && \ 179 | mkdir -p ${DIR} && \ 180 | cd ${DIR} && \ 181 | curl -sL https://codeload.github.com/webmproject/libvpx/tar.gz/v${VPX_VERSION} | \ 182 | tar -zx --strip-components=1 && \ 183 | ./configure --prefix="${PREFIX}" --enable-vp8 --enable-vp9 --enable-vp9-highbitdepth --enable-pic --enable-shared \ 184 | --disable-debug --disable-examples --disable-docs --disable-install-bins && \ 185 | make -j $(nproc) && \ 186 | make -j $(nproc) install && \ 187 | rm -rf ${DIR} 188 | ### libwebp https://developers.google.com/speed/webp/ 189 | RUN \ 190 | DIR=/tmp/vebp && \ 191 | mkdir -p ${DIR} && \ 192 | cd ${DIR} && \ 193 | curl -sL https://storage.googleapis.com/downloads.webmproject.org/releases/webp/libwebp-${WEBP_VERSION}.tar.gz | \ 194 | tar -zx --strip-components=1 && \ 195 | ./configure --prefix="${PREFIX}" --enable-shared && \ 196 | make -j $(nproc) && \ 197 | make -j $(nproc) install && \ 198 | rm -rf ${DIR} 199 | ### libmp3lame http://lame.sourceforge.net/ 200 | RUN \ 201 | DIR=/tmp/lame && \ 202 | mkdir -p ${DIR} && \ 203 | cd ${DIR} && \ 204 | curl -sL https://versaweb.dl.sourceforge.net/project/lame/lame/$(echo ${LAME_VERSION} | sed -e 's/[^0-9]*\([0-9]*\)[.]\([0-9]*\)[.]\([0-9]*\)\([0-9A-Za-z-]*\)/\1.\2/')/lame-${LAME_VERSION}.tar.gz | \ 205 | tar -zx --strip-components=1 && \ 206 | ./configure --prefix="${PREFIX}" --bindir="${PREFIX}/bin" --enable-shared --enable-nasm --disable-frontend && \ 207 | make -j $(nproc) && \ 208 | make -j $(nproc) install && \ 209 | rm -rf ${DIR} 210 | ### xvid https://www.xvid.com/ 211 | RUN \ 212 | DIR=/tmp/xvid && \ 213 | mkdir -p ${DIR} && \ 214 | cd ${DIR} && \ 215 | curl -sLO http://downloads.xvid.org/downloads/xvidcore-${XVID_VERSION}.tar.gz && \ 216 | echo ${XVID_SHA256SUM} | sha256sum --check && \ 217 | tar -zx -f xvidcore-${XVID_VERSION}.tar.gz && \ 218 | cd xvidcore/build/generic && \ 219 | ./configure --prefix="${PREFIX}" --bindir="${PREFIX}/bin" && \ 220 | make -j $(nproc) && \ 221 | make -j $(nproc) install && \ 222 | rm -rf ${DIR} 223 | ### fdk-aac https://github.com/mstorsjo/fdk-aac 224 | RUN \ 225 | DIR=/tmp/fdk-aac && \ 226 | mkdir -p ${DIR} && \ 227 | cd ${DIR} && \ 228 | curl -sL https://github.com/mstorsjo/fdk-aac/archive/v${FDKAAC_VERSION}.tar.gz | \ 229 | tar -zx --strip-components=1 && \ 230 | autoreconf -fiv && \ 231 | ./configure --prefix="${PREFIX}" --enable-shared --datadir="${DIR}" && \ 232 | make -j $(nproc) && \ 233 | make -j $(nproc) install && \ 234 | rm -rf ${DIR} 235 | ## openjpeg https://github.com/uclouvain/openjpeg 236 | RUN \ 237 | DIR=/tmp/openjpeg && \ 238 | mkdir -p ${DIR} && \ 239 | cd ${DIR} && \ 240 | curl -sL https://github.com/uclouvain/openjpeg/archive/v${OPENJPEG_VERSION}.tar.gz | \ 241 | tar -zx --strip-components=1 && \ 242 | export CFLAGS="${CFLAGS} -DPNG_ARM_NEON_OPT=0" && \ 243 | cmake -DBUILD_THIRDPARTY:BOOL=ON -DCMAKE_INSTALL_PREFIX="${PREFIX}" . && \ 244 | make -j $(nproc) && \ 245 | make -j $(nproc) install && \ 246 | rm -rf ${DIR} 247 | ## freetype https://www.freetype.org/ 248 | RUN \ 249 | DIR=/tmp/freetype && \ 250 | mkdir -p ${DIR} && \ 251 | cd ${DIR} && \ 252 | curl -sLO https://download.savannah.gnu.org/releases/freetype/freetype-${FREETYPE_VERSION}.tar.gz && \ 253 | echo ${FREETYPE_SHA256SUM} | sha256sum --check && \ 254 | tar -zx --strip-components=1 -f freetype-${FREETYPE_VERSION}.tar.gz && \ 255 | ./configure --prefix="${PREFIX}" --disable-static --enable-shared && \ 256 | make -j $(nproc) && \ 257 | make -j $(nproc) install && \ 258 | rm -rf ${DIR} 259 | ## libvstab https://github.com/georgmartius/vid.stab 260 | RUN \ 261 | DIR=/tmp/vid.stab && \ 262 | mkdir -p ${DIR} && \ 263 | cd ${DIR} && \ 264 | curl -sLO https://github.com/georgmartius/vid.stab/archive/v${LIBVIDSTAB_VERSION}.tar.gz && \ 265 | echo ${LIBVIDSTAB_SHA256SUM} | sha256sum --check && \ 266 | tar -zx --strip-components=1 -f v${LIBVIDSTAB_VERSION}.tar.gz && \ 267 | cmake -DCMAKE_INSTALL_PREFIX="${PREFIX}" . && \ 268 | make -j $(nproc) && \ 269 | make -j $(nproc) install && \ 270 | rm -rf ${DIR} 271 | ## fridibi https://www.fribidi.org/ 272 | RUN \ 273 | DIR=/tmp/fribidi && \ 274 | mkdir -p ${DIR} && \ 275 | cd ${DIR} && \ 276 | curl -sLO https://github.com/fribidi/fribidi/archive/${FRIBIDI_VERSION}.tar.gz && \ 277 | echo ${FRIBIDI_SHA256SUM} | sha256sum --check && \ 278 | tar -zx --strip-components=1 -f ${FRIBIDI_VERSION}.tar.gz && \ 279 | sed -i 's/^SUBDIRS =.*/SUBDIRS=gen.tab charset lib bin/' Makefile.am && \ 280 | ./bootstrap --no-config --auto && \ 281 | ./configure --prefix="${PREFIX}" --disable-static --enable-shared && \ 282 | make -j1 && \ 283 | make -j $(nproc) install && \ 284 | rm -rf ${DIR} 285 | 286 | ## kvazaar https://github.com/ultravideo/kvazaar 287 | RUN \ 288 | DIR=/tmp/kvazaar && \ 289 | mkdir -p ${DIR} && \ 290 | cd ${DIR} && \ 291 | curl -sLO https://github.com/ultravideo/kvazaar/archive/v${KVAZAAR_VERSION}.tar.gz && \ 292 | tar -zx --strip-components=1 -f v${KVAZAAR_VERSION}.tar.gz && \ 293 | ./autogen.sh && \ 294 | ./configure --prefix="${PREFIX}" --disable-static --enable-shared && \ 295 | make -j $(nproc) && \ 296 | make -j $(nproc) install && \ 297 | rm -rf ${DIR} 298 | 299 | # RUN \ 300 | # DIR=/tmp/aom && \ 301 | # git clone --branch ${AOM_VERSION} --depth 1 https://aomedia.googlesource.com/aom ${DIR} ; \ 302 | # cd ${DIR} ; \ 303 | # rm -rf CMakeCache.txt CMakeFiles ; \ 304 | # mkdir -p ./aom_build ; \ 305 | # cd ./aom_build ; \ 306 | # cmake -DCMAKE_INSTALL_PREFIX="${PREFIX}" -DBUILD_SHARED_LIBS=1 ..; \ 307 | # make ; \ 308 | # make install ; \ 309 | # rm -rf ${DIR} 310 | 311 | ## libxcb (and supporting libraries) for screen capture https://xcb.freedesktop.org/ 312 | RUN \ 313 | DIR=/tmp/xorg-macros && \ 314 | mkdir -p ${DIR} && \ 315 | cd ${DIR} && \ 316 | curl -sLO https://www.x.org/archive//individual/util/util-macros-${XORG_MACROS_VERSION}.tar.gz && \ 317 | tar -zx --strip-components=1 -f util-macros-${XORG_MACROS_VERSION}.tar.gz && \ 318 | ./configure --srcdir=${DIR} --prefix="${PREFIX}" && \ 319 | make -j $(nproc) && \ 320 | make -j $(nproc) install && \ 321 | rm -rf ${DIR} 322 | 323 | RUN \ 324 | DIR=/tmp/xproto && \ 325 | mkdir -p ${DIR} && \ 326 | cd ${DIR} && \ 327 | curl -sLO https://www.x.org/archive/individual/proto/xproto-${XPROTO_VERSION}.tar.gz && \ 328 | tar -zx --strip-components=1 -f xproto-${XPROTO_VERSION}.tar.gz && \ 329 | curl -sL 'http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD' -o config.guess && \ 330 | curl -sL 'http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD' -o config.sub && \ 331 | ./configure --srcdir=${DIR} --prefix="${PREFIX}" && \ 332 | make -j $(nproc) && \ 333 | make -j $(nproc) install && \ 334 | rm -rf ${DIR} 335 | 336 | RUN \ 337 | DIR=/tmp/libXau && \ 338 | mkdir -p ${DIR} && \ 339 | cd ${DIR} && \ 340 | curl -sLO https://www.x.org/archive/individual/lib/libXau-${XAU_VERSION}.tar.gz && \ 341 | tar -zx --strip-components=1 -f libXau-${XAU_VERSION}.tar.gz && \ 342 | ./configure --srcdir=${DIR} --prefix="${PREFIX}" && \ 343 | make -j $(nproc) && \ 344 | make -j $(nproc) install && \ 345 | rm -rf ${DIR} 346 | 347 | RUN \ 348 | DIR=/tmp/libpthread-stubs && \ 349 | mkdir -p ${DIR} && \ 350 | cd ${DIR} && \ 351 | curl -sLO https://xcb.freedesktop.org/dist/libpthread-stubs-${LIBPTHREAD_STUBS_VERSION}.tar.gz && \ 352 | tar -zx --strip-components=1 -f libpthread-stubs-${LIBPTHREAD_STUBS_VERSION}.tar.gz && \ 353 | ./configure --prefix="${PREFIX}" && \ 354 | make -j $(nproc) && \ 355 | make -j $(nproc) install && \ 356 | rm -rf ${DIR} 357 | 358 | RUN \ 359 | DIR=/tmp/libxcb-proto && \ 360 | mkdir -p ${DIR} && \ 361 | cd ${DIR} && \ 362 | curl -sLO https://xcb.freedesktop.org/dist/xcb-proto-${XCBPROTO_VERSION}.tar.gz && \ 363 | tar -zx --strip-components=1 -f xcb-proto-${XCBPROTO_VERSION}.tar.gz && \ 364 | ACLOCAL_PATH="${PREFIX}/share/aclocal" ./autogen.sh && \ 365 | ./configure --prefix="${PREFIX}" && \ 366 | make -j $(nproc) && \ 367 | make -j $(nproc) install && \ 368 | rm -rf ${DIR} 369 | 370 | RUN \ 371 | DIR=/tmp/libxcb && \ 372 | mkdir -p ${DIR} && \ 373 | cd ${DIR} && \ 374 | curl -sLO https://xcb.freedesktop.org/dist/libxcb-${LIBXCB_VERSION}.tar.gz && \ 375 | tar -zx --strip-components=1 -f libxcb-${LIBXCB_VERSION}.tar.gz && \ 376 | ACLOCAL_PATH="${PREFIX}/share/aclocal" ./autogen.sh && \ 377 | ./configure --prefix="${PREFIX}" --disable-static --enable-shared && \ 378 | make -j $(nproc) && \ 379 | make -j $(nproc) install && \ 380 | rm -rf ${DIR} 381 | 382 | ## libzmq https://github.com/zeromq/libzmq/ 383 | RUN \ 384 | DIR=/tmp/libzmq && \ 385 | mkdir -p ${DIR} && \ 386 | cd ${DIR} && \ 387 | curl -sLO https://github.com/zeromq/libzmq/archive/v${LIBZMQ_VERSION}.tar.gz && \ 388 | tar -xz --strip-components=1 -f v${LIBZMQ_VERSION}.tar.gz && \ 389 | ./autogen.sh && \ 390 | ./configure --prefix="${PREFIX}" && \ 391 | make -j $(nproc) && \ 392 | # make check && \ 393 | make -j $(nproc) install && \ 394 | rm -rf ${DIR} 395 | 396 | ## userland https://github.com/raspberrypi/userland 397 | RUN \ 398 | DIR=/tmp/userland && \ 399 | mkdir -p ${DIR} && \ 400 | cd ${DIR} && \ 401 | git clone --depth 1 https://github.com/raspberrypi/userland.git . && \ 402 | ./buildme && \ 403 | rm -rf ${DIR} 404 | 405 | ## ffmpeg https://ffmpeg.org/ 406 | RUN \ 407 | DIR=/tmp/ffmpeg && mkdir -p ${DIR} && cd ${DIR} && \ 408 | curl -sLO https://ffmpeg.org/releases/ffmpeg-${FFMPEG_VERSION}.tar.bz2 && \ 409 | tar -jx --strip-components=1 -f ffmpeg-${FFMPEG_VERSION}.tar.bz2 410 | 411 | RUN \ 412 | DIR=/tmp/ffmpeg && mkdir -p ${DIR} && cd ${DIR} && \ 413 | ./configure \ 414 | --disable-debug \ 415 | --disable-doc \ 416 | --disable-ffplay \ 417 | --enable-shared \ 418 | --enable-avresample \ 419 | --enable-libopencore-amrnb \ 420 | --enable-libopencore-amrwb \ 421 | --enable-gpl \ 422 | --enable-libfreetype \ 423 | --enable-libvidstab \ 424 | --enable-libmp3lame \ 425 | --enable-libopus \ 426 | --enable-libtheora \ 427 | --enable-libvorbis \ 428 | --enable-libvpx \ 429 | --enable-libwebp \ 430 | --enable-libxcb \ 431 | --enable-libx265 \ 432 | --enable-libxvid \ 433 | --enable-libx264 \ 434 | --enable-nonfree \ 435 | --enable-openssl \ 436 | --enable-libfdk_aac \ 437 | --enable-postproc \ 438 | --enable-small \ 439 | --enable-version3 \ 440 | --enable-libzmq \ 441 | --extra-libs=-ldl \ 442 | --prefix="${PREFIX}" \ 443 | --enable-libopenjpeg \ 444 | --enable-libkvazaar \ 445 | --enable-libaom \ 446 | --extra-libs=-lpthread \ 447 | --enable-omx \ 448 | --enable-omx-rpi \ 449 | --enable-mmal \ 450 | --enable-v4l2_m2m \ 451 | --enable-neon \ 452 | --extra-cflags="-I${PREFIX}/include" \ 453 | --extra-ldflags="-L${PREFIX}/lib" && \ 454 | make -j $(nproc) && \ 455 | make -j $(nproc) install && \ 456 | make tools/zmqsend && cp tools/zmqsend ${PREFIX}/bin/ && \ 457 | make distclean && \ 458 | hash -r && \ 459 | cd tools && \ 460 | make qt-faststart && cp qt-faststart ${PREFIX}/bin/ 461 | 462 | ## cleanup 463 | RUN \ 464 | ldd ${PREFIX}/bin/ffmpeg | grep opt/ffmpeg | cut -d ' ' -f 3 | xargs -i cp {} /usr/local/lib/ && \ 465 | # copy userland lib too 466 | ldd ${PREFIX}/bin/ffmpeg | grep opt/vc | cut -d ' ' -f 3 | xargs -i cp {} /usr/local/lib/ && \ 467 | for lib in /usr/local/lib/*.so.*; do ln -s "${lib##*/}" "${lib%%.so.*}".so; done && \ 468 | cp ${PREFIX}/bin/* /usr/local/bin/ && \ 469 | cp -r ${PREFIX}/share/ffmpeg /usr/local/share/ && \ 470 | LD_LIBRARY_PATH=/usr/local/lib ffmpeg -buildconf && \ 471 | cp -r ${PREFIX}/include/libav* ${PREFIX}/include/libpostproc ${PREFIX}/include/libsw* /usr/local/include && \ 472 | mkdir -p /usr/local/lib/pkgconfig && \ 473 | for pc in ${PREFIX}/lib/pkgconfig/libav*.pc ${PREFIX}/lib/pkgconfig/libpostproc.pc ${PREFIX}/lib/pkgconfig/libsw*.pc; do \ 474 | sed "s:${PREFIX}:/usr/local:g" <"$pc" >/usr/local/lib/pkgconfig/"${pc##*/}"; \ 475 | done 476 | 477 | FROM base AS release 478 | 479 | ENV LD_LIBRARY_PATH=/usr/local/lib:/usr/local/lib64:/usr/lib:/usr/lib64:/lib:/lib64 480 | 481 | RUN \ 482 | apt-get -yqq update && \ 483 | apt-get install -yq --no-install-recommends libx265-dev libaom-dev && \ 484 | apt-get autoremove -y && \ 485 | apt-get clean -y 486 | 487 | CMD ["--help"] 488 | ENTRYPOINT ["ffmpeg"] 489 | 490 | COPY --from=build /usr/local /usr/local/ 491 | -------------------------------------------------------------------------------- /docker/Dockerfile.web: -------------------------------------------------------------------------------- 1 | ARG NODE_VERSION=14.0 2 | 3 | FROM node:${NODE_VERSION} 4 | 5 | WORKDIR /opt/frigate 6 | 7 | COPY . . 8 | 9 | RUN npm install && npm run build 10 | -------------------------------------------------------------------------------- /docker/Dockerfile.wheels: -------------------------------------------------------------------------------- 1 | FROM ubuntu:20.04 as build 2 | 3 | ENV DEBIAN_FRONTEND=noninteractive 4 | 5 | RUN apt-get -qq update \ 6 | && apt-get -qq install -y \ 7 | python3 \ 8 | python3-dev \ 9 | wget \ 10 | # opencv dependencies 11 | build-essential cmake git pkg-config libgtk-3-dev \ 12 | libavcodec-dev libavformat-dev libswscale-dev libv4l-dev \ 13 | libxvidcore-dev libx264-dev libjpeg-dev libpng-dev libtiff-dev \ 14 | gfortran openexr libatlas-base-dev libssl-dev\ 15 | libtbb2 libtbb-dev libdc1394-22-dev libopenexr-dev \ 16 | libgstreamer-plugins-base1.0-dev libgstreamer1.0-dev \ 17 | # scipy dependencies 18 | gcc gfortran libopenblas-dev liblapack-dev cython 19 | 20 | RUN wget -q https://bootstrap.pypa.io/get-pip.py -O get-pip.py \ 21 | && python3 get-pip.py "pip==20.2.4" 22 | 23 | RUN pip3 install scikit-build 24 | 25 | RUN pip3 wheel --wheel-dir=/wheels \ 26 | opencv-python-headless \ 27 | numpy \ 28 | imutils \ 29 | scipy \ 30 | psutil \ 31 | Flask \ 32 | paho-mqtt \ 33 | PyYAML \ 34 | matplotlib \ 35 | click \ 36 | setproctitle \ 37 | peewee \ 38 | gevent 39 | 40 | FROM scratch 41 | 42 | COPY --from=build /wheels /wheels 43 | -------------------------------------------------------------------------------- /ffmpeg/nvmpi.patch: -------------------------------------------------------------------------------- 1 | diff -ruN ffmpeg-4.3.1-orig/configure ffmpeg-4.3.1/configure 2 | --- ffmpeg-4.3.1-orig/configure 2021-06-10 14:52:01.805097966 +0300 3 | +++ ffmpeg-4.3.1/configure 2021-06-10 14:56:32.246780445 +0300 4 | @@ -345,6 +345,7 @@ 5 | --disable-vaapi disable Video Acceleration API (mainly Unix/Intel) code [autodetect] 6 | --disable-vdpau disable Nvidia Video Decode and Presentation API for Unix code [autodetect] 7 | --disable-videotoolbox disable VideoToolbox code [autodetect] 8 | + --enable-nvmpi enable nvmpi code 9 | 10 | Toolchain options: 11 | --arch=ARCH select architecture [$arch] 12 | @@ -1861,6 +1862,7 @@ 13 | mmal 14 | omx 15 | opencl 16 | + nvmpi 17 | vulkan 18 | " 19 | 20 | @@ -3053,11 +3055,14 @@ 21 | h264_mf_encoder_deps="mediafoundation" 22 | h264_mmal_decoder_deps="mmal" 23 | h264_nvenc_encoder_deps="nvenc" 24 | +h264_nvmpi_encoder_deps="nvmpi" 25 | h264_omx_encoder_deps="omx" 26 | h264_qsv_decoder_select="h264_mp4toannexb_bsf qsvdec" 27 | h264_qsv_encoder_select="qsvenc" 28 | h264_rkmpp_decoder_deps="rkmpp" 29 | h264_rkmpp_decoder_select="h264_mp4toannexb_bsf" 30 | +h264_nvmpi_decoder_deps="nvmpi" 31 | +h264_nvmpi_decoder_select="h264_mp4toannexb_bsf" 32 | h264_vaapi_encoder_select="cbs_h264 vaapi_encode" 33 | h264_v4l2m2m_decoder_deps="v4l2_m2m h264_v4l2_m2m" 34 | h264_v4l2m2m_decoder_select="h264_mp4toannexb_bsf" 35 | @@ -3069,10 +3074,13 @@ 36 | hevc_mediacodec_decoder_select="hevc_mp4toannexb_bsf hevc_parser" 37 | hevc_mf_encoder_deps="mediafoundation" 38 | hevc_nvenc_encoder_deps="nvenc" 39 | +hevc_nvmpi_encoder_deps="nvmpi" 40 | hevc_qsv_decoder_select="hevc_mp4toannexb_bsf qsvdec" 41 | hevc_qsv_encoder_select="hevcparse qsvenc" 42 | hevc_rkmpp_decoder_deps="rkmpp" 43 | hevc_rkmpp_decoder_select="hevc_mp4toannexb_bsf" 44 | +hevc_nvmpi_decoder_deps="nvmpi" 45 | +hevc_nvmpi_decoder_select="hevc_mp4toannexb_bsf" 46 | hevc_vaapi_encoder_deps="VAEncPictureParameterBufferHEVC" 47 | hevc_vaapi_encoder_select="cbs_h265 vaapi_encode" 48 | hevc_v4l2m2m_decoder_deps="v4l2_m2m hevc_v4l2_m2m" 49 | @@ -3089,6 +3097,7 @@ 50 | mpeg1_v4l2m2m_decoder_deps="v4l2_m2m mpeg1_v4l2_m2m" 51 | mpeg2_crystalhd_decoder_select="crystalhd" 52 | mpeg2_cuvid_decoder_deps="cuvid" 53 | +mpeg2_nvmpi_decoder_deps="nvmpi" 54 | mpeg2_mmal_decoder_deps="mmal" 55 | mpeg2_mediacodec_decoder_deps="mediacodec" 56 | mpeg2_qsv_decoder_select="qsvdec" 57 | @@ -3097,6 +3106,7 @@ 58 | mpeg2_v4l2m2m_decoder_deps="v4l2_m2m mpeg2_v4l2_m2m" 59 | mpeg4_crystalhd_decoder_select="crystalhd" 60 | mpeg4_cuvid_decoder_deps="cuvid" 61 | +mpeg4_nvmpi_decoder_deps="nvmpi" 62 | mpeg4_mediacodec_decoder_deps="mediacodec" 63 | mpeg4_mmal_decoder_deps="mmal" 64 | mpeg4_omx_encoder_deps="omx" 65 | @@ -3111,6 +3121,7 @@ 66 | vc1_qsv_decoder_select="qsvdec" 67 | vc1_v4l2m2m_decoder_deps="v4l2_m2m vc1_v4l2_m2m" 68 | vp8_cuvid_decoder_deps="cuvid" 69 | +vp8_nvmpi_decoder_deps="nvmpi" 70 | vp8_mediacodec_decoder_deps="mediacodec" 71 | vp8_qsv_decoder_select="qsvdec" 72 | vp8_rkmpp_decoder_deps="rkmpp" 73 | @@ -3119,6 +3130,7 @@ 74 | vp8_v4l2m2m_decoder_deps="v4l2_m2m vp8_v4l2_m2m" 75 | vp8_v4l2m2m_encoder_deps="v4l2_m2m vp8_v4l2_m2m" 76 | vp9_cuvid_decoder_deps="cuvid" 77 | +vp9_nvmpi_decoder_deps="nvmpi" 78 | vp9_mediacodec_decoder_deps="mediacodec" 79 | vp9_qsv_decoder_select="qsvdec" 80 | vp9_rkmpp_decoder_deps="rkmpp" 81 | @@ -6476,6 +6488,7 @@ 82 | die "ERROR: rkmpp requires --enable-libdrm"; } 83 | } 84 | enabled vapoursynth && require_pkg_config vapoursynth "vapoursynth-script >= 42" VSScript.h vsscript_init 85 | +enabled nvmpi && require_pkg_config nvmpi nvmpi nvmpi.h nvmpi_create_decoder 86 | 87 | 88 | if enabled gcrypt; then 89 | diff -ruN ffmpeg-4.3.1-orig/libavcodec/Makefile ffmpeg-4.3.1/libavcodec/Makefile 90 | --- ffmpeg-4.3.1-orig/libavcodec/Makefile 2021-06-10 14:52:01.545092562 +0300 91 | +++ ffmpeg-4.3.1/libavcodec/Makefile 2021-06-10 14:58:49.845707701 +0300 92 | @@ -366,6 +366,8 @@ 93 | OBJS-$(CONFIG_H264_NVENC_ENCODER) += nvenc_h264.o 94 | OBJS-$(CONFIG_NVENC_ENCODER) += nvenc_h264.o 95 | OBJS-$(CONFIG_NVENC_H264_ENCODER) += nvenc_h264.o 96 | +OBJS-$(CONFIG_H264_NVMPI_DECODER) += nvmpi_dec.o 97 | +OBJS-$(CONFIG_H264_NVMPI_ENCODER) += nvmpi_enc.o 98 | OBJS-$(CONFIG_H264_OMX_ENCODER) += omx.o 99 | OBJS-$(CONFIG_H264_QSV_DECODER) += qsvdec_h2645.o 100 | OBJS-$(CONFIG_H264_QSV_ENCODER) += qsvenc_h264.o 101 | @@ -393,6 +395,8 @@ 102 | OBJS-$(CONFIG_HEVC_RKMPP_DECODER) += rkmppdec.o 103 | OBJS-$(CONFIG_HEVC_VAAPI_ENCODER) += vaapi_encode_h265.o h265_profile_level.o 104 | OBJS-$(CONFIG_HEVC_V4L2M2M_DECODER) += v4l2_m2m_dec.o 105 | +OBJS-$(CONFIG_HEVC_NVMPI_DECODER) += nvmpi_dec.o 106 | +OBJS-$(CONFIG_HEVC_NVMPI_ENCODER) += nvmpi_enc.o 107 | OBJS-$(CONFIG_HEVC_V4L2M2M_ENCODER) += v4l2_m2m_enc.o 108 | OBJS-$(CONFIG_HNM4_VIDEO_DECODER) += hnm4video.o 109 | OBJS-$(CONFIG_HQ_HQA_DECODER) += hq_hqa.o hq_hqadata.o hq_hqadsp.o \ 110 | @@ -481,11 +485,13 @@ 111 | OBJS-$(CONFIG_MPEG2VIDEO_DECODER) += mpeg12dec.o mpeg12.o mpeg12data.o 112 | OBJS-$(CONFIG_MPEG2VIDEO_ENCODER) += mpeg12enc.o mpeg12.o 113 | OBJS-$(CONFIG_MPEG2_CUVID_DECODER) += cuviddec.o 114 | +OBJS-$(CONFIG_MPEG2_NVMPI_DECODER) += nvmpi_dec.o 115 | OBJS-$(CONFIG_MPEG2_MEDIACODEC_DECODER) += mediacodecdec.o 116 | OBJS-$(CONFIG_MPEG2_VAAPI_ENCODER) += vaapi_encode_mpeg2.o 117 | OBJS-$(CONFIG_MPEG2_V4L2M2M_DECODER) += v4l2_m2m_dec.o 118 | OBJS-$(CONFIG_MPEG4_DECODER) += xvididct.o 119 | OBJS-$(CONFIG_MPEG4_CUVID_DECODER) += cuviddec.o 120 | +OBJS-$(CONFIG_MPEG4_NVMPI_DECODER) += nvmpi_dec.o 121 | OBJS-$(CONFIG_MPEG4_MEDIACODEC_DECODER) += mediacodecdec.o 122 | OBJS-$(CONFIG_MPEG4_OMX_ENCODER) += omx.o 123 | OBJS-$(CONFIG_MPEG4_V4L2M2M_DECODER) += v4l2_m2m_dec.o 124 | @@ -692,6 +698,7 @@ 125 | OBJS-$(CONFIG_VP7_DECODER) += vp8.o vp56rac.o 126 | OBJS-$(CONFIG_VP8_DECODER) += vp8.o vp56rac.o 127 | OBJS-$(CONFIG_VP8_CUVID_DECODER) += cuviddec.o 128 | +OBJS-$(CONFIG_VP8_NVMPI_DECODER) += nvmpi_dec.o 129 | OBJS-$(CONFIG_VP8_MEDIACODEC_DECODER) += mediacodecdec.o 130 | OBJS-$(CONFIG_VP8_QSV_DECODER) += qsvdec_other.o 131 | OBJS-$(CONFIG_VP8_RKMPP_DECODER) += rkmppdec.o 132 | @@ -702,6 +709,7 @@ 133 | vp9block.o vp9prob.o vp9mvs.o vp56rac.o \ 134 | vp9dsp_8bpp.o vp9dsp_10bpp.o vp9dsp_12bpp.o 135 | OBJS-$(CONFIG_VP9_CUVID_DECODER) += cuviddec.o 136 | +OBJS-$(CONFIG_VP9_NVMPI_DECODER) += nvmpi_dec.o 137 | OBJS-$(CONFIG_VP9_MEDIACODEC_DECODER) += mediacodecdec.o 138 | OBJS-$(CONFIG_VP9_RKMPP_DECODER) += rkmppdec.o 139 | OBJS-$(CONFIG_VP9_VAAPI_ENCODER) += vaapi_encode_vp9.o 140 | diff -ruN ffmpeg-4.3.1-orig/libavcodec/allcodecs.c ffmpeg-4.3.1/libavcodec/allcodecs.c 141 | --- ffmpeg-4.3.1-orig/libavcodec/allcodecs.c 2021-06-10 14:52:01.721096220 +0300 142 | +++ ffmpeg-4.3.1/libavcodec/allcodecs.c 2021-06-10 15:00:56.684421116 +0300 143 | @@ -144,11 +144,15 @@ 144 | extern AVCodec ff_h264_mmal_decoder; 145 | extern AVCodec ff_h264_qsv_decoder; 146 | extern AVCodec ff_h264_rkmpp_decoder; 147 | +extern AVCodec ff_h264_nvmpi_decoder; 148 | +extern AVCodec ff_h264_nvmpi_encoder; 149 | extern AVCodec ff_hap_encoder; 150 | extern AVCodec ff_hap_decoder; 151 | extern AVCodec ff_hevc_decoder; 152 | extern AVCodec ff_hevc_qsv_decoder; 153 | extern AVCodec ff_hevc_rkmpp_decoder; 154 | +extern AVCodec ff_hevc_nvmpi_decoder; 155 | +extern AVCodec ff_hevc_nvmpi_encoder; 156 | extern AVCodec ff_hevc_v4l2m2m_decoder; 157 | extern AVCodec ff_hnm4_video_decoder; 158 | extern AVCodec ff_hq_hqa_decoder; 159 | @@ -791,19 +795,23 @@ 160 | extern AVCodec ff_mjpeg_vaapi_encoder; 161 | extern AVCodec ff_mpeg1_cuvid_decoder; 162 | extern AVCodec ff_mpeg2_cuvid_decoder; 163 | +extern AVCodec ff_mpeg2_nvmpi_decoder; 164 | extern AVCodec ff_mpeg2_qsv_encoder; 165 | extern AVCodec ff_mpeg2_vaapi_encoder; 166 | extern AVCodec ff_mpeg4_cuvid_decoder; 167 | +extern AVCodec ff_mpeg4_nvmpi_decoder; 168 | extern AVCodec ff_mpeg4_mediacodec_decoder; 169 | extern AVCodec ff_mpeg4_omx_encoder; 170 | extern AVCodec ff_mpeg4_v4l2m2m_encoder; 171 | extern AVCodec ff_vc1_cuvid_decoder; 172 | extern AVCodec ff_vp8_cuvid_decoder; 173 | +extern AVCodec ff_vp8_nvmpi_decoder; 174 | extern AVCodec ff_vp8_mediacodec_decoder; 175 | extern AVCodec ff_vp8_qsv_decoder; 176 | extern AVCodec ff_vp8_v4l2m2m_encoder; 177 | extern AVCodec ff_vp8_vaapi_encoder; 178 | extern AVCodec ff_vp9_cuvid_decoder; 179 | +extern AVCodec ff_vp9_nvmpi_decoder; 180 | extern AVCodec ff_vp9_mediacodec_decoder; 181 | extern AVCodec ff_vp9_qsv_decoder; 182 | extern AVCodec ff_vp9_vaapi_encoder; 183 | diff -ruN ffmpeg-4.3.1-orig/libavcodec/bsf_list.c ffmpeg-4.3.1/libavcodec/bsf_list.c 184 | --- ffmpeg-4.3.1-orig/libavcodec/bsf_list.c 1970-01-01 03:00:00.000000000 +0300 185 | +++ ffmpeg-4.3.1/libavcodec/bsf_list.c 2021-06-10 15:07:03.528323606 +0300 186 | @@ -0,0 +1,38 @@ 187 | +static const AVBitStreamFilter * const bitstream_filters[] = { 188 | + &ff_aac_adtstoasc_bsf, 189 | + &ff_av1_frame_merge_bsf, 190 | + &ff_av1_frame_split_bsf, 191 | + &ff_av1_metadata_bsf, 192 | + &ff_chomp_bsf, 193 | + &ff_dump_extradata_bsf, 194 | + &ff_dca_core_bsf, 195 | + &ff_eac3_core_bsf, 196 | + &ff_extract_extradata_bsf, 197 | + &ff_filter_units_bsf, 198 | + &ff_h264_metadata_bsf, 199 | + &ff_h264_mp4toannexb_bsf, 200 | + &ff_h264_redundant_pps_bsf, 201 | + &ff_hapqa_extract_bsf, 202 | + &ff_hevc_metadata_bsf, 203 | + &ff_hevc_mp4toannexb_bsf, 204 | + &ff_imx_dump_header_bsf, 205 | + &ff_mjpeg2jpeg_bsf, 206 | + &ff_mjpega_dump_header_bsf, 207 | + &ff_mp3_header_decompress_bsf, 208 | + &ff_mpeg2_metadata_bsf, 209 | + &ff_mpeg4_unpack_bframes_bsf, 210 | + &ff_mov2textsub_bsf, 211 | + &ff_noise_bsf, 212 | + &ff_null_bsf, 213 | + &ff_opus_metadata_bsf, 214 | + &ff_pcm_rechunk_bsf, 215 | + &ff_prores_metadata_bsf, 216 | + &ff_remove_extradata_bsf, 217 | + &ff_text2movsub_bsf, 218 | + &ff_trace_headers_bsf, 219 | + &ff_truehd_core_bsf, 220 | + &ff_vp9_metadata_bsf, 221 | + &ff_vp9_raw_reorder_bsf, 222 | + &ff_vp9_superframe_bsf, 223 | + &ff_vp9_superframe_split_bsf, 224 | + NULL }; 225 | diff -ruN ffmpeg-4.3.1-orig/libavcodec/codec_list.c ffmpeg-4.3.1/libavcodec/codec_list.c 226 | --- ffmpeg-4.3.1-orig/libavcodec/codec_list.c 1970-01-01 03:00:00.000000000 +0300 227 | +++ ffmpeg-4.3.1/libavcodec/codec_list.c 2021-06-10 15:07:03.492322828 +0300 228 | @@ -0,0 +1,633 @@ 229 | +static const AVCodec * const codec_list[] = { 230 | + &ff_a64multi_encoder, 231 | + &ff_a64multi5_encoder, 232 | + &ff_alias_pix_encoder, 233 | + &ff_amv_encoder, 234 | + &ff_apng_encoder, 235 | + &ff_asv1_encoder, 236 | + &ff_asv2_encoder, 237 | + &ff_avrp_encoder, 238 | + &ff_avui_encoder, 239 | + &ff_ayuv_encoder, 240 | + &ff_bmp_encoder, 241 | + &ff_cinepak_encoder, 242 | + &ff_cljr_encoder, 243 | + &ff_comfortnoise_encoder, 244 | + &ff_dnxhd_encoder, 245 | + &ff_dpx_encoder, 246 | + &ff_dvvideo_encoder, 247 | + &ff_ffv1_encoder, 248 | + &ff_ffvhuff_encoder, 249 | + &ff_fits_encoder, 250 | + &ff_flashsv_encoder, 251 | + &ff_flashsv2_encoder, 252 | + &ff_flv_encoder, 253 | + &ff_gif_encoder, 254 | + &ff_h261_encoder, 255 | + &ff_h263_encoder, 256 | + &ff_h263p_encoder, 257 | + &ff_h264_nvmpi_encoder, 258 | + &ff_hevc_nvmpi_encoder, 259 | + &ff_huffyuv_encoder, 260 | + &ff_jpeg2000_encoder, 261 | + &ff_jpegls_encoder, 262 | + &ff_ljpeg_encoder, 263 | + &ff_magicyuv_encoder, 264 | + &ff_mjpeg_encoder, 265 | + &ff_mpeg1video_encoder, 266 | + &ff_mpeg2video_encoder, 267 | + &ff_mpeg4_encoder, 268 | + &ff_msmpeg4v2_encoder, 269 | + &ff_msmpeg4v3_encoder, 270 | + &ff_msvideo1_encoder, 271 | + &ff_pam_encoder, 272 | + &ff_pbm_encoder, 273 | + &ff_pcx_encoder, 274 | + &ff_pgm_encoder, 275 | + &ff_pgmyuv_encoder, 276 | + &ff_png_encoder, 277 | + &ff_ppm_encoder, 278 | + &ff_prores_encoder, 279 | + &ff_prores_aw_encoder, 280 | + &ff_prores_ks_encoder, 281 | + &ff_qtrle_encoder, 282 | + &ff_r10k_encoder, 283 | + &ff_r210_encoder, 284 | + &ff_rawvideo_encoder, 285 | + &ff_roq_encoder, 286 | + &ff_rv10_encoder, 287 | + &ff_rv20_encoder, 288 | + &ff_s302m_encoder, 289 | + &ff_sgi_encoder, 290 | + &ff_snow_encoder, 291 | + &ff_sunrast_encoder, 292 | + &ff_svq1_encoder, 293 | + &ff_targa_encoder, 294 | + &ff_tiff_encoder, 295 | + &ff_utvideo_encoder, 296 | + &ff_v210_encoder, 297 | + &ff_v308_encoder, 298 | + &ff_v408_encoder, 299 | + &ff_v410_encoder, 300 | + &ff_vc2_encoder, 301 | + &ff_wrapped_avframe_encoder, 302 | + &ff_wmv1_encoder, 303 | + &ff_wmv2_encoder, 304 | + &ff_xbm_encoder, 305 | + &ff_xface_encoder, 306 | + &ff_xwd_encoder, 307 | + &ff_y41p_encoder, 308 | + &ff_yuv4_encoder, 309 | + &ff_zlib_encoder, 310 | + &ff_zmbv_encoder, 311 | + &ff_aac_encoder, 312 | + &ff_ac3_encoder, 313 | + &ff_ac3_fixed_encoder, 314 | + &ff_alac_encoder, 315 | + &ff_aptx_encoder, 316 | + &ff_aptx_hd_encoder, 317 | + &ff_dca_encoder, 318 | + &ff_eac3_encoder, 319 | + &ff_flac_encoder, 320 | + &ff_g723_1_encoder, 321 | + &ff_mlp_encoder, 322 | + &ff_mp2_encoder, 323 | + &ff_mp2fixed_encoder, 324 | + &ff_nellymoser_encoder, 325 | + &ff_opus_encoder, 326 | + &ff_ra_144_encoder, 327 | + &ff_sbc_encoder, 328 | + &ff_sonic_encoder, 329 | + &ff_sonic_ls_encoder, 330 | + &ff_truehd_encoder, 331 | + &ff_tta_encoder, 332 | + &ff_vorbis_encoder, 333 | + &ff_wavpack_encoder, 334 | + &ff_wmav1_encoder, 335 | + &ff_wmav2_encoder, 336 | + &ff_pcm_alaw_encoder, 337 | + &ff_pcm_dvd_encoder, 338 | + &ff_pcm_f32be_encoder, 339 | + &ff_pcm_f32le_encoder, 340 | + &ff_pcm_f64be_encoder, 341 | + &ff_pcm_f64le_encoder, 342 | + &ff_pcm_mulaw_encoder, 343 | + &ff_pcm_s8_encoder, 344 | + &ff_pcm_s8_planar_encoder, 345 | + &ff_pcm_s16be_encoder, 346 | + &ff_pcm_s16be_planar_encoder, 347 | + &ff_pcm_s16le_encoder, 348 | + &ff_pcm_s16le_planar_encoder, 349 | + &ff_pcm_s24be_encoder, 350 | + &ff_pcm_s24daud_encoder, 351 | + &ff_pcm_s24le_encoder, 352 | + &ff_pcm_s24le_planar_encoder, 353 | + &ff_pcm_s32be_encoder, 354 | + &ff_pcm_s32le_encoder, 355 | + &ff_pcm_s32le_planar_encoder, 356 | + &ff_pcm_s64be_encoder, 357 | + &ff_pcm_s64le_encoder, 358 | + &ff_pcm_u8_encoder, 359 | + &ff_pcm_u16be_encoder, 360 | + &ff_pcm_u16le_encoder, 361 | + &ff_pcm_u24be_encoder, 362 | + &ff_pcm_u24le_encoder, 363 | + &ff_pcm_u32be_encoder, 364 | + &ff_pcm_u32le_encoder, 365 | + &ff_pcm_vidc_encoder, 366 | + &ff_roq_dpcm_encoder, 367 | + &ff_adpcm_adx_encoder, 368 | + &ff_adpcm_g722_encoder, 369 | + &ff_adpcm_g726_encoder, 370 | + &ff_adpcm_g726le_encoder, 371 | + &ff_adpcm_ima_qt_encoder, 372 | + &ff_adpcm_ima_ssi_encoder, 373 | + &ff_adpcm_ima_wav_encoder, 374 | + &ff_adpcm_ms_encoder, 375 | + &ff_adpcm_swf_encoder, 376 | + &ff_adpcm_yamaha_encoder, 377 | + &ff_ssa_encoder, 378 | + &ff_ass_encoder, 379 | + &ff_dvbsub_encoder, 380 | + &ff_dvdsub_encoder, 381 | + &ff_movtext_encoder, 382 | + &ff_srt_encoder, 383 | + &ff_subrip_encoder, 384 | + &ff_text_encoder, 385 | + &ff_webvtt_encoder, 386 | + &ff_xsub_encoder, 387 | + &ff_h263_v4l2m2m_encoder, 388 | + &ff_h264_v4l2m2m_encoder, 389 | + &ff_hevc_v4l2m2m_encoder, 390 | + &ff_mpeg4_v4l2m2m_encoder, 391 | + &ff_vp8_v4l2m2m_encoder, 392 | + &ff_aasc_decoder, 393 | + &ff_aic_decoder, 394 | + &ff_alias_pix_decoder, 395 | + &ff_agm_decoder, 396 | + &ff_amv_decoder, 397 | + &ff_anm_decoder, 398 | + &ff_ansi_decoder, 399 | + &ff_apng_decoder, 400 | + &ff_arbc_decoder, 401 | + &ff_asv1_decoder, 402 | + &ff_asv2_decoder, 403 | + &ff_aura_decoder, 404 | + &ff_aura2_decoder, 405 | + &ff_avrp_decoder, 406 | + &ff_avrn_decoder, 407 | + &ff_avs_decoder, 408 | + &ff_avui_decoder, 409 | + &ff_ayuv_decoder, 410 | + &ff_bethsoftvid_decoder, 411 | + &ff_bfi_decoder, 412 | + &ff_bink_decoder, 413 | + &ff_bitpacked_decoder, 414 | + &ff_bmp_decoder, 415 | + &ff_bmv_video_decoder, 416 | + &ff_brender_pix_decoder, 417 | + &ff_c93_decoder, 418 | + &ff_cavs_decoder, 419 | + &ff_cdgraphics_decoder, 420 | + &ff_cdtoons_decoder, 421 | + &ff_cdxl_decoder, 422 | + &ff_cfhd_decoder, 423 | + &ff_cinepak_decoder, 424 | + &ff_clearvideo_decoder, 425 | + &ff_cljr_decoder, 426 | + &ff_cllc_decoder, 427 | + &ff_comfortnoise_decoder, 428 | + &ff_cpia_decoder, 429 | + &ff_cscd_decoder, 430 | + &ff_cyuv_decoder, 431 | + &ff_dds_decoder, 432 | + &ff_dfa_decoder, 433 | + &ff_dirac_decoder, 434 | + &ff_dnxhd_decoder, 435 | + &ff_dpx_decoder, 436 | + &ff_dsicinvideo_decoder, 437 | + &ff_dvaudio_decoder, 438 | + &ff_dvvideo_decoder, 439 | + &ff_dxa_decoder, 440 | + &ff_dxtory_decoder, 441 | + &ff_dxv_decoder, 442 | + &ff_eacmv_decoder, 443 | + &ff_eamad_decoder, 444 | + &ff_eatgq_decoder, 445 | + &ff_eatgv_decoder, 446 | + &ff_eatqi_decoder, 447 | + &ff_eightbps_decoder, 448 | + &ff_eightsvx_exp_decoder, 449 | + &ff_eightsvx_fib_decoder, 450 | + &ff_escape124_decoder, 451 | + &ff_escape130_decoder, 452 | + &ff_exr_decoder, 453 | + &ff_ffv1_decoder, 454 | + &ff_ffvhuff_decoder, 455 | + &ff_fic_decoder, 456 | + &ff_fits_decoder, 457 | + &ff_flashsv_decoder, 458 | + &ff_flashsv2_decoder, 459 | + &ff_flic_decoder, 460 | + &ff_flv_decoder, 461 | + &ff_fmvc_decoder, 462 | + &ff_fourxm_decoder, 463 | + &ff_fraps_decoder, 464 | + &ff_frwu_decoder, 465 | + &ff_g2m_decoder, 466 | + &ff_gdv_decoder, 467 | + &ff_gif_decoder, 468 | + &ff_h261_decoder, 469 | + &ff_h263_decoder, 470 | + &ff_h263i_decoder, 471 | + &ff_h263p_decoder, 472 | + &ff_h263_v4l2m2m_decoder, 473 | + &ff_h264_decoder, 474 | + &ff_h264_v4l2m2m_decoder, 475 | + &ff_h264_nvmpi_decoder, 476 | + &ff_hap_decoder, 477 | + &ff_hevc_decoder, 478 | + &ff_hevc_nvmpi_decoder, 479 | + &ff_hevc_v4l2m2m_decoder, 480 | + &ff_hnm4_video_decoder, 481 | + &ff_hq_hqa_decoder, 482 | + &ff_hqx_decoder, 483 | + &ff_huffyuv_decoder, 484 | + &ff_hymt_decoder, 485 | + &ff_idcin_decoder, 486 | + &ff_iff_ilbm_decoder, 487 | + &ff_imm4_decoder, 488 | + &ff_imm5_decoder, 489 | + &ff_indeo2_decoder, 490 | + &ff_indeo3_decoder, 491 | + &ff_indeo4_decoder, 492 | + &ff_indeo5_decoder, 493 | + &ff_interplay_video_decoder, 494 | + &ff_jpeg2000_decoder, 495 | + &ff_jpegls_decoder, 496 | + &ff_jv_decoder, 497 | + &ff_kgv1_decoder, 498 | + &ff_kmvc_decoder, 499 | + &ff_lagarith_decoder, 500 | + &ff_loco_decoder, 501 | + &ff_lscr_decoder, 502 | + &ff_m101_decoder, 503 | + &ff_magicyuv_decoder, 504 | + &ff_mdec_decoder, 505 | + &ff_mimic_decoder, 506 | + &ff_mjpeg_decoder, 507 | + &ff_mjpegb_decoder, 508 | + &ff_mmvideo_decoder, 509 | + &ff_motionpixels_decoder, 510 | + &ff_mpeg1video_decoder, 511 | + &ff_mpeg2video_decoder, 512 | + &ff_mpeg4_decoder, 513 | + &ff_mpeg4_v4l2m2m_decoder, 514 | + &ff_mpegvideo_decoder, 515 | + &ff_mpeg1_v4l2m2m_decoder, 516 | + &ff_mpeg2_v4l2m2m_decoder, 517 | + &ff_msa1_decoder, 518 | + &ff_mscc_decoder, 519 | + &ff_msmpeg4v1_decoder, 520 | + &ff_msmpeg4v2_decoder, 521 | + &ff_msmpeg4v3_decoder, 522 | + &ff_msrle_decoder, 523 | + &ff_mss1_decoder, 524 | + &ff_mss2_decoder, 525 | + &ff_msvideo1_decoder, 526 | + &ff_mszh_decoder, 527 | + &ff_mts2_decoder, 528 | + &ff_mv30_decoder, 529 | + &ff_mvc1_decoder, 530 | + &ff_mvc2_decoder, 531 | + &ff_mvdv_decoder, 532 | + &ff_mvha_decoder, 533 | + &ff_mwsc_decoder, 534 | + &ff_mxpeg_decoder, 535 | + &ff_notchlc_decoder, 536 | + &ff_nuv_decoder, 537 | + &ff_paf_video_decoder, 538 | + &ff_pam_decoder, 539 | + &ff_pbm_decoder, 540 | + &ff_pcx_decoder, 541 | + &ff_pfm_decoder, 542 | + &ff_pgm_decoder, 543 | + &ff_pgmyuv_decoder, 544 | + &ff_pictor_decoder, 545 | + &ff_pixlet_decoder, 546 | + &ff_png_decoder, 547 | + &ff_ppm_decoder, 548 | + &ff_prores_decoder, 549 | + &ff_prosumer_decoder, 550 | + &ff_psd_decoder, 551 | + &ff_ptx_decoder, 552 | + &ff_qdraw_decoder, 553 | + &ff_qpeg_decoder, 554 | + &ff_qtrle_decoder, 555 | + &ff_r10k_decoder, 556 | + &ff_r210_decoder, 557 | + &ff_rasc_decoder, 558 | + &ff_rawvideo_decoder, 559 | + &ff_rl2_decoder, 560 | + &ff_roq_decoder, 561 | + &ff_rpza_decoder, 562 | + &ff_rscc_decoder, 563 | + &ff_rv10_decoder, 564 | + &ff_rv20_decoder, 565 | + &ff_rv30_decoder, 566 | + &ff_rv40_decoder, 567 | + &ff_s302m_decoder, 568 | + &ff_sanm_decoder, 569 | + &ff_scpr_decoder, 570 | + &ff_screenpresso_decoder, 571 | + &ff_sgi_decoder, 572 | + &ff_sgirle_decoder, 573 | + &ff_sheervideo_decoder, 574 | + &ff_smacker_decoder, 575 | + &ff_smc_decoder, 576 | + &ff_smvjpeg_decoder, 577 | + &ff_snow_decoder, 578 | + &ff_sp5x_decoder, 579 | + &ff_speedhq_decoder, 580 | + &ff_srgc_decoder, 581 | + &ff_sunrast_decoder, 582 | + &ff_svq1_decoder, 583 | + &ff_svq3_decoder, 584 | + &ff_targa_decoder, 585 | + &ff_targa_y216_decoder, 586 | + &ff_tdsc_decoder, 587 | + &ff_theora_decoder, 588 | + &ff_thp_decoder, 589 | + &ff_tiertexseqvideo_decoder, 590 | + &ff_tiff_decoder, 591 | + &ff_tmv_decoder, 592 | + &ff_truemotion1_decoder, 593 | + &ff_truemotion2_decoder, 594 | + &ff_truemotion2rt_decoder, 595 | + &ff_tscc_decoder, 596 | + &ff_tscc2_decoder, 597 | + &ff_txd_decoder, 598 | + &ff_ulti_decoder, 599 | + &ff_utvideo_decoder, 600 | + &ff_v210_decoder, 601 | + &ff_v210x_decoder, 602 | + &ff_v308_decoder, 603 | + &ff_v408_decoder, 604 | + &ff_v410_decoder, 605 | + &ff_vb_decoder, 606 | + &ff_vble_decoder, 607 | + &ff_vc1_decoder, 608 | + &ff_vc1image_decoder, 609 | + &ff_vc1_v4l2m2m_decoder, 610 | + &ff_vcr1_decoder, 611 | + &ff_vmdvideo_decoder, 612 | + &ff_vmnc_decoder, 613 | + &ff_vp3_decoder, 614 | + &ff_vp4_decoder, 615 | + &ff_vp5_decoder, 616 | + &ff_vp6_decoder, 617 | + &ff_vp6a_decoder, 618 | + &ff_vp6f_decoder, 619 | + &ff_vp7_decoder, 620 | + &ff_vp8_decoder, 621 | + &ff_vp8_v4l2m2m_decoder, 622 | + &ff_vp9_decoder, 623 | + &ff_vp9_v4l2m2m_decoder, 624 | + &ff_vqa_decoder, 625 | + &ff_webp_decoder, 626 | + &ff_wcmv_decoder, 627 | + &ff_wrapped_avframe_decoder, 628 | + &ff_wmv1_decoder, 629 | + &ff_wmv2_decoder, 630 | + &ff_wmv3_decoder, 631 | + &ff_wmv3image_decoder, 632 | + &ff_wnv1_decoder, 633 | + &ff_xan_wc3_decoder, 634 | + &ff_xan_wc4_decoder, 635 | + &ff_xbm_decoder, 636 | + &ff_xface_decoder, 637 | + &ff_xl_decoder, 638 | + &ff_xpm_decoder, 639 | + &ff_xwd_decoder, 640 | + &ff_y41p_decoder, 641 | + &ff_ylc_decoder, 642 | + &ff_yop_decoder, 643 | + &ff_yuv4_decoder, 644 | + &ff_zero12v_decoder, 645 | + &ff_zerocodec_decoder, 646 | + &ff_zlib_decoder, 647 | + &ff_zmbv_decoder, 648 | + &ff_aac_decoder, 649 | + &ff_aac_fixed_decoder, 650 | + &ff_aac_latm_decoder, 651 | + &ff_ac3_decoder, 652 | + &ff_ac3_fixed_decoder, 653 | + &ff_acelp_kelvin_decoder, 654 | + &ff_alac_decoder, 655 | + &ff_als_decoder, 656 | + &ff_amrnb_decoder, 657 | + &ff_amrwb_decoder, 658 | + &ff_ape_decoder, 659 | + &ff_aptx_decoder, 660 | + &ff_aptx_hd_decoder, 661 | + &ff_atrac1_decoder, 662 | + &ff_atrac3_decoder, 663 | + &ff_atrac3al_decoder, 664 | + &ff_atrac3p_decoder, 665 | + &ff_atrac3pal_decoder, 666 | + &ff_atrac9_decoder, 667 | + &ff_binkaudio_dct_decoder, 668 | + &ff_binkaudio_rdft_decoder, 669 | + &ff_bmv_audio_decoder, 670 | + &ff_cook_decoder, 671 | + &ff_dca_decoder, 672 | + &ff_dolby_e_decoder, 673 | + &ff_dsd_lsbf_decoder, 674 | + &ff_dsd_msbf_decoder, 675 | + &ff_dsd_lsbf_planar_decoder, 676 | + &ff_dsd_msbf_planar_decoder, 677 | + &ff_dsicinaudio_decoder, 678 | + &ff_dss_sp_decoder, 679 | + &ff_dst_decoder, 680 | + &ff_eac3_decoder, 681 | + &ff_evrc_decoder, 682 | + &ff_ffwavesynth_decoder, 683 | + &ff_flac_decoder, 684 | + &ff_g723_1_decoder, 685 | + &ff_g729_decoder, 686 | + &ff_gsm_decoder, 687 | + &ff_gsm_ms_decoder, 688 | + &ff_hca_decoder, 689 | + &ff_hcom_decoder, 690 | + &ff_iac_decoder, 691 | + &ff_ilbc_decoder, 692 | + &ff_imc_decoder, 693 | + &ff_interplay_acm_decoder, 694 | + &ff_mace3_decoder, 695 | + &ff_mace6_decoder, 696 | + &ff_metasound_decoder, 697 | + &ff_mlp_decoder, 698 | + &ff_mp1_decoder, 699 | + &ff_mp1float_decoder, 700 | + &ff_mp2_decoder, 701 | + &ff_mp2float_decoder, 702 | + &ff_mp3float_decoder, 703 | + &ff_mp3_decoder, 704 | + &ff_mp3adufloat_decoder, 705 | + &ff_mp3adu_decoder, 706 | + &ff_mp3on4float_decoder, 707 | + &ff_mp3on4_decoder, 708 | + &ff_mpc7_decoder, 709 | + &ff_mpc8_decoder, 710 | + &ff_nellymoser_decoder, 711 | + &ff_on2avc_decoder, 712 | + &ff_opus_decoder, 713 | + &ff_paf_audio_decoder, 714 | + &ff_qcelp_decoder, 715 | + &ff_qdm2_decoder, 716 | + &ff_qdmc_decoder, 717 | + &ff_ra_144_decoder, 718 | + &ff_ra_288_decoder, 719 | + &ff_ralf_decoder, 720 | + &ff_sbc_decoder, 721 | + &ff_shorten_decoder, 722 | + &ff_sipr_decoder, 723 | + &ff_siren_decoder, 724 | + &ff_smackaud_decoder, 725 | + &ff_sonic_decoder, 726 | + &ff_tak_decoder, 727 | + &ff_truehd_decoder, 728 | + &ff_truespeech_decoder, 729 | + &ff_tta_decoder, 730 | + &ff_twinvq_decoder, 731 | + &ff_vmdaudio_decoder, 732 | + &ff_vorbis_decoder, 733 | + &ff_wavpack_decoder, 734 | + &ff_wmalossless_decoder, 735 | + &ff_wmapro_decoder, 736 | + &ff_wmav1_decoder, 737 | + &ff_wmav2_decoder, 738 | + &ff_wmavoice_decoder, 739 | + &ff_ws_snd1_decoder, 740 | + &ff_xma1_decoder, 741 | + &ff_xma2_decoder, 742 | + &ff_pcm_alaw_decoder, 743 | + &ff_pcm_bluray_decoder, 744 | + &ff_pcm_dvd_decoder, 745 | + &ff_pcm_f16le_decoder, 746 | + &ff_pcm_f24le_decoder, 747 | + &ff_pcm_f32be_decoder, 748 | + &ff_pcm_f32le_decoder, 749 | + &ff_pcm_f64be_decoder, 750 | + &ff_pcm_f64le_decoder, 751 | + &ff_pcm_lxf_decoder, 752 | + &ff_pcm_mulaw_decoder, 753 | + &ff_pcm_s8_decoder, 754 | + &ff_pcm_s8_planar_decoder, 755 | + &ff_pcm_s16be_decoder, 756 | + &ff_pcm_s16be_planar_decoder, 757 | + &ff_pcm_s16le_decoder, 758 | + &ff_pcm_s16le_planar_decoder, 759 | + &ff_pcm_s24be_decoder, 760 | + &ff_pcm_s24daud_decoder, 761 | + &ff_pcm_s24le_decoder, 762 | + &ff_pcm_s24le_planar_decoder, 763 | + &ff_pcm_s32be_decoder, 764 | + &ff_pcm_s32le_decoder, 765 | + &ff_pcm_s32le_planar_decoder, 766 | + &ff_pcm_s64be_decoder, 767 | + &ff_pcm_s64le_decoder, 768 | + &ff_pcm_u8_decoder, 769 | + &ff_pcm_u16be_decoder, 770 | + &ff_pcm_u16le_decoder, 771 | + &ff_pcm_u24be_decoder, 772 | + &ff_pcm_u24le_decoder, 773 | + &ff_pcm_u32be_decoder, 774 | + &ff_pcm_u32le_decoder, 775 | + &ff_pcm_vidc_decoder, 776 | + &ff_derf_dpcm_decoder, 777 | + &ff_gremlin_dpcm_decoder, 778 | + &ff_interplay_dpcm_decoder, 779 | + &ff_roq_dpcm_decoder, 780 | + &ff_sdx2_dpcm_decoder, 781 | + &ff_sol_dpcm_decoder, 782 | + &ff_xan_dpcm_decoder, 783 | + &ff_adpcm_4xm_decoder, 784 | + &ff_adpcm_adx_decoder, 785 | + &ff_adpcm_afc_decoder, 786 | + &ff_adpcm_agm_decoder, 787 | + &ff_adpcm_aica_decoder, 788 | + &ff_adpcm_argo_decoder, 789 | + &ff_adpcm_ct_decoder, 790 | + &ff_adpcm_dtk_decoder, 791 | + &ff_adpcm_ea_decoder, 792 | + &ff_adpcm_ea_maxis_xa_decoder, 793 | + &ff_adpcm_ea_r1_decoder, 794 | + &ff_adpcm_ea_r2_decoder, 795 | + &ff_adpcm_ea_r3_decoder, 796 | + &ff_adpcm_ea_xas_decoder, 797 | + &ff_adpcm_g722_decoder, 798 | + &ff_adpcm_g726_decoder, 799 | + &ff_adpcm_g726le_decoder, 800 | + &ff_adpcm_ima_amv_decoder, 801 | + &ff_adpcm_ima_alp_decoder, 802 | + &ff_adpcm_ima_apc_decoder, 803 | + &ff_adpcm_ima_apm_decoder, 804 | + &ff_adpcm_ima_cunning_decoder, 805 | + &ff_adpcm_ima_dat4_decoder, 806 | + &ff_adpcm_ima_dk3_decoder, 807 | + &ff_adpcm_ima_dk4_decoder, 808 | + &ff_adpcm_ima_ea_eacs_decoder, 809 | + &ff_adpcm_ima_ea_sead_decoder, 810 | + &ff_adpcm_ima_iss_decoder, 811 | + &ff_adpcm_ima_mtf_decoder, 812 | + &ff_adpcm_ima_oki_decoder, 813 | + &ff_adpcm_ima_qt_decoder, 814 | + &ff_adpcm_ima_rad_decoder, 815 | + &ff_adpcm_ima_ssi_decoder, 816 | + &ff_adpcm_ima_smjpeg_decoder, 817 | + &ff_adpcm_ima_wav_decoder, 818 | + &ff_adpcm_ima_ws_decoder, 819 | + &ff_adpcm_ms_decoder, 820 | + &ff_adpcm_mtaf_decoder, 821 | + &ff_adpcm_psx_decoder, 822 | + &ff_adpcm_sbpro_2_decoder, 823 | + &ff_adpcm_sbpro_3_decoder, 824 | + &ff_adpcm_sbpro_4_decoder, 825 | + &ff_adpcm_swf_decoder, 826 | + &ff_adpcm_thp_decoder, 827 | + &ff_adpcm_thp_le_decoder, 828 | + &ff_adpcm_vima_decoder, 829 | + &ff_adpcm_xa_decoder, 830 | + &ff_adpcm_yamaha_decoder, 831 | + &ff_adpcm_zork_decoder, 832 | + &ff_ssa_decoder, 833 | + &ff_ass_decoder, 834 | + &ff_ccaption_decoder, 835 | + &ff_dvbsub_decoder, 836 | + &ff_dvdsub_decoder, 837 | + &ff_jacosub_decoder, 838 | + &ff_microdvd_decoder, 839 | + &ff_movtext_decoder, 840 | + &ff_mpl2_decoder, 841 | + &ff_pgssub_decoder, 842 | + &ff_pjs_decoder, 843 | + &ff_realtext_decoder, 844 | + &ff_sami_decoder, 845 | + &ff_srt_decoder, 846 | + &ff_stl_decoder, 847 | + &ff_subrip_decoder, 848 | + &ff_subviewer_decoder, 849 | + &ff_subviewer1_decoder, 850 | + &ff_text_decoder, 851 | + &ff_vplayer_decoder, 852 | + &ff_webvtt_decoder, 853 | + &ff_xsub_decoder, 854 | + &ff_bintext_decoder, 855 | + &ff_xbin_decoder, 856 | + &ff_idf_decoder, 857 | + &ff_mpeg2_nvmpi_decoder, 858 | + &ff_mpeg4_nvmpi_decoder, 859 | + &ff_vp8_nvmpi_decoder, 860 | + &ff_vp9_nvmpi_decoder, 861 | + NULL }; 862 | diff -ruN ffmpeg-4.3.1-orig/libavcodec/nvmpi_dec.c ffmpeg-4.3.1/libavcodec/nvmpi_dec.c 863 | --- ffmpeg-4.3.1-orig/libavcodec/nvmpi_dec.c 1970-01-01 03:00:00.000000000 +0300 864 | +++ ffmpeg-4.3.1/libavcodec/nvmpi_dec.c 2021-06-11 15:13:51.325854233 +0300 865 | @@ -0,0 +1,170 @@ 866 | +#include 867 | +#include 868 | +#include 869 | + 870 | +#include 871 | +#include "avcodec.h" 872 | +#include "decode.h" 873 | +#include "internal.h" 874 | +#include "libavutil/buffer.h" 875 | +#include "libavutil/common.h" 876 | +#include "libavutil/frame.h" 877 | +#include "libavutil/hwcontext.h" 878 | +#include "libavutil/hwcontext_drm.h" 879 | +#include "libavutil/imgutils.h" 880 | +#include "libavutil/log.h" 881 | + 882 | + 883 | + 884 | + 885 | +typedef struct { 886 | + char eos_reached; 887 | + nvmpictx* ctx; 888 | + AVClass *av_class; 889 | +} nvmpiDecodeContext; 890 | + 891 | +static nvCodingType nvmpi_get_codingtype(AVCodecContext *avctx) 892 | +{ 893 | + switch (avctx->codec_id) { 894 | + case AV_CODEC_ID_H264: return NV_VIDEO_CodingH264; 895 | + case AV_CODEC_ID_HEVC: return NV_VIDEO_CodingHEVC; 896 | + case AV_CODEC_ID_VP8: return NV_VIDEO_CodingVP8; 897 | + case AV_CODEC_ID_VP9: return NV_VIDEO_CodingVP9; 898 | + case AV_CODEC_ID_MPEG4: return NV_VIDEO_CodingMPEG4; 899 | + case AV_CODEC_ID_MPEG2VIDEO: return NV_VIDEO_CodingMPEG2; 900 | + default: return NV_VIDEO_CodingUnused; 901 | + } 902 | +}; 903 | + 904 | + 905 | +static int nvmpi_init_decoder(AVCodecContext *avctx){ 906 | + 907 | + nvmpiDecodeContext *nvmpi_context = avctx->priv_data; 908 | + nvCodingType codectype=NV_VIDEO_CodingUnused; 909 | + 910 | + codectype =nvmpi_get_codingtype(avctx); 911 | + if (codectype == NV_VIDEO_CodingUnused) { 912 | + av_log(avctx, AV_LOG_ERROR, "Unknown codec type (%d).\n", avctx->codec_id); 913 | + return AVERROR_UNKNOWN; 914 | + } 915 | + 916 | + //Workaround for default pix_fmt not being set, so check if it isnt set and set it, 917 | + //or if it is set, but isnt set to something we can work with. 918 | + 919 | + if(avctx->pix_fmt ==AV_PIX_FMT_NONE){ 920 | + avctx->pix_fmt=AV_PIX_FMT_YUV420P; 921 | + }else if(avctx-> pix_fmt != AV_PIX_FMT_YUV420P && avctx-> pix_fmt != AV_PIX_FMT_YUVJ420P){ 922 | + av_log(avctx, AV_LOG_ERROR, "Invalid Pix_FMT for NVMPI Only yuv420p or yuvj420p is supported\n"); 923 | + return AVERROR_INVALIDDATA; 924 | + } 925 | + 926 | + nvmpi_context->ctx=nvmpi_create_decoder(codectype,NV_PIX_YUV420); 927 | + 928 | + if(!nvmpi_context->ctx){ 929 | + av_log(avctx, AV_LOG_ERROR, "Failed to nvmpi_create_decoder (code = %d).\n", AVERROR_EXTERNAL); 930 | + return AVERROR_EXTERNAL; 931 | + } 932 | + return 0; 933 | + 934 | +} 935 | + 936 | + 937 | + 938 | +static int nvmpi_close(AVCodecContext *avctx){ 939 | + 940 | + nvmpiDecodeContext *nvmpi_context = avctx->priv_data; 941 | + return nvmpi_decoder_close(nvmpi_context->ctx); 942 | + 943 | +} 944 | + 945 | + 946 | + 947 | +static int nvmpi_decode(AVCodecContext *avctx,void *data,int *got_frame, AVPacket *avpkt){ 948 | + 949 | + nvmpiDecodeContext *nvmpi_context = avctx->priv_data; 950 | + AVFrame *frame = data; 951 | + nvFrame _nvframe={0}; 952 | + nvPacket packet; 953 | + uint8_t* ptrs[3]; 954 | + int res,linesize[3]; 955 | + 956 | + if(avpkt->size){ 957 | + packet.payload_size=avpkt->size; 958 | + packet.payload=avpkt->data; 959 | + packet.pts=avpkt->pts; 960 | + 961 | + res=nvmpi_decoder_put_packet(nvmpi_context->ctx,&packet); 962 | + } 963 | + 964 | + res=nvmpi_decoder_get_frame(nvmpi_context->ctx,&_nvframe,avctx->flags & AV_CODEC_FLAG_LOW_DELAY); 965 | + 966 | + if(res<0) 967 | + return avpkt->size; 968 | + 969 | + if (ff_get_buffer(avctx, frame, 0) < 0) { 970 | + return AVERROR(ENOMEM); 971 | + 972 | + } 973 | + 974 | + linesize[0]=_nvframe.linesize[0]; 975 | + linesize[1]=_nvframe.linesize[1]; 976 | + linesize[2]=_nvframe.linesize[2]; 977 | + 978 | + ptrs[0]=_nvframe.payload[0]; 979 | + ptrs[1]=_nvframe.payload[1]; 980 | + ptrs[2]=_nvframe.payload[2]; 981 | + 982 | + av_image_copy(frame->data, frame->linesize, (const uint8_t **) ptrs, linesize, avctx->pix_fmt, _nvframe.width,_nvframe.height); 983 | + 984 | + frame->width=_nvframe.width; 985 | + frame->height=_nvframe.height; 986 | + 987 | + frame->format=AV_PIX_FMT_YUV420P; 988 | + frame->pts=_nvframe.timestamp; 989 | + frame->pkt_dts = AV_NOPTS_VALUE; 990 | + 991 | + avctx->coded_width=_nvframe.width; 992 | + avctx->coded_height=_nvframe.height; 993 | + avctx->width=_nvframe.width; 994 | + avctx->height=_nvframe.height; 995 | + 996 | + *got_frame = 1; 997 | + 998 | + return avpkt->size; 999 | +} 1000 | + 1001 | + 1002 | + 1003 | + 1004 | +#define NVMPI_DEC_CLASS(NAME) \ 1005 | + static const AVClass nvmpi_##NAME##_dec_class = { \ 1006 | + .class_name = "nvmpi_" #NAME "_dec", \ 1007 | + .version = LIBAVUTIL_VERSION_INT, \ 1008 | + }; 1009 | + 1010 | +#define NVMPI_DEC(NAME, ID, BSFS) \ 1011 | + NVMPI_DEC_CLASS(NAME) \ 1012 | + AVCodec ff_##NAME##_nvmpi_decoder = { \ 1013 | + .name = #NAME "_nvmpi", \ 1014 | + .long_name = NULL_IF_CONFIG_SMALL(#NAME " (nvmpi)"), \ 1015 | + .type = AVMEDIA_TYPE_VIDEO, \ 1016 | + .id = ID, \ 1017 | + .priv_data_size = sizeof(nvmpiDecodeContext), \ 1018 | + .init = nvmpi_init_decoder, \ 1019 | + .close = nvmpi_close, \ 1020 | + .decode = nvmpi_decode, \ 1021 | + .priv_class = &nvmpi_##NAME##_dec_class, \ 1022 | + .capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_AVOID_PROBING | AV_CODEC_CAP_HARDWARE, \ 1023 | + .pix_fmts =(const enum AVPixelFormat[]){AV_PIX_FMT_YUV420P,AV_PIX_FMT_NV12,AV_PIX_FMT_NONE},\ 1024 | + .bsfs = BSFS, \ 1025 | + .wrapper_name = "nvmpi", \ 1026 | + }; 1027 | + 1028 | + 1029 | + 1030 | +NVMPI_DEC(h264, AV_CODEC_ID_H264,"h264_mp4toannexb"); 1031 | +NVMPI_DEC(hevc, AV_CODEC_ID_HEVC,"hevc_mp4toannexb"); 1032 | +NVMPI_DEC(mpeg2, AV_CODEC_ID_MPEG2VIDEO,NULL); 1033 | +NVMPI_DEC(mpeg4, AV_CODEC_ID_MPEG4,NULL); 1034 | +NVMPI_DEC(vp9, AV_CODEC_ID_VP9,NULL); 1035 | +NVMPI_DEC(vp8, AV_CODEC_ID_VP8,NULL); 1036 | diff -ruN ffmpeg-4.3.1-orig/libavcodec/nvmpi_enc.c ffmpeg-4.3.1/libavcodec/nvmpi_enc.c 1037 | --- ffmpeg-4.3.1-orig/libavcodec/nvmpi_enc.c 1970-01-01 03:00:00.000000000 +0300 1038 | +++ ffmpeg-4.3.1/libavcodec/nvmpi_enc.c 2021-06-10 15:06:17.387326328 +0300 1039 | @@ -0,0 +1,272 @@ 1040 | +#include 1041 | +#include "avcodec.h" 1042 | +#include "internal.h" 1043 | +#include 1044 | +#include "libavutil/avstring.h" 1045 | +#include "libavutil/avutil.h" 1046 | +#include "libavutil/common.h" 1047 | +#include "libavutil/imgutils.h" 1048 | +#include "libavutil/log.h" 1049 | +#include "libavutil/opt.h" 1050 | + 1051 | + 1052 | +typedef struct { 1053 | + const AVClass *class; 1054 | + nvmpictx* ctx; 1055 | + int num_capture_buffers; 1056 | + int profile; 1057 | + int level; 1058 | + int rc; 1059 | + int preset; 1060 | +}nvmpiEncodeContext; 1061 | + 1062 | +static av_cold int nvmpi_encode_init(AVCodecContext *avctx){ 1063 | + 1064 | + nvmpiEncodeContext * nvmpi_context = avctx->priv_data; 1065 | + 1066 | + nvEncParam param={0}; 1067 | + 1068 | + param.width=avctx->width; 1069 | + param.height=avctx->height; 1070 | + param.bitrate=avctx->bit_rate; 1071 | + param.mode_vbr=0; 1072 | + param.idr_interval=60; 1073 | + param.iframe_interval=30; 1074 | + param.peak_bitrate=0; 1075 | + param.fps_n=avctx->framerate.num; 1076 | + param.fps_d=avctx->framerate.den; 1077 | + param.profile=nvmpi_context->profile& ~FF_PROFILE_H264_INTRA; 1078 | + param.level=nvmpi_context->level; 1079 | + param.capture_num=nvmpi_context->num_capture_buffers; 1080 | + param.hw_preset_type=nvmpi_context->preset; 1081 | + param.insert_spspps_idr=(avctx->flags & AV_CODEC_FLAG_GLOBAL_HEADER)?0:1; 1082 | + 1083 | + if(nvmpi_context->rc==1){ 1084 | + param.mode_vbr=1; 1085 | + } 1086 | + 1087 | + if(avctx->qmin >= 0 && avctx->qmax >= 0){ 1088 | + param.qmin=avctx->qmin; 1089 | + param.qmax=avctx->qmax; 1090 | + } 1091 | + 1092 | + if (avctx->refs >= 0){ 1093 | + param.refs=avctx->refs; 1094 | + 1095 | + } 1096 | + 1097 | + if(avctx->max_b_frames > 0 && avctx->max_b_frames < 3){ 1098 | + param.max_b_frames=avctx->max_b_frames; 1099 | + } 1100 | + 1101 | + if(avctx->gop_size>0){ 1102 | + param.idr_interval=param.iframe_interval=avctx->gop_size; 1103 | + 1104 | + } 1105 | + 1106 | + 1107 | + if ((avctx->flags & AV_CODEC_FLAG_GLOBAL_HEADER) && (avctx->codec->id == AV_CODEC_ID_H264)){ 1108 | + 1109 | + uint8_t *dst[4]; 1110 | + int linesize[4]; 1111 | + nvFrame _nvframe={0}; 1112 | + nvPacket packet={0}; 1113 | + int i; 1114 | + int ret; 1115 | + nvmpictx* _ctx; 1116 | + av_image_alloc(dst, linesize,avctx->width,avctx->height,avctx->pix_fmt,1); 1117 | + 1118 | + _ctx=nvmpi_create_encoder(NV_VIDEO_CodingH264,¶m); 1119 | + i=0; 1120 | + 1121 | + while(1){ 1122 | + 1123 | + _nvframe.payload[0]=dst[0]; 1124 | + _nvframe.payload[1]=dst[1]; 1125 | + _nvframe.payload[2]=dst[2]; 1126 | + _nvframe.payload_size[0]=linesize[0]*avctx->height; 1127 | + _nvframe.payload_size[1]=linesize[1]*avctx->height/2; 1128 | + _nvframe.payload_size[2]=linesize[2]*avctx->height/2; 1129 | + 1130 | + nvmpi_encoder_put_frame(_ctx,&_nvframe); 1131 | + 1132 | + ret=nvmpi_encoder_get_packet(_ctx,&packet); 1133 | + 1134 | + if(ret<0) 1135 | + continue; 1136 | + 1137 | + //find idr index 0x0000000165 1138 | + while((packet.payload[i]!=0||packet.payload[i+1]!=0||packet.payload[i+2]!=0||packet.payload[i+3]!=0x01||packet.payload[i+4]!=0x65)){ 1139 | + i++; 1140 | + 1141 | + } 1142 | + 1143 | + avctx->extradata_size=i; 1144 | + avctx->extradata = av_mallocz( avctx->extradata_size + AV_INPUT_BUFFER_PADDING_SIZE ); 1145 | + memcpy( avctx->extradata, packet.payload,avctx->extradata_size); 1146 | + memset( avctx->extradata + avctx->extradata_size, 0, AV_INPUT_BUFFER_PADDING_SIZE ); 1147 | + 1148 | + break; 1149 | + 1150 | + } 1151 | + 1152 | + nvmpi_encoder_close(_ctx); 1153 | + 1154 | + 1155 | + } 1156 | + 1157 | + if(avctx->codec->id == AV_CODEC_ID_H264) 1158 | + nvmpi_context->ctx=nvmpi_create_encoder(NV_VIDEO_CodingH264,¶m); 1159 | + else if(avctx->codec->id == AV_CODEC_ID_HEVC){ 1160 | + nvmpi_context->ctx=nvmpi_create_encoder(NV_VIDEO_CodingHEVC,¶m); 1161 | + } 1162 | + 1163 | + 1164 | + return 0; 1165 | +} 1166 | + 1167 | + 1168 | +static int nvmpi_encode_frame(AVCodecContext *avctx, AVPacket *pkt,const AVFrame *frame, int *got_packet){ 1169 | + 1170 | + nvmpiEncodeContext * nvmpi_context = avctx->priv_data; 1171 | + nvFrame _nvframe={0}; 1172 | + nvPacket packet={0}; 1173 | + int res; 1174 | + 1175 | + if(frame){ 1176 | + 1177 | + _nvframe.payload[0]=frame->data[0]; 1178 | + _nvframe.payload[1]=frame->data[1]; 1179 | + _nvframe.payload[2]=frame->data[2]; 1180 | + 1181 | + _nvframe.payload_size[0]=frame->linesize[0]*frame->height; 1182 | + _nvframe.payload_size[1]=frame->linesize[1]*frame->height/2; 1183 | + _nvframe.payload_size[2]=frame->linesize[2]*frame->height/2; 1184 | + 1185 | + _nvframe.linesize[0]=frame->linesize[0]; 1186 | + _nvframe.linesize[1]=frame->linesize[1]; 1187 | + _nvframe.linesize[2]=frame->linesize[2]; 1188 | + 1189 | + _nvframe.timestamp=frame->pts; 1190 | + 1191 | + res=nvmpi_encoder_put_frame(nvmpi_context->ctx,&_nvframe); 1192 | + 1193 | + if(res<0) 1194 | + return res; 1195 | + } 1196 | + 1197 | + 1198 | + if(nvmpi_encoder_get_packet(nvmpi_context->ctx,&packet)<0) 1199 | + return 0; 1200 | + 1201 | + 1202 | + ff_alloc_packet2(avctx,pkt,packet.payload_size,packet.payload_size); 1203 | + 1204 | + memcpy(pkt->data,packet.payload,packet.payload_size); 1205 | + pkt->dts=pkt->pts=packet.pts; 1206 | + 1207 | + if(packet.flags& AV_PKT_FLAG_KEY) 1208 | + pkt->flags = AV_PKT_FLAG_KEY; 1209 | + 1210 | + 1211 | + *got_packet = 1; 1212 | + 1213 | + return 0; 1214 | +} 1215 | + 1216 | +static av_cold int nvmpi_encode_close(AVCodecContext *avctx){ 1217 | + 1218 | + nvmpiEncodeContext *nvmpi_context = avctx->priv_data; 1219 | + nvmpi_encoder_close(nvmpi_context->ctx); 1220 | + 1221 | + return 0; 1222 | +} 1223 | + 1224 | +static const AVCodecDefault defaults[] = { 1225 | + { "b", "2M" }, 1226 | + { "qmin", "-1" }, 1227 | + { "qmax", "-1" }, 1228 | + { "qdiff", "-1" }, 1229 | + { "qblur", "-1" }, 1230 | + { "qcomp", "-1" }, 1231 | + { "g", "50" }, 1232 | + { "bf", "0" }, 1233 | + { "refs", "0" }, 1234 | + { NULL }, 1235 | +}; 1236 | + 1237 | + 1238 | +#define OFFSET(x) offsetof(nvmpiEncodeContext, x) 1239 | +#define VE AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM 1240 | + 1241 | +static const AVOption options[] = { 1242 | + { "num_capture_buffers", "Number of buffers in the capture context", OFFSET(num_capture_buffers), AV_OPT_TYPE_INT, {.i64 = 10 }, 1, 32, AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM }, 1243 | + /// Profile, 1244 | + 1245 | + { "profile", "Set the encoding profile", OFFSET(profile), AV_OPT_TYPE_INT, { .i64 = FF_PROFILE_UNKNOWN }, FF_PROFILE_UNKNOWN, FF_PROFILE_H264_HIGH, VE, "profile" }, 1246 | + { "baseline", "", 0, AV_OPT_TYPE_CONST, { .i64 = FF_PROFILE_H264_BASELINE }, 0, 0, VE, "profile" }, 1247 | + { "main", "", 0, AV_OPT_TYPE_CONST, { .i64 = FF_PROFILE_H264_MAIN }, 0, 0, VE, "profile" }, 1248 | + { "high", "", 0, AV_OPT_TYPE_CONST, { .i64 = FF_PROFILE_H264_HIGH }, 0, 0, VE, "profile" }, 1249 | + 1250 | + /// Profile Level 1251 | + { "level", "Profile Level", OFFSET(level), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 62, VE, "level" }, 1252 | + { "auto", "", 0, AV_OPT_TYPE_CONST, { .i64 = 0 }, 0, 0, VE, "level" }, 1253 | + { "1.0", "", 0, AV_OPT_TYPE_CONST, { .i64 = 10 }, 0, 0, VE, "level" }, 1254 | + { "1.1", "", 0, AV_OPT_TYPE_CONST, { .i64 = 11 }, 0, 0, VE, "level" }, 1255 | + { "1.2", "", 0, AV_OPT_TYPE_CONST, { .i64 = 12 }, 0, 0, VE, "level" }, 1256 | + { "1.3", "", 0, AV_OPT_TYPE_CONST, { .i64 = 13 }, 0, 0, VE, "level" }, 1257 | + { "2.0", "", 0, AV_OPT_TYPE_CONST, { .i64 = 20 }, 0, 0, VE, "level" }, 1258 | + { "2.1", "", 0, AV_OPT_TYPE_CONST, { .i64 = 21 }, 0, 0, VE, "level" }, 1259 | + { "2.2", "", 0, AV_OPT_TYPE_CONST, { .i64 = 22 }, 0, 0, VE, "level" }, 1260 | + { "3.0", "", 0, AV_OPT_TYPE_CONST, { .i64 = 30 }, 0, 0, VE, "level" }, 1261 | + { "3.1", "", 0, AV_OPT_TYPE_CONST, { .i64 = 31 }, 0, 0, VE, "level" }, 1262 | + { "3.2", "", 0, AV_OPT_TYPE_CONST, { .i64 = 32 }, 0, 0, VE, "level" }, 1263 | + { "4.0", "", 0, AV_OPT_TYPE_CONST, { .i64 = 40 }, 0, 0, VE, "level" }, 1264 | + { "4.1", "", 0, AV_OPT_TYPE_CONST, { .i64 = 41 }, 0, 0, VE, "level" }, 1265 | + { "4.2", "", 0, AV_OPT_TYPE_CONST, { .i64 = 42 }, 0, 0, VE, "level" }, 1266 | + { "5.0", "", 0, AV_OPT_TYPE_CONST, { .i64 = 50 }, 0, 0, VE, "level" }, 1267 | + { "5.1", "", 0, AV_OPT_TYPE_CONST, { .i64 = 51 }, 0, 0, VE, "level" }, 1268 | + 1269 | + { "rc", "Override the preset rate-control", OFFSET(rc), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, INT_MAX, VE, "rc" }, 1270 | + { "cbr", "Constant bitrate mode", 0, AV_OPT_TYPE_CONST, { .i64 = 0 }, 0, 0, VE, "rc" }, 1271 | + { "vbr", "Variable bitrate mode", 0, AV_OPT_TYPE_CONST, { .i64 = 1 }, 0, 0, VE, "rc" }, 1272 | + 1273 | + { "preset", "Set the encoding preset", OFFSET(preset), AV_OPT_TYPE_INT, { .i64 = 3 }, 1, 4, VE, "preset" }, 1274 | + { "default", "", 0, AV_OPT_TYPE_CONST, { .i64 = 3 }, 0, 0, VE, "preset" }, 1275 | + { "slow", "", 0, AV_OPT_TYPE_CONST, { .i64 = 4 }, 0, 0, VE, "preset" }, 1276 | + { "medium", "", 0, AV_OPT_TYPE_CONST, { .i64 = 3 }, 0, 0, VE, "preset" }, 1277 | + { "fast", "", 0, AV_OPT_TYPE_CONST, { .i64 = 2 }, 0, 0, VE, "preset" }, 1278 | + { "ultrafast", "", 0, AV_OPT_TYPE_CONST, { .i64 = 1 }, 0, 0, VE, "preset" }, 1279 | + { NULL } 1280 | +}; 1281 | + 1282 | + 1283 | +#define NVMPI_ENC_CLASS(NAME) \ 1284 | + static const AVClass nvmpi_ ## NAME ## _enc_class = { \ 1285 | + .class_name = #NAME "_nvmpi_encoder", \ 1286 | + .item_name = av_default_item_name, \ 1287 | + .option = options, \ 1288 | + .version = LIBAVUTIL_VERSION_INT, \ 1289 | + }; 1290 | + 1291 | + 1292 | +#define NVMPI_ENC(NAME, LONGNAME, CODEC) \ 1293 | + NVMPI_ENC_CLASS(NAME) \ 1294 | + AVCodec ff_ ## NAME ## _nvmpi_encoder = { \ 1295 | + .name = #NAME "_nvmpi" , \ 1296 | + .long_name = NULL_IF_CONFIG_SMALL("nvmpi " LONGNAME " encoder wrapper"), \ 1297 | + .type = AVMEDIA_TYPE_VIDEO, \ 1298 | + .id = CODEC , \ 1299 | + .priv_data_size = sizeof(nvmpiEncodeContext), \ 1300 | + .priv_class = &nvmpi_ ## NAME ##_enc_class, \ 1301 | + .init = nvmpi_encode_init, \ 1302 | + .encode2 = nvmpi_encode_frame, \ 1303 | + .close = nvmpi_encode_close, \ 1304 | + .pix_fmts = (const enum AVPixelFormat[]) { AV_PIX_FMT_YUV420P, AV_PIX_FMT_NONE },\ 1305 | + .capabilities = AV_CODEC_CAP_HARDWARE | AV_CODEC_CAP_DELAY, \ 1306 | + .defaults = defaults,\ 1307 | + .wrapper_name = "nvmpi", \ 1308 | + }; 1309 | + 1310 | +NVMPI_ENC(h264, "H.264", AV_CODEC_ID_H264); 1311 | +NVMPI_ENC(hevc, "HEVC", AV_CODEC_ID_HEVC); 1312 | diff -ruN ffmpeg-4.3.1-orig/libavcodec/parser_list.c ffmpeg-4.3.1/libavcodec/parser_list.c 1313 | --- ffmpeg-4.3.1-orig/libavcodec/parser_list.c 1970-01-01 03:00:00.000000000 +0300 1314 | +++ ffmpeg-4.3.1/libavcodec/parser_list.c 2021-06-10 15:07:03.512323260 +0300 1315 | @@ -0,0 +1,49 @@ 1316 | +static const AVCodecParser * const parser_list[] = { 1317 | + &ff_aac_parser, 1318 | + &ff_aac_latm_parser, 1319 | + &ff_ac3_parser, 1320 | + &ff_adx_parser, 1321 | + &ff_av1_parser, 1322 | + &ff_avs2_parser, 1323 | + &ff_bmp_parser, 1324 | + &ff_cavsvideo_parser, 1325 | + &ff_cook_parser, 1326 | + &ff_dca_parser, 1327 | + &ff_dirac_parser, 1328 | + &ff_dnxhd_parser, 1329 | + &ff_dpx_parser, 1330 | + &ff_dvaudio_parser, 1331 | + &ff_dvbsub_parser, 1332 | + &ff_dvdsub_parser, 1333 | + &ff_dvd_nav_parser, 1334 | + &ff_flac_parser, 1335 | + &ff_g723_1_parser, 1336 | + &ff_g729_parser, 1337 | + &ff_gif_parser, 1338 | + &ff_gsm_parser, 1339 | + &ff_h261_parser, 1340 | + &ff_h263_parser, 1341 | + &ff_h264_parser, 1342 | + &ff_hevc_parser, 1343 | + &ff_jpeg2000_parser, 1344 | + &ff_mjpeg_parser, 1345 | + &ff_mlp_parser, 1346 | + &ff_mpeg4video_parser, 1347 | + &ff_mpegaudio_parser, 1348 | + &ff_mpegvideo_parser, 1349 | + &ff_opus_parser, 1350 | + &ff_png_parser, 1351 | + &ff_pnm_parser, 1352 | + &ff_rv30_parser, 1353 | + &ff_rv40_parser, 1354 | + &ff_sbc_parser, 1355 | + &ff_sipr_parser, 1356 | + &ff_tak_parser, 1357 | + &ff_vc1_parser, 1358 | + &ff_vorbis_parser, 1359 | + &ff_vp3_parser, 1360 | + &ff_vp8_parser, 1361 | + &ff_vp9_parser, 1362 | + &ff_webp_parser, 1363 | + &ff_xma_parser, 1364 | + NULL }; 1365 | diff -ruN ffmpeg-4.3.1-orig/libavdevice/indev_list.c ffmpeg-4.3.1/libavdevice/indev_list.c 1366 | --- ffmpeg-4.3.1-orig/libavdevice/indev_list.c 1970-01-01 03:00:00.000000000 +0300 1367 | +++ ffmpeg-4.3.1/libavdevice/indev_list.c 2021-06-10 15:07:03.608325336 +0300 1368 | @@ -0,0 +1,8 @@ 1369 | +static const AVInputFormat * const indev_list[] = { 1370 | + &ff_alsa_demuxer, 1371 | + &ff_fbdev_demuxer, 1372 | + &ff_lavfi_demuxer, 1373 | + &ff_oss_demuxer, 1374 | + &ff_v4l2_demuxer, 1375 | + &ff_xcbgrab_demuxer, 1376 | + NULL }; 1377 | diff -ruN ffmpeg-4.3.1-orig/libavdevice/outdev_list.c ffmpeg-4.3.1/libavdevice/outdev_list.c 1378 | --- ffmpeg-4.3.1-orig/libavdevice/outdev_list.c 1970-01-01 03:00:00.000000000 +0300 1379 | +++ ffmpeg-4.3.1/libavdevice/outdev_list.c 2021-06-10 15:07:03.620325596 +0300 1380 | @@ -0,0 +1,6 @@ 1381 | +static const AVOutputFormat * const outdev_list[] = { 1382 | + &ff_alsa_muxer, 1383 | + &ff_fbdev_muxer, 1384 | + &ff_oss_muxer, 1385 | + &ff_v4l2_muxer, 1386 | + NULL }; 1387 | diff -ruN ffmpeg-4.3.1-orig/libavfilter/filter_list.c ffmpeg-4.3.1/libavfilter/filter_list.c 1388 | --- ffmpeg-4.3.1-orig/libavfilter/filter_list.c 1970-01-01 03:00:00.000000000 +0300 1389 | +++ ffmpeg-4.3.1/libavfilter/filter_list.c 2021-06-10 15:07:03.420321271 +0300 1390 | @@ -0,0 +1,369 @@ 1391 | +static const AVFilter * const filter_list[] = { 1392 | + &ff_af_abench, 1393 | + &ff_af_acompressor, 1394 | + &ff_af_acontrast, 1395 | + &ff_af_acopy, 1396 | + &ff_af_acue, 1397 | + &ff_af_acrossfade, 1398 | + &ff_af_acrossover, 1399 | + &ff_af_acrusher, 1400 | + &ff_af_adeclick, 1401 | + &ff_af_adeclip, 1402 | + &ff_af_adelay, 1403 | + &ff_af_aderivative, 1404 | + &ff_af_aecho, 1405 | + &ff_af_aemphasis, 1406 | + &ff_af_aeval, 1407 | + &ff_af_afade, 1408 | + &ff_af_afftdn, 1409 | + &ff_af_afftfilt, 1410 | + &ff_af_afir, 1411 | + &ff_af_aformat, 1412 | + &ff_af_agate, 1413 | + &ff_af_aiir, 1414 | + &ff_af_aintegral, 1415 | + &ff_af_ainterleave, 1416 | + &ff_af_alimiter, 1417 | + &ff_af_allpass, 1418 | + &ff_af_aloop, 1419 | + &ff_af_amerge, 1420 | + &ff_af_ametadata, 1421 | + &ff_af_amix, 1422 | + &ff_af_amultiply, 1423 | + &ff_af_anequalizer, 1424 | + &ff_af_anlmdn, 1425 | + &ff_af_anlms, 1426 | + &ff_af_anull, 1427 | + &ff_af_apad, 1428 | + &ff_af_aperms, 1429 | + &ff_af_aphaser, 1430 | + &ff_af_apulsator, 1431 | + &ff_af_arealtime, 1432 | + &ff_af_aresample, 1433 | + &ff_af_areverse, 1434 | + &ff_af_arnndn, 1435 | + &ff_af_aselect, 1436 | + &ff_af_asendcmd, 1437 | + &ff_af_asetnsamples, 1438 | + &ff_af_asetpts, 1439 | + &ff_af_asetrate, 1440 | + &ff_af_asettb, 1441 | + &ff_af_ashowinfo, 1442 | + &ff_af_asidedata, 1443 | + &ff_af_asoftclip, 1444 | + &ff_af_asplit, 1445 | + &ff_af_astats, 1446 | + &ff_af_astreamselect, 1447 | + &ff_af_asubboost, 1448 | + &ff_af_atempo, 1449 | + &ff_af_atrim, 1450 | + &ff_af_axcorrelate, 1451 | + &ff_af_bandpass, 1452 | + &ff_af_bandreject, 1453 | + &ff_af_bass, 1454 | + &ff_af_biquad, 1455 | + &ff_af_channelmap, 1456 | + &ff_af_channelsplit, 1457 | + &ff_af_chorus, 1458 | + &ff_af_compand, 1459 | + &ff_af_compensationdelay, 1460 | + &ff_af_crossfeed, 1461 | + &ff_af_crystalizer, 1462 | + &ff_af_dcshift, 1463 | + &ff_af_deesser, 1464 | + &ff_af_drmeter, 1465 | + &ff_af_dynaudnorm, 1466 | + &ff_af_earwax, 1467 | + &ff_af_ebur128, 1468 | + &ff_af_equalizer, 1469 | + &ff_af_extrastereo, 1470 | + &ff_af_firequalizer, 1471 | + &ff_af_flanger, 1472 | + &ff_af_haas, 1473 | + &ff_af_hdcd, 1474 | + &ff_af_headphone, 1475 | + &ff_af_highpass, 1476 | + &ff_af_highshelf, 1477 | + &ff_af_join, 1478 | + &ff_af_loudnorm, 1479 | + &ff_af_lowpass, 1480 | + &ff_af_lowshelf, 1481 | + &ff_af_mcompand, 1482 | + &ff_af_pan, 1483 | + &ff_af_replaygain, 1484 | + &ff_af_sidechaincompress, 1485 | + &ff_af_sidechaingate, 1486 | + &ff_af_silencedetect, 1487 | + &ff_af_silenceremove, 1488 | + &ff_af_stereotools, 1489 | + &ff_af_stereowiden, 1490 | + &ff_af_superequalizer, 1491 | + &ff_af_surround, 1492 | + &ff_af_treble, 1493 | + &ff_af_tremolo, 1494 | + &ff_af_vibrato, 1495 | + &ff_af_volume, 1496 | + &ff_af_volumedetect, 1497 | + &ff_asrc_aevalsrc, 1498 | + &ff_asrc_afirsrc, 1499 | + &ff_asrc_anoisesrc, 1500 | + &ff_asrc_anullsrc, 1501 | + &ff_asrc_hilbert, 1502 | + &ff_asrc_sinc, 1503 | + &ff_asrc_sine, 1504 | + &ff_asink_anullsink, 1505 | + &ff_vf_addroi, 1506 | + &ff_vf_alphaextract, 1507 | + &ff_vf_alphamerge, 1508 | + &ff_vf_amplify, 1509 | + &ff_vf_atadenoise, 1510 | + &ff_vf_avgblur, 1511 | + &ff_vf_bbox, 1512 | + &ff_vf_bench, 1513 | + &ff_vf_bilateral, 1514 | + &ff_vf_bitplanenoise, 1515 | + &ff_vf_blackdetect, 1516 | + &ff_vf_blend, 1517 | + &ff_vf_bm3d, 1518 | + &ff_vf_bwdif, 1519 | + &ff_vf_cas, 1520 | + &ff_vf_chromahold, 1521 | + &ff_vf_chromakey, 1522 | + &ff_vf_chromashift, 1523 | + &ff_vf_ciescope, 1524 | + &ff_vf_codecview, 1525 | + &ff_vf_colorbalance, 1526 | + &ff_vf_colorchannelmixer, 1527 | + &ff_vf_colorkey, 1528 | + &ff_vf_colorhold, 1529 | + &ff_vf_colorlevels, 1530 | + &ff_vf_colorspace, 1531 | + &ff_vf_convolution, 1532 | + &ff_vf_convolve, 1533 | + &ff_vf_copy, 1534 | + &ff_vf_crop, 1535 | + &ff_vf_cue, 1536 | + &ff_vf_curves, 1537 | + &ff_vf_datascope, 1538 | + &ff_vf_dblur, 1539 | + &ff_vf_dctdnoiz, 1540 | + &ff_vf_deband, 1541 | + &ff_vf_deblock, 1542 | + &ff_vf_decimate, 1543 | + &ff_vf_deconvolve, 1544 | + &ff_vf_dedot, 1545 | + &ff_vf_deflate, 1546 | + &ff_vf_deflicker, 1547 | + &ff_vf_dejudder, 1548 | + &ff_vf_derain, 1549 | + &ff_vf_deshake, 1550 | + &ff_vf_despill, 1551 | + &ff_vf_detelecine, 1552 | + &ff_vf_dilation, 1553 | + &ff_vf_displace, 1554 | + &ff_vf_dnn_processing, 1555 | + &ff_vf_doubleweave, 1556 | + &ff_vf_drawbox, 1557 | + &ff_vf_drawgraph, 1558 | + &ff_vf_drawgrid, 1559 | + &ff_vf_edgedetect, 1560 | + &ff_vf_elbg, 1561 | + &ff_vf_entropy, 1562 | + &ff_vf_erosion, 1563 | + &ff_vf_extractplanes, 1564 | + &ff_vf_fade, 1565 | + &ff_vf_fftdnoiz, 1566 | + &ff_vf_fftfilt, 1567 | + &ff_vf_field, 1568 | + &ff_vf_fieldhint, 1569 | + &ff_vf_fieldmatch, 1570 | + &ff_vf_fieldorder, 1571 | + &ff_vf_fillborders, 1572 | + &ff_vf_floodfill, 1573 | + &ff_vf_format, 1574 | + &ff_vf_fps, 1575 | + &ff_vf_framepack, 1576 | + &ff_vf_framerate, 1577 | + &ff_vf_framestep, 1578 | + &ff_vf_freezedetect, 1579 | + &ff_vf_freezeframes, 1580 | + &ff_vf_gblur, 1581 | + &ff_vf_geq, 1582 | + &ff_vf_gradfun, 1583 | + &ff_vf_graphmonitor, 1584 | + &ff_vf_greyedge, 1585 | + &ff_vf_haldclut, 1586 | + &ff_vf_hflip, 1587 | + &ff_vf_histogram, 1588 | + &ff_vf_hqx, 1589 | + &ff_vf_hstack, 1590 | + &ff_vf_hue, 1591 | + &ff_vf_hwdownload, 1592 | + &ff_vf_hwmap, 1593 | + &ff_vf_hwupload, 1594 | + &ff_vf_hysteresis, 1595 | + &ff_vf_idet, 1596 | + &ff_vf_il, 1597 | + &ff_vf_inflate, 1598 | + &ff_vf_interleave, 1599 | + &ff_vf_lagfun, 1600 | + &ff_vf_lenscorrection, 1601 | + &ff_vf_limiter, 1602 | + &ff_vf_loop, 1603 | + &ff_vf_lumakey, 1604 | + &ff_vf_lut, 1605 | + &ff_vf_lut1d, 1606 | + &ff_vf_lut2, 1607 | + &ff_vf_lut3d, 1608 | + &ff_vf_lutrgb, 1609 | + &ff_vf_lutyuv, 1610 | + &ff_vf_maskedclamp, 1611 | + &ff_vf_maskedmax, 1612 | + &ff_vf_maskedmerge, 1613 | + &ff_vf_maskedmin, 1614 | + &ff_vf_maskedthreshold, 1615 | + &ff_vf_maskfun, 1616 | + &ff_vf_median, 1617 | + &ff_vf_mergeplanes, 1618 | + &ff_vf_mestimate, 1619 | + &ff_vf_metadata, 1620 | + &ff_vf_midequalizer, 1621 | + &ff_vf_minterpolate, 1622 | + &ff_vf_mix, 1623 | + &ff_vf_negate, 1624 | + &ff_vf_nlmeans, 1625 | + &ff_vf_noformat, 1626 | + &ff_vf_noise, 1627 | + &ff_vf_normalize, 1628 | + &ff_vf_null, 1629 | + &ff_vf_oscilloscope, 1630 | + &ff_vf_overlay, 1631 | + &ff_vf_pad, 1632 | + &ff_vf_palettegen, 1633 | + &ff_vf_paletteuse, 1634 | + &ff_vf_perms, 1635 | + &ff_vf_photosensitivity, 1636 | + &ff_vf_pixdesctest, 1637 | + &ff_vf_pixscope, 1638 | + &ff_vf_premultiply, 1639 | + &ff_vf_prewitt, 1640 | + &ff_vf_pseudocolor, 1641 | + &ff_vf_psnr, 1642 | + &ff_vf_qp, 1643 | + &ff_vf_random, 1644 | + &ff_vf_readeia608, 1645 | + &ff_vf_readvitc, 1646 | + &ff_vf_realtime, 1647 | + &ff_vf_remap, 1648 | + &ff_vf_removegrain, 1649 | + &ff_vf_removelogo, 1650 | + &ff_vf_reverse, 1651 | + &ff_vf_rgbashift, 1652 | + &ff_vf_roberts, 1653 | + &ff_vf_rotate, 1654 | + &ff_vf_scale, 1655 | + &ff_vf_scale2ref, 1656 | + &ff_vf_scdet, 1657 | + &ff_vf_scroll, 1658 | + &ff_vf_select, 1659 | + &ff_vf_selectivecolor, 1660 | + &ff_vf_sendcmd, 1661 | + &ff_vf_separatefields, 1662 | + &ff_vf_setdar, 1663 | + &ff_vf_setfield, 1664 | + &ff_vf_setparams, 1665 | + &ff_vf_setpts, 1666 | + &ff_vf_setrange, 1667 | + &ff_vf_setsar, 1668 | + &ff_vf_settb, 1669 | + &ff_vf_showinfo, 1670 | + &ff_vf_showpalette, 1671 | + &ff_vf_shuffleframes, 1672 | + &ff_vf_shuffleplanes, 1673 | + &ff_vf_sidedata, 1674 | + &ff_vf_signalstats, 1675 | + &ff_vf_sobel, 1676 | + &ff_vf_split, 1677 | + &ff_vf_sr, 1678 | + &ff_vf_ssim, 1679 | + &ff_vf_streamselect, 1680 | + &ff_vf_swaprect, 1681 | + &ff_vf_swapuv, 1682 | + &ff_vf_tblend, 1683 | + &ff_vf_telecine, 1684 | + &ff_vf_thistogram, 1685 | + &ff_vf_threshold, 1686 | + &ff_vf_thumbnail, 1687 | + &ff_vf_tile, 1688 | + &ff_vf_tlut2, 1689 | + &ff_vf_tmedian, 1690 | + &ff_vf_tmix, 1691 | + &ff_vf_tonemap, 1692 | + &ff_vf_tpad, 1693 | + &ff_vf_transpose, 1694 | + &ff_vf_trim, 1695 | + &ff_vf_unpremultiply, 1696 | + &ff_vf_unsharp, 1697 | + &ff_vf_untile, 1698 | + &ff_vf_v360, 1699 | + &ff_vf_vectorscope, 1700 | + &ff_vf_vflip, 1701 | + &ff_vf_vfrdet, 1702 | + &ff_vf_vibrance, 1703 | + &ff_vf_vignette, 1704 | + &ff_vf_vmafmotion, 1705 | + &ff_vf_vstack, 1706 | + &ff_vf_w3fdif, 1707 | + &ff_vf_waveform, 1708 | + &ff_vf_weave, 1709 | + &ff_vf_xbr, 1710 | + &ff_vf_xfade, 1711 | + &ff_vf_xmedian, 1712 | + &ff_vf_xstack, 1713 | + &ff_vf_yadif, 1714 | + &ff_vf_yaepblur, 1715 | + &ff_vf_zoompan, 1716 | + &ff_vsrc_allrgb, 1717 | + &ff_vsrc_allyuv, 1718 | + &ff_vsrc_cellauto, 1719 | + &ff_vsrc_color, 1720 | + &ff_vsrc_gradients, 1721 | + &ff_vsrc_haldclutsrc, 1722 | + &ff_vsrc_life, 1723 | + &ff_vsrc_mandelbrot, 1724 | + &ff_vsrc_nullsrc, 1725 | + &ff_vsrc_pal75bars, 1726 | + &ff_vsrc_pal100bars, 1727 | + &ff_vsrc_rgbtestsrc, 1728 | + &ff_vsrc_sierpinski, 1729 | + &ff_vsrc_smptebars, 1730 | + &ff_vsrc_smptehdbars, 1731 | + &ff_vsrc_testsrc, 1732 | + &ff_vsrc_testsrc2, 1733 | + &ff_vsrc_yuvtestsrc, 1734 | + &ff_vsink_nullsink, 1735 | + &ff_avf_abitscope, 1736 | + &ff_avf_adrawgraph, 1737 | + &ff_avf_agraphmonitor, 1738 | + &ff_avf_ahistogram, 1739 | + &ff_avf_aphasemeter, 1740 | + &ff_avf_avectorscope, 1741 | + &ff_avf_concat, 1742 | + &ff_avf_showcqt, 1743 | + &ff_avf_showfreqs, 1744 | + &ff_avf_showspatial, 1745 | + &ff_avf_showspectrum, 1746 | + &ff_avf_showspectrumpic, 1747 | + &ff_avf_showvolume, 1748 | + &ff_avf_showwaves, 1749 | + &ff_avf_showwavespic, 1750 | + &ff_vaf_spectrumsynth, 1751 | + &ff_avsrc_amovie, 1752 | + &ff_avsrc_movie, 1753 | + &ff_af_afifo, 1754 | + &ff_vf_fifo, 1755 | + &ff_asrc_abuffer, 1756 | + &ff_vsrc_buffer, 1757 | + &ff_asink_abuffer, 1758 | + &ff_vsink_buffer, 1759 | + NULL }; 1760 | diff -ruN ffmpeg-4.3.1-orig/libavformat/demuxer_list.c ffmpeg-4.3.1/libavformat/demuxer_list.c 1761 | --- ffmpeg-4.3.1-orig/libavformat/demuxer_list.c 1970-01-01 03:00:00.000000000 +0300 1762 | +++ ffmpeg-4.3.1/libavformat/demuxer_list.c 2021-06-10 15:07:03.568324471 +0300 1763 | @@ -0,0 +1,306 @@ 1764 | +static const AVInputFormat * const demuxer_list[] = { 1765 | + &ff_aa_demuxer, 1766 | + &ff_aac_demuxer, 1767 | + &ff_ac3_demuxer, 1768 | + &ff_acm_demuxer, 1769 | + &ff_act_demuxer, 1770 | + &ff_adf_demuxer, 1771 | + &ff_adp_demuxer, 1772 | + &ff_ads_demuxer, 1773 | + &ff_adx_demuxer, 1774 | + &ff_aea_demuxer, 1775 | + &ff_afc_demuxer, 1776 | + &ff_aiff_demuxer, 1777 | + &ff_aix_demuxer, 1778 | + &ff_alp_demuxer, 1779 | + &ff_amr_demuxer, 1780 | + &ff_amrnb_demuxer, 1781 | + &ff_amrwb_demuxer, 1782 | + &ff_anm_demuxer, 1783 | + &ff_apc_demuxer, 1784 | + &ff_ape_demuxer, 1785 | + &ff_apm_demuxer, 1786 | + &ff_apng_demuxer, 1787 | + &ff_aptx_demuxer, 1788 | + &ff_aptx_hd_demuxer, 1789 | + &ff_aqtitle_demuxer, 1790 | + &ff_argo_asf_demuxer, 1791 | + &ff_asf_demuxer, 1792 | + &ff_asf_o_demuxer, 1793 | + &ff_ass_demuxer, 1794 | + &ff_ast_demuxer, 1795 | + &ff_au_demuxer, 1796 | + &ff_av1_demuxer, 1797 | + &ff_avi_demuxer, 1798 | + &ff_avr_demuxer, 1799 | + &ff_avs_demuxer, 1800 | + &ff_avs2_demuxer, 1801 | + &ff_bethsoftvid_demuxer, 1802 | + &ff_bfi_demuxer, 1803 | + &ff_bintext_demuxer, 1804 | + &ff_bink_demuxer, 1805 | + &ff_bit_demuxer, 1806 | + &ff_bmv_demuxer, 1807 | + &ff_bfstm_demuxer, 1808 | + &ff_brstm_demuxer, 1809 | + &ff_boa_demuxer, 1810 | + &ff_c93_demuxer, 1811 | + &ff_caf_demuxer, 1812 | + &ff_cavsvideo_demuxer, 1813 | + &ff_cdg_demuxer, 1814 | + &ff_cdxl_demuxer, 1815 | + &ff_cine_demuxer, 1816 | + &ff_codec2_demuxer, 1817 | + &ff_codec2raw_demuxer, 1818 | + &ff_concat_demuxer, 1819 | + &ff_data_demuxer, 1820 | + &ff_daud_demuxer, 1821 | + &ff_dcstr_demuxer, 1822 | + &ff_derf_demuxer, 1823 | + &ff_dfa_demuxer, 1824 | + &ff_dhav_demuxer, 1825 | + &ff_dirac_demuxer, 1826 | + &ff_dnxhd_demuxer, 1827 | + &ff_dsf_demuxer, 1828 | + &ff_dsicin_demuxer, 1829 | + &ff_dss_demuxer, 1830 | + &ff_dts_demuxer, 1831 | + &ff_dtshd_demuxer, 1832 | + &ff_dv_demuxer, 1833 | + &ff_dvbsub_demuxer, 1834 | + &ff_dvbtxt_demuxer, 1835 | + &ff_dxa_demuxer, 1836 | + &ff_ea_demuxer, 1837 | + &ff_ea_cdata_demuxer, 1838 | + &ff_eac3_demuxer, 1839 | + &ff_epaf_demuxer, 1840 | + &ff_ffmetadata_demuxer, 1841 | + &ff_filmstrip_demuxer, 1842 | + &ff_fits_demuxer, 1843 | + &ff_flac_demuxer, 1844 | + &ff_flic_demuxer, 1845 | + &ff_flv_demuxer, 1846 | + &ff_live_flv_demuxer, 1847 | + &ff_fourxm_demuxer, 1848 | + &ff_frm_demuxer, 1849 | + &ff_fsb_demuxer, 1850 | + &ff_fwse_demuxer, 1851 | + &ff_g722_demuxer, 1852 | + &ff_g723_1_demuxer, 1853 | + &ff_g726_demuxer, 1854 | + &ff_g726le_demuxer, 1855 | + &ff_g729_demuxer, 1856 | + &ff_gdv_demuxer, 1857 | + &ff_genh_demuxer, 1858 | + &ff_gif_demuxer, 1859 | + &ff_gsm_demuxer, 1860 | + &ff_gxf_demuxer, 1861 | + &ff_h261_demuxer, 1862 | + &ff_h263_demuxer, 1863 | + &ff_h264_demuxer, 1864 | + &ff_hca_demuxer, 1865 | + &ff_hcom_demuxer, 1866 | + &ff_hevc_demuxer, 1867 | + &ff_hls_demuxer, 1868 | + &ff_hnm_demuxer, 1869 | + &ff_ico_demuxer, 1870 | + &ff_idcin_demuxer, 1871 | + &ff_idf_demuxer, 1872 | + &ff_iff_demuxer, 1873 | + &ff_ifv_demuxer, 1874 | + &ff_ilbc_demuxer, 1875 | + &ff_image2_demuxer, 1876 | + &ff_image2pipe_demuxer, 1877 | + &ff_image2_alias_pix_demuxer, 1878 | + &ff_image2_brender_pix_demuxer, 1879 | + &ff_ingenient_demuxer, 1880 | + &ff_ipmovie_demuxer, 1881 | + &ff_ircam_demuxer, 1882 | + &ff_iss_demuxer, 1883 | + &ff_iv8_demuxer, 1884 | + &ff_ivf_demuxer, 1885 | + &ff_ivr_demuxer, 1886 | + &ff_jacosub_demuxer, 1887 | + &ff_jv_demuxer, 1888 | + &ff_kux_demuxer, 1889 | + &ff_kvag_demuxer, 1890 | + &ff_lmlm4_demuxer, 1891 | + &ff_loas_demuxer, 1892 | + &ff_lrc_demuxer, 1893 | + &ff_lvf_demuxer, 1894 | + &ff_lxf_demuxer, 1895 | + &ff_m4v_demuxer, 1896 | + &ff_matroska_demuxer, 1897 | + &ff_mgsts_demuxer, 1898 | + &ff_microdvd_demuxer, 1899 | + &ff_mjpeg_demuxer, 1900 | + &ff_mjpeg_2000_demuxer, 1901 | + &ff_mlp_demuxer, 1902 | + &ff_mlv_demuxer, 1903 | + &ff_mm_demuxer, 1904 | + &ff_mmf_demuxer, 1905 | + &ff_mov_demuxer, 1906 | + &ff_mp3_demuxer, 1907 | + &ff_mpc_demuxer, 1908 | + &ff_mpc8_demuxer, 1909 | + &ff_mpegps_demuxer, 1910 | + &ff_mpegts_demuxer, 1911 | + &ff_mpegtsraw_demuxer, 1912 | + &ff_mpegvideo_demuxer, 1913 | + &ff_mpjpeg_demuxer, 1914 | + &ff_mpl2_demuxer, 1915 | + &ff_mpsub_demuxer, 1916 | + &ff_msf_demuxer, 1917 | + &ff_msnwc_tcp_demuxer, 1918 | + &ff_mtaf_demuxer, 1919 | + &ff_mtv_demuxer, 1920 | + &ff_musx_demuxer, 1921 | + &ff_mv_demuxer, 1922 | + &ff_mvi_demuxer, 1923 | + &ff_mxf_demuxer, 1924 | + &ff_mxg_demuxer, 1925 | + &ff_nc_demuxer, 1926 | + &ff_nistsphere_demuxer, 1927 | + &ff_nsp_demuxer, 1928 | + &ff_nsv_demuxer, 1929 | + &ff_nut_demuxer, 1930 | + &ff_nuv_demuxer, 1931 | + &ff_ogg_demuxer, 1932 | + &ff_oma_demuxer, 1933 | + &ff_paf_demuxer, 1934 | + &ff_pcm_alaw_demuxer, 1935 | + &ff_pcm_mulaw_demuxer, 1936 | + &ff_pcm_vidc_demuxer, 1937 | + &ff_pcm_f64be_demuxer, 1938 | + &ff_pcm_f64le_demuxer, 1939 | + &ff_pcm_f32be_demuxer, 1940 | + &ff_pcm_f32le_demuxer, 1941 | + &ff_pcm_s32be_demuxer, 1942 | + &ff_pcm_s32le_demuxer, 1943 | + &ff_pcm_s24be_demuxer, 1944 | + &ff_pcm_s24le_demuxer, 1945 | + &ff_pcm_s16be_demuxer, 1946 | + &ff_pcm_s16le_demuxer, 1947 | + &ff_pcm_s8_demuxer, 1948 | + &ff_pcm_u32be_demuxer, 1949 | + &ff_pcm_u32le_demuxer, 1950 | + &ff_pcm_u24be_demuxer, 1951 | + &ff_pcm_u24le_demuxer, 1952 | + &ff_pcm_u16be_demuxer, 1953 | + &ff_pcm_u16le_demuxer, 1954 | + &ff_pcm_u8_demuxer, 1955 | + &ff_pjs_demuxer, 1956 | + &ff_pmp_demuxer, 1957 | + &ff_pp_bnk_demuxer, 1958 | + &ff_pva_demuxer, 1959 | + &ff_pvf_demuxer, 1960 | + &ff_qcp_demuxer, 1961 | + &ff_r3d_demuxer, 1962 | + &ff_rawvideo_demuxer, 1963 | + &ff_realtext_demuxer, 1964 | + &ff_redspark_demuxer, 1965 | + &ff_rl2_demuxer, 1966 | + &ff_rm_demuxer, 1967 | + &ff_roq_demuxer, 1968 | + &ff_rpl_demuxer, 1969 | + &ff_rsd_demuxer, 1970 | + &ff_rso_demuxer, 1971 | + &ff_rtp_demuxer, 1972 | + &ff_rtsp_demuxer, 1973 | + &ff_s337m_demuxer, 1974 | + &ff_sami_demuxer, 1975 | + &ff_sap_demuxer, 1976 | + &ff_sbc_demuxer, 1977 | + &ff_sbg_demuxer, 1978 | + &ff_scc_demuxer, 1979 | + &ff_sdp_demuxer, 1980 | + &ff_sdr2_demuxer, 1981 | + &ff_sds_demuxer, 1982 | + &ff_sdx_demuxer, 1983 | + &ff_segafilm_demuxer, 1984 | + &ff_ser_demuxer, 1985 | + &ff_shorten_demuxer, 1986 | + &ff_siff_demuxer, 1987 | + &ff_sln_demuxer, 1988 | + &ff_smacker_demuxer, 1989 | + &ff_smjpeg_demuxer, 1990 | + &ff_smush_demuxer, 1991 | + &ff_sol_demuxer, 1992 | + &ff_sox_demuxer, 1993 | + &ff_spdif_demuxer, 1994 | + &ff_srt_demuxer, 1995 | + &ff_str_demuxer, 1996 | + &ff_stl_demuxer, 1997 | + &ff_subviewer1_demuxer, 1998 | + &ff_subviewer_demuxer, 1999 | + &ff_sup_demuxer, 2000 | + &ff_svag_demuxer, 2001 | + &ff_swf_demuxer, 2002 | + &ff_tak_demuxer, 2003 | + &ff_tedcaptions_demuxer, 2004 | + &ff_thp_demuxer, 2005 | + &ff_threedostr_demuxer, 2006 | + &ff_tiertexseq_demuxer, 2007 | + &ff_tmv_demuxer, 2008 | + &ff_truehd_demuxer, 2009 | + &ff_tta_demuxer, 2010 | + &ff_txd_demuxer, 2011 | + &ff_tty_demuxer, 2012 | + &ff_ty_demuxer, 2013 | + &ff_v210_demuxer, 2014 | + &ff_v210x_demuxer, 2015 | + &ff_vag_demuxer, 2016 | + &ff_vc1_demuxer, 2017 | + &ff_vc1t_demuxer, 2018 | + &ff_vividas_demuxer, 2019 | + &ff_vivo_demuxer, 2020 | + &ff_vmd_demuxer, 2021 | + &ff_vobsub_demuxer, 2022 | + &ff_voc_demuxer, 2023 | + &ff_vpk_demuxer, 2024 | + &ff_vplayer_demuxer, 2025 | + &ff_vqf_demuxer, 2026 | + &ff_w64_demuxer, 2027 | + &ff_wav_demuxer, 2028 | + &ff_wc3_demuxer, 2029 | + &ff_webm_dash_manifest_demuxer, 2030 | + &ff_webvtt_demuxer, 2031 | + &ff_wsaud_demuxer, 2032 | + &ff_wsd_demuxer, 2033 | + &ff_wsvqa_demuxer, 2034 | + &ff_wtv_demuxer, 2035 | + &ff_wve_demuxer, 2036 | + &ff_wv_demuxer, 2037 | + &ff_xa_demuxer, 2038 | + &ff_xbin_demuxer, 2039 | + &ff_xmv_demuxer, 2040 | + &ff_xvag_demuxer, 2041 | + &ff_xwma_demuxer, 2042 | + &ff_yop_demuxer, 2043 | + &ff_yuv4mpegpipe_demuxer, 2044 | + &ff_image_bmp_pipe_demuxer, 2045 | + &ff_image_dds_pipe_demuxer, 2046 | + &ff_image_dpx_pipe_demuxer, 2047 | + &ff_image_exr_pipe_demuxer, 2048 | + &ff_image_gif_pipe_demuxer, 2049 | + &ff_image_j2k_pipe_demuxer, 2050 | + &ff_image_jpeg_pipe_demuxer, 2051 | + &ff_image_jpegls_pipe_demuxer, 2052 | + &ff_image_pam_pipe_demuxer, 2053 | + &ff_image_pbm_pipe_demuxer, 2054 | + &ff_image_pcx_pipe_demuxer, 2055 | + &ff_image_pgmyuv_pipe_demuxer, 2056 | + &ff_image_pgm_pipe_demuxer, 2057 | + &ff_image_pictor_pipe_demuxer, 2058 | + &ff_image_png_pipe_demuxer, 2059 | + &ff_image_ppm_pipe_demuxer, 2060 | + &ff_image_psd_pipe_demuxer, 2061 | + &ff_image_qdraw_pipe_demuxer, 2062 | + &ff_image_sgi_pipe_demuxer, 2063 | + &ff_image_svg_pipe_demuxer, 2064 | + &ff_image_sunrast_pipe_demuxer, 2065 | + &ff_image_tiff_pipe_demuxer, 2066 | + &ff_image_webp_pipe_demuxer, 2067 | + &ff_image_xpm_pipe_demuxer, 2068 | + &ff_image_xwd_pipe_demuxer, 2069 | + NULL }; 2070 | diff -ruN ffmpeg-4.3.1-orig/libavformat/muxer_list.c ffmpeg-4.3.1/libavformat/muxer_list.c 2071 | --- ffmpeg-4.3.1-orig/libavformat/muxer_list.c 1970-01-01 03:00:00.000000000 +0300 2072 | +++ ffmpeg-4.3.1/libavformat/muxer_list.c 2021-06-10 15:07:03.596325077 +0300 2073 | @@ -0,0 +1,166 @@ 2074 | +static const AVOutputFormat * const muxer_list[] = { 2075 | + &ff_a64_muxer, 2076 | + &ff_ac3_muxer, 2077 | + &ff_adts_muxer, 2078 | + &ff_adx_muxer, 2079 | + &ff_aiff_muxer, 2080 | + &ff_amr_muxer, 2081 | + &ff_apng_muxer, 2082 | + &ff_aptx_muxer, 2083 | + &ff_aptx_hd_muxer, 2084 | + &ff_asf_muxer, 2085 | + &ff_ass_muxer, 2086 | + &ff_ast_muxer, 2087 | + &ff_asf_stream_muxer, 2088 | + &ff_au_muxer, 2089 | + &ff_avi_muxer, 2090 | + &ff_avm2_muxer, 2091 | + &ff_avs2_muxer, 2092 | + &ff_bit_muxer, 2093 | + &ff_caf_muxer, 2094 | + &ff_cavsvideo_muxer, 2095 | + &ff_codec2_muxer, 2096 | + &ff_codec2raw_muxer, 2097 | + &ff_crc_muxer, 2098 | + &ff_dash_muxer, 2099 | + &ff_data_muxer, 2100 | + &ff_daud_muxer, 2101 | + &ff_dirac_muxer, 2102 | + &ff_dnxhd_muxer, 2103 | + &ff_dts_muxer, 2104 | + &ff_dv_muxer, 2105 | + &ff_eac3_muxer, 2106 | + &ff_f4v_muxer, 2107 | + &ff_ffmetadata_muxer, 2108 | + &ff_fifo_muxer, 2109 | + &ff_fifo_test_muxer, 2110 | + &ff_filmstrip_muxer, 2111 | + &ff_fits_muxer, 2112 | + &ff_flac_muxer, 2113 | + &ff_flv_muxer, 2114 | + &ff_framecrc_muxer, 2115 | + &ff_framehash_muxer, 2116 | + &ff_framemd5_muxer, 2117 | + &ff_g722_muxer, 2118 | + &ff_g723_1_muxer, 2119 | + &ff_g726_muxer, 2120 | + &ff_g726le_muxer, 2121 | + &ff_gif_muxer, 2122 | + &ff_gsm_muxer, 2123 | + &ff_gxf_muxer, 2124 | + &ff_h261_muxer, 2125 | + &ff_h263_muxer, 2126 | + &ff_h264_muxer, 2127 | + &ff_hash_muxer, 2128 | + &ff_hds_muxer, 2129 | + &ff_hevc_muxer, 2130 | + &ff_hls_muxer, 2131 | + &ff_ico_muxer, 2132 | + &ff_ilbc_muxer, 2133 | + &ff_image2_muxer, 2134 | + &ff_image2pipe_muxer, 2135 | + &ff_ipod_muxer, 2136 | + &ff_ircam_muxer, 2137 | + &ff_ismv_muxer, 2138 | + &ff_ivf_muxer, 2139 | + &ff_jacosub_muxer, 2140 | + &ff_kvag_muxer, 2141 | + &ff_latm_muxer, 2142 | + &ff_lrc_muxer, 2143 | + &ff_m4v_muxer, 2144 | + &ff_md5_muxer, 2145 | + &ff_matroska_muxer, 2146 | + &ff_matroska_audio_muxer, 2147 | + &ff_microdvd_muxer, 2148 | + &ff_mjpeg_muxer, 2149 | + &ff_mlp_muxer, 2150 | + &ff_mmf_muxer, 2151 | + &ff_mov_muxer, 2152 | + &ff_mp2_muxer, 2153 | + &ff_mp3_muxer, 2154 | + &ff_mp4_muxer, 2155 | + &ff_mpeg1system_muxer, 2156 | + &ff_mpeg1vcd_muxer, 2157 | + &ff_mpeg1video_muxer, 2158 | + &ff_mpeg2dvd_muxer, 2159 | + &ff_mpeg2svcd_muxer, 2160 | + &ff_mpeg2video_muxer, 2161 | + &ff_mpeg2vob_muxer, 2162 | + &ff_mpegts_muxer, 2163 | + &ff_mpjpeg_muxer, 2164 | + &ff_mxf_muxer, 2165 | + &ff_mxf_d10_muxer, 2166 | + &ff_mxf_opatom_muxer, 2167 | + &ff_null_muxer, 2168 | + &ff_nut_muxer, 2169 | + &ff_oga_muxer, 2170 | + &ff_ogg_muxer, 2171 | + &ff_ogv_muxer, 2172 | + &ff_oma_muxer, 2173 | + &ff_opus_muxer, 2174 | + &ff_pcm_alaw_muxer, 2175 | + &ff_pcm_mulaw_muxer, 2176 | + &ff_pcm_vidc_muxer, 2177 | + &ff_pcm_f64be_muxer, 2178 | + &ff_pcm_f64le_muxer, 2179 | + &ff_pcm_f32be_muxer, 2180 | + &ff_pcm_f32le_muxer, 2181 | + &ff_pcm_s32be_muxer, 2182 | + &ff_pcm_s32le_muxer, 2183 | + &ff_pcm_s24be_muxer, 2184 | + &ff_pcm_s24le_muxer, 2185 | + &ff_pcm_s16be_muxer, 2186 | + &ff_pcm_s16le_muxer, 2187 | + &ff_pcm_s8_muxer, 2188 | + &ff_pcm_u32be_muxer, 2189 | + &ff_pcm_u32le_muxer, 2190 | + &ff_pcm_u24be_muxer, 2191 | + &ff_pcm_u24le_muxer, 2192 | + &ff_pcm_u16be_muxer, 2193 | + &ff_pcm_u16le_muxer, 2194 | + &ff_pcm_u8_muxer, 2195 | + &ff_psp_muxer, 2196 | + &ff_rawvideo_muxer, 2197 | + &ff_rm_muxer, 2198 | + &ff_roq_muxer, 2199 | + &ff_rso_muxer, 2200 | + &ff_rtp_muxer, 2201 | + &ff_rtp_mpegts_muxer, 2202 | + &ff_rtsp_muxer, 2203 | + &ff_sap_muxer, 2204 | + &ff_sbc_muxer, 2205 | + &ff_scc_muxer, 2206 | + &ff_segafilm_muxer, 2207 | + &ff_segment_muxer, 2208 | + &ff_stream_segment_muxer, 2209 | + &ff_singlejpeg_muxer, 2210 | + &ff_smjpeg_muxer, 2211 | + &ff_smoothstreaming_muxer, 2212 | + &ff_sox_muxer, 2213 | + &ff_spx_muxer, 2214 | + &ff_spdif_muxer, 2215 | + &ff_srt_muxer, 2216 | + &ff_streamhash_muxer, 2217 | + &ff_sup_muxer, 2218 | + &ff_swf_muxer, 2219 | + &ff_tee_muxer, 2220 | + &ff_tg2_muxer, 2221 | + &ff_tgp_muxer, 2222 | + &ff_mkvtimestamp_v2_muxer, 2223 | + &ff_truehd_muxer, 2224 | + &ff_tta_muxer, 2225 | + &ff_uncodedframecrc_muxer, 2226 | + &ff_vc1_muxer, 2227 | + &ff_vc1t_muxer, 2228 | + &ff_voc_muxer, 2229 | + &ff_w64_muxer, 2230 | + &ff_wav_muxer, 2231 | + &ff_webm_muxer, 2232 | + &ff_webm_dash_manifest_muxer, 2233 | + &ff_webm_chunk_muxer, 2234 | + &ff_webp_muxer, 2235 | + &ff_webvtt_muxer, 2236 | + &ff_wtv_muxer, 2237 | + &ff_wv_muxer, 2238 | + &ff_yuv4mpegpipe_muxer, 2239 | + NULL }; 2240 | diff -ruN ffmpeg-4.3.1-orig/libavformat/protocol_list.c ffmpeg-4.3.1/libavformat/protocol_list.c 2241 | --- ffmpeg-4.3.1-orig/libavformat/protocol_list.c 1970-01-01 03:00:00.000000000 +0300 2242 | +++ ffmpeg-4.3.1/libavformat/protocol_list.c 2021-06-10 15:07:03.640326028 +0300 2243 | @@ -0,0 +1,30 @@ 2244 | +static const URLProtocol * const url_protocols[] = { 2245 | + &ff_async_protocol, 2246 | + &ff_cache_protocol, 2247 | + &ff_concat_protocol, 2248 | + &ff_crypto_protocol, 2249 | + &ff_data_protocol, 2250 | + &ff_ffrtmphttp_protocol, 2251 | + &ff_file_protocol, 2252 | + &ff_ftp_protocol, 2253 | + &ff_gopher_protocol, 2254 | + &ff_hls_protocol, 2255 | + &ff_http_protocol, 2256 | + &ff_httpproxy_protocol, 2257 | + &ff_icecast_protocol, 2258 | + &ff_mmsh_protocol, 2259 | + &ff_mmst_protocol, 2260 | + &ff_md5_protocol, 2261 | + &ff_pipe_protocol, 2262 | + &ff_prompeg_protocol, 2263 | + &ff_rtmp_protocol, 2264 | + &ff_rtmpt_protocol, 2265 | + &ff_rtp_protocol, 2266 | + &ff_srtp_protocol, 2267 | + &ff_subfile_protocol, 2268 | + &ff_tee_protocol, 2269 | + &ff_tcp_protocol, 2270 | + &ff_udp_protocol, 2271 | + &ff_udplite_protocol, 2272 | + &ff_unix_protocol, 2273 | + NULL }; 2274 | diff -ruN ffmpeg-4.3.1-orig/libavutil/avconfig.h ffmpeg-4.3.1/libavutil/avconfig.h 2275 | --- ffmpeg-4.3.1-orig/libavutil/avconfig.h 1970-01-01 03:00:00.000000000 +0300 2276 | +++ ffmpeg-4.3.1/libavutil/avconfig.h 2021-06-10 15:07:03.344319628 +0300 2277 | @@ -0,0 +1,6 @@ 2278 | +/* Generated by ffmpeg configure */ 2279 | +#ifndef AVUTIL_AVCONFIG_H 2280 | +#define AVUTIL_AVCONFIG_H 2281 | +#define AV_HAVE_BIGENDIAN 0 2282 | +#define AV_HAVE_FAST_UNALIGNED 1 2283 | +#endif /* AVUTIL_AVCONFIG_H */ 2284 | diff -ruN ffmpeg-4.3.1-orig/libavutil/ffversion.h ffmpeg-4.3.1/libavutil/ffversion.h 2285 | --- ffmpeg-4.3.1-orig/libavutil/ffversion.h 1970-01-01 03:00:00.000000000 +0300 2286 | +++ ffmpeg-4.3.1/libavutil/ffversion.h 2021-06-10 15:07:22.352730682 +0300 2287 | @@ -0,0 +1,5 @@ 2288 | +/* Automatically generated by version.sh, do not manually edit! */ 2289 | +#ifndef AVUTIL_FFVERSION_H 2290 | +#define AVUTIL_FFVERSION_H 2291 | +#define FFMPEG_VERSION "4.3.1" 2292 | +#endif /* AVUTIL_FFVERSION_H */ 2293 | --------------------------------------------------------------------------------