Updated to version 4.0

This commit is contained in:
Daniel Bermond
2018-04-20 18:03:05 +00:00
parent ea214daae6
commit 2c3d4a857a
4 changed files with 31 additions and 191 deletions
+10 -10
View File
@@ -1,7 +1,7 @@
pkgbase = ffmpeg-full pkgbase = ffmpeg-full
pkgdesc = Complete solution to record, convert and stream audio and video (all possible features including nvenc, qsv and libfdk-aac) pkgdesc = Complete solution to record, convert and stream audio and video (all possible features including nvenc, qsv and libfdk-aac)
pkgver = 3.4.2 pkgver = 4.0
pkgrel = 8 pkgrel = 1
url = http://www.ffmpeg.org/ url = http://www.ffmpeg.org/
arch = i686 arch = i686
arch = x86_64 arch = x86_64
@@ -9,6 +9,7 @@ pkgbase = ffmpeg-full
makedepends = nasm makedepends = nasm
makedepends = opencl-headers makedepends = opencl-headers
makedepends = blackmagic-decklink-sdk makedepends = blackmagic-decklink-sdk
makedepends = ffnvcodec-headers
depends = glibc depends = glibc
depends = alsa-lib depends = alsa-lib
depends = jack depends = jack
@@ -47,6 +48,7 @@ pkgbase = ffmpeg-full
depends = snappy depends = snappy
depends = libsoxr depends = libsoxr
depends = speex depends = speex
depends = srt
depends = libssh depends = libssh
depends = tesseract depends = tesseract
depends = libtheora depends = libtheora
@@ -65,11 +67,11 @@ pkgbase = ffmpeg-full
depends = zimg depends = zimg
depends = zeromq depends = zeromq
depends = zvbi depends = zvbi
depends = lilv
depends = xz depends = xz
depends = openal depends = openal
depends = opencl-icd-loader depends = opencl-icd-loader
depends = mesa depends = mesa
depends = openssl
depends = sndio depends = sndio
depends = sdl2 depends = sdl2
depends = libx11 depends = libx11
@@ -79,6 +81,8 @@ pkgbase = ffmpeg-full
depends = libdrm depends = libdrm
depends = libvdpau depends = libvdpau
depends = chromaprint-fftw depends = chromaprint-fftw
depends = aom-git
depends = codec2
depends = flite1-patched depends = flite1-patched
depends = libilbc depends = libilbc
depends = kvazaar depends = kvazaar
@@ -114,18 +118,14 @@ pkgbase = ffmpeg-full
conflicts = ffmpeg-full-git conflicts = ffmpeg-full-git
conflicts = ffmpeg-semifull-git conflicts = ffmpeg-semifull-git
conflicts = ffmpeg-qsv-git conflicts = ffmpeg-qsv-git
source = https://ffmpeg.org/releases/ffmpeg-3.4.2.tar.xz source = https://ffmpeg.org/releases/ffmpeg-4.0.tar.xz
source = ffmpeg-full-rkmpp-build-fix.patch
source = ffmpeg-full-rkmpp-remove-stream-start.patch
source = LICENSE source = LICENSE
sha256sums = 2b92e9578ef8b3e49eeab229e69305f5f4cbc1fdaa22e927fc7fca18acccd740 sha256sums = ed945daf40b124e77a685893cc025d086f638bc703183460aff49508edb3a43f
sha256sums = 142923fd02851343bfbfd31b201ba014dced8a8c8898373c72d71d30d59f5851
sha256sums = cac8577126c3e49f8c915fa289f3f5aa624dc55f897b8b7a5613191bcfa9c097
sha256sums = 04a7176400907fd7db0d69116b99de49e582a6e176b3bfb36a03e50a4cb26a36 sha256sums = 04a7176400907fd7db0d69116b99de49e582a6e176b3bfb36a03e50a4cb26a36
depends_x86_64 = cuda depends_x86_64 = cuda
depends_x86_64 = nvidia-utils depends_x86_64 = nvidia-utils
depends_x86_64 = intel-media-sdk depends_x86_64 = intel-media-sdk
makedepends_x86_64 = vmaf makedepends_x86_64 = vmaf-git
pkgname = ffmpeg-full pkgname = ffmpeg-full
+21 -20
View File
@@ -3,8 +3,8 @@
pkgname=ffmpeg-full pkgname=ffmpeg-full
_srcname=ffmpeg _srcname=ffmpeg
pkgver=3.4.2 pkgver=4.0
pkgrel=8 pkgrel=1
pkgdesc='Complete solution to record, convert and stream audio and video (all possible features including nvenc, qsv and libfdk-aac)' pkgdesc='Complete solution to record, convert and stream audio and video (all possible features including nvenc, qsv and libfdk-aac)'
arch=('i686' 'x86_64') arch=('i686' 'x86_64')
url='http://www.ffmpeg.org/' url='http://www.ffmpeg.org/'
@@ -16,14 +16,14 @@ depends=(
'libbluray' 'libbs2b' 'libcaca' 'celt' 'libcdio-paranoia' 'libdc1394' 'libbluray' 'libbs2b' 'libcaca' 'celt' 'libcdio-paranoia' 'libdc1394'
'libavc1394' 'libfdk-aac' 'fontconfig' 'freetype2' 'fribidi' 'libgme' 'gsm' 'libavc1394' 'libfdk-aac' 'fontconfig' 'freetype2' 'fribidi' 'libgme' 'gsm'
'libiec61883' 'libmodplug' 'lame' 'opencore-amr' 'openjpeg2' 'opus' 'pulseaudio' 'libiec61883' 'libmodplug' 'lame' 'opencore-amr' 'openjpeg2' 'opus' 'pulseaudio'
'librsvg' 'rubberband' 'rtmpdump' 'smbclient' 'snappy' 'libsoxr' 'speex' 'librsvg' 'rubberband' 'rtmpdump' 'smbclient' 'snappy' 'libsoxr' 'speex' 'srt'
'libssh' 'tesseract' 'libtheora' 'twolame' 'v4l-utils' 'vid.stab' 'libvorbis' 'libssh' 'tesseract' 'libtheora' 'twolame' 'v4l-utils' 'vid.stab' 'libvorbis'
'libvpx' 'wavpack' 'libwebp' 'libx264.so' 'x265' 'libxcb' 'xvidcore' 'libxml2' 'libvpx' 'wavpack' 'libwebp' 'libx264.so' 'x265' 'libxcb' 'xvidcore' 'libxml2'
'zimg' 'zeromq' 'zvbi' 'xz' 'openal' 'opencl-icd-loader' 'mesa' 'openssl' 'zimg' 'zeromq' 'zvbi' 'lilv' 'xz' 'openal' 'opencl-icd-loader' 'mesa' 'sndio'
'sndio' 'sdl2' 'libx11' 'zlib' 'libomxil-bellagio' 'libva' 'libdrm' 'libvdpau' 'sdl2' 'libx11' 'zlib' 'libomxil-bellagio' 'libva' 'libdrm' 'libvdpau'
# AUR: # AUR:
'chromaprint-fftw' 'flite1-patched' 'libilbc' 'kvazaar' 'openh264' 'chromaprint-fftw' 'aom-git' 'codec2' 'flite1-patched' 'libilbc' 'kvazaar'
'libopenmpt-svn' 'shine' 'vo-amrwbenc' 'xavs' 'ndi-sdk' 'libmysofa' 'openh264' 'libopenmpt-svn' 'shine' 'vo-amrwbenc' 'xavs' 'ndi-sdk' 'libmysofa'
'rockchip-mpp' 'rockchip-mpp'
) )
depends_x86_64=( depends_x86_64=(
@@ -36,11 +36,11 @@ makedepends=(
# official repositories: # official repositories:
'nasm' 'opencl-headers' 'nasm' 'opencl-headers'
# AUR: # AUR:
'blackmagic-decklink-sdk' 'blackmagic-decklink-sdk' 'ffnvcodec-headers'
) )
makedepends_x86_64=( makedepends_x86_64=(
# AUR: # AUR:
'vmaf' 'vmaf-git'
) )
provides=( provides=(
'ffmpeg' 'ffmpeg-full-nvenc' 'ffmpeg-nvenc' 'ffmpeg-libfdk_aac' 'ffmpeg-decklink' 'ffmpeg' 'ffmpeg-full-nvenc' 'ffmpeg-nvenc' 'ffmpeg-libfdk_aac' 'ffmpeg-decklink'
@@ -53,12 +53,8 @@ conflicts=(
'ffmpeg-git' 'ffmpeg-full-git' 'ffmpeg-semifull-git' 'ffmpeg-qsv-git' 'ffmpeg-git' 'ffmpeg-full-git' 'ffmpeg-semifull-git' 'ffmpeg-qsv-git'
) )
source=("https://ffmpeg.org/releases/ffmpeg-${pkgver}.tar.xz" source=("https://ffmpeg.org/releases/ffmpeg-${pkgver}.tar.xz"
'ffmpeg-full-rkmpp-build-fix.patch'
'ffmpeg-full-rkmpp-remove-stream-start.patch'
'LICENSE') 'LICENSE')
sha256sums=('2b92e9578ef8b3e49eeab229e69305f5f4cbc1fdaa22e927fc7fca18acccd740' sha256sums=('ed945daf40b124e77a685893cc025d086f638bc703183460aff49508edb3a43f'
'142923fd02851343bfbfd31b201ba014dced8a8c8898373c72d71d30d59f5851'
'cac8577126c3e49f8c915fa289f3f5aa624dc55f897b8b7a5613191bcfa9c097'
'04a7176400907fd7db0d69116b99de49e582a6e176b3bfb36a03e50a4cb26a36') '04a7176400907fd7db0d69116b99de49e582a6e176b3bfb36a03e50a4cb26a36')
prepare() { prepare() {
@@ -67,9 +63,6 @@ prepare() {
# strictly specifying nvcc path is needed if package is installing # strictly specifying nvcc path is needed if package is installing
# cuda for the first time (nvcc path will be in $PATH only after relogin) # cuda for the first time (nvcc path will be in $PATH only after relogin)
sed -i "s|^nvcc_default=.*|nvcc_default='/opt/cuda/bin/nvcc'|" configure sed -i "s|^nvcc_default=.*|nvcc_default='/opt/cuda/bin/nvcc'|" configure
patch -Np1 -i "${srcdir}/ffmpeg-full-rkmpp-build-fix.patch"
patch -Np1 -i "${srcdir}/ffmpeg-full-rkmpp-remove-stream-start.patch"
} }
build() { build() {
@@ -102,6 +95,7 @@ build() {
--prefix='/usr' \ --prefix='/usr' \
--extra-cflags="$_cflags" \ --extra-cflags="$_cflags" \
--extra-ldflags="$_ldflags" \ --extra-ldflags="$_ldflags" \
--extra-libs='-lpthread' \
\ \
--disable-rpath \ --disable-rpath \
--enable-gpl \ --enable-gpl \
@@ -121,14 +115,15 @@ build() {
--enable-gmp \ --enable-gmp \
--enable-gnutls \ --enable-gnutls \
--enable-iconv \ --enable-iconv \
--enable-jack \
--enable-ladspa \ --enable-ladspa \
--enable-libaom \
--enable-libass \ --enable-libass \
--enable-libbluray \ --enable-libbluray \
--enable-libbs2b \ --enable-libbs2b \
--enable-libcaca \ --enable-libcaca \
--enable-libcelt \ --enable-libcelt \
--enable-libcdio \ --enable-libcdio \
--enable-libcodec2 \
--enable-libdc1394 \ --enable-libdc1394 \
--enable-libfdk-aac \ --enable-libfdk-aac \
--enable-libflite \ --enable-libflite \
@@ -139,6 +134,7 @@ build() {
--enable-libgsm \ --enable-libgsm \
--enable-libiec61883 \ --enable-libiec61883 \
--enable-libilbc \ --enable-libilbc \
--enable-libjack \
--enable-libkvazaar \ --enable-libkvazaar \
--enable-libmodplug \ --enable-libmodplug \
--enable-libmp3lame \ --enable-libmp3lame \
@@ -158,9 +154,11 @@ build() {
--enable-libsnappy \ --enable-libsnappy \
--enable-libsoxr \ --enable-libsoxr \
--enable-libspeex \ --enable-libspeex \
--enable-libsrt \
--enable-libssh \ --enable-libssh \
--enable-libtesseract \ --enable-libtesseract \
--enable-libtheora \ --enable-libtheora \
--disable-libtls \
--enable-libtwolame \ --enable-libtwolame \
--enable-libv4l2 \ --enable-libv4l2 \
--enable-libvidstab \ --enable-libvidstab \
@@ -182,6 +180,7 @@ build() {
--enable-libzimg \ --enable-libzimg \
--enable-libzmq \ --enable-libzmq \
--enable-libzvbi \ --enable-libzvbi \
--enable-lv2 \
--enable-lzma \ --enable-lzma \
--enable-decklink \ --enable-decklink \
--enable-libndi_newtek \ --enable-libndi_newtek \
@@ -189,22 +188,24 @@ build() {
--enable-openal \ --enable-openal \
--enable-opencl \ --enable-opencl \
--enable-opengl \ --enable-opengl \
--enable-openssl \ --disable-openssl \
--enable-sndio \ --enable-sndio \
--enable-sdl2 \ --enable-sdl2 \
--enable-xlib \ --enable-xlib \
--enable-zlib \ --enable-zlib \
\ \
--enable-cuda \
$_cudasdk \ $_cudasdk \
--enable-cuvid \ --enable-cuvid \
--enable-ffnvcodec \
--enable-libdrm \ --enable-libdrm \
$_libmfx \ $_libmfx \
$_libnpp \ $_libnpp \
--enable-nvdec \
--enable-nvenc \ --enable-nvenc \
--enable-omx \ --enable-omx \
--enable-omx-rpi \ --enable-omx-rpi \
--enable-rkmpp \ --enable-rkmpp \
--enable-v4l2-m2m \
--enable-vaapi \ --enable-vaapi \
--enable-vdpau --enable-vdpau
-78
View File
@@ -1,78 +0,0 @@
From: LongChair <longchair@hotmail.com>
Date: Sat, 6 Jan 2018 08:36:58 +0000 (+0100)
Subject: avcodec/rkmpp : Fix broken build due to missing control operation
X-Git-Url: http://git.videolan.org/?p=ffmpeg.git;a=commitdiff_plain;h=c6f84106366c6f243a8b07dbffcc7880009aa904
avcodec/rkmpp : Fix broken build due to missing control operation
This patch is taking care of https://trac.ffmpeg.org/ticket/6834.
It seems that one of the control operations that was available to get
the free decoders input slots was removed.
There is another control operation to retrieve the used slots. Given
that the input slot count is hardcoded to 4 in mpp at this point,
replacing the old control operation by the other one.
This was tested on Rockchip ROCK64.
Signed-off-by: wm4 <nfxjfg@googlemail.com>
---
diff -Naurp a/configure b/configure
--- a/configure 2017-12-10 19:35:18.000000000 -0200
+++ b/configure 2018-01-06 23:27:24.057673297 -0200
@@ -6077,10 +6077,8 @@ enabled openssl && { use_pkg_c
check_lib openssl openssl/ssl.h SSL_library_init -lssl32 -leay32 ||
check_lib openssl openssl/ssl.h SSL_library_init -lssl -lcrypto -lws2_32 -lgdi32 ||
die "ERROR: openssl not found"; }
-enabled rkmpp && { { require_pkg_config rockchip_mpp rockchip_mpp rockchip/rk_mpi.h mpp_create ||
- die "ERROR : Rockchip MPP was not found."; } &&
- { check_func_headers rockchip/rk_mpi_cmd.h "MPP_DEC_GET_FREE_PACKET_SLOT_COUNT" ||
- die "ERROR: Rockchip MPP is outdated, please get a more recent one."; } &&
+enabled rkmpp && { require_pkg_config rkmpp rockchip_mpp rockchip/rk_mpi.h mpp_create &&
+ require_pkg_config rockchip_mpp "rockchip_mpp >= 1.3.7" rockchip/rk_mpi.h mpp_create &&
{ enabled libdrm ||
die "ERROR: rkmpp requires --enable-libdrm"; }
}
diff --git a/libavcodec/rkmppdec.c b/libavcodec/rkmppdec.c
index c57a6ded38..946b827918 100644
--- a/libavcodec/rkmppdec.c
+++ b/libavcodec/rkmppdec.c
@@ -40,6 +40,7 @@
#define RECEIVE_FRAME_TIMEOUT 100
#define FRAMEGROUP_MAX_FRAMES 16
+#define INPUT_MAX_PACKETS 4
typedef struct {
MppCtx ctx;
@@ -515,16 +516,17 @@ static int rkmpp_receive_frame(AVCodecContext *avctx, AVFrame *frame)
RKMPPDecoder *decoder = (RKMPPDecoder *)rk_context->decoder_ref->data;
int ret = MPP_NOK;
AVPacket pkt = {0};
- RK_S32 freeslots;
+ RK_S32 usedslots, freeslots;
if (!decoder->eos_reached) {
// we get the available slots in decoder
- ret = decoder->mpi->control(decoder->ctx, MPP_DEC_GET_FREE_PACKET_SLOT_COUNT, &freeslots);
+ ret = decoder->mpi->control(decoder->ctx, MPP_DEC_GET_STREAM_COUNT, &usedslots);
if (ret != MPP_OK) {
- av_log(avctx, AV_LOG_ERROR, "Failed to get decoder free slots (code = %d).\n", ret);
+ av_log(avctx, AV_LOG_ERROR, "Failed to get decoder used slots (code = %d).\n", ret);
return ret;
}
+ freeslots = INPUT_MAX_PACKETS - usedslots;
if (freeslots > 0) {
ret = ff_decode_get_packet(avctx, &pkt);
if (ret < 0 && ret != AVERROR_EOF) {
@@ -541,7 +543,7 @@ static int rkmpp_receive_frame(AVCodecContext *avctx, AVFrame *frame)
}
// make sure we keep decoder full
- if (freeslots > 1 && decoder->first_frame)
+ if (freeslots > 1)
return AVERROR(EAGAIN);
}
@@ -1,83 +0,0 @@
From: LongChair <longchair@hotmail.com>
Date: Tue, 2 Jan 2018 11:38:01 +0000 (+0100)
Subject: avcodec/rkmpp : remove stream start retries before first frame.
X-Git-Url: http://git.videolan.org/?p=ffmpeg.git;a=commitdiff_plain;h=2ca65fc7b74444edd51d5803a2c1e05a801a6023
avcodec/rkmpp : remove stream start retries before first frame.
those were needed because of some odd mpp behavior that seems to have
been fixed.
Makes the code cleaner.
Signed-off-by: wm4 <nfxjfg@googlemail.com>
---
diff --git a/libavcodec/rkmppdec.c b/libavcodec/rkmppdec.c
index 946b827918..143d05bd51 100644
--- a/libavcodec/rkmppdec.c
+++ b/libavcodec/rkmppdec.c
@@ -47,7 +47,6 @@ typedef struct {
MppApi *mpi;
MppBufferGroup frame_group;
- char first_frame;
char first_packet;
char eos_reached;
@@ -329,28 +328,14 @@ static int rkmpp_retrieve_frame(AVCodecContext *avctx, AVFrame *frame)
MppBuffer buffer = NULL;
AVDRMFrameDescriptor *desc = NULL;
AVDRMLayerDescriptor *layer = NULL;
- int retrycount = 0;
int mode;
MppFrameFormat mppformat;
uint32_t drmformat;
- // on start of decoding, MPP can return -1, which is supposed to be expected
- // this is due to some internal MPP init which is not completed, that will
- // only happen in the first few frames queries, but should not be interpreted
- // as an error, Therefore we need to retry a couple times when we get -1
- // in order to let it time to complete it's init, then we sleep a bit between retries.
-retry_get_frame:
ret = decoder->mpi->decode_get_frame(decoder->ctx, &mppframe);
- if (ret != MPP_OK && ret != MPP_ERR_TIMEOUT && !decoder->first_frame) {
- if (retrycount < 5) {
- av_log(avctx, AV_LOG_DEBUG, "Failed to get a frame, retrying (code = %d, retrycount = %d)\n", ret, retrycount);
- usleep(10000);
- retrycount++;
- goto retry_get_frame;
- } else {
- av_log(avctx, AV_LOG_ERROR, "Failed to get a frame from MPP (code = %d)\n", ret);
- goto fail;
- }
+ if (ret != MPP_OK && ret != MPP_ERR_TIMEOUT) {
+ av_log(avctx, AV_LOG_ERROR, "Failed to get a frame from MPP (code = %d)\n", ret);
+ goto fail;
}
if (mppframe) {
@@ -366,7 +351,6 @@ retry_get_frame:
avctx->height = mpp_frame_get_height(mppframe);
decoder->mpi->control(decoder->ctx, MPP_DEC_SET_INFO_CHANGE_READY, NULL);
- decoder->first_frame = 1;
av_buffer_unref(&decoder->frames_ref);
@@ -480,7 +464,6 @@ retry_get_frame:
goto fail;
}
- decoder->first_frame = 0;
return 0;
} else {
av_log(avctx, AV_LOG_ERROR, "Failed to retrieve the frame buffer, frame is dropped (code = %d)\n", ret);
@@ -560,7 +543,6 @@ static void rkmpp_flush(AVCodecContext *avctx)
ret = decoder->mpi->reset(decoder->ctx);
if (ret == MPP_OK) {
- decoder->first_frame = 1;
decoder->first_packet = 1;
} else
av_log(avctx, AV_LOG_ERROR, "Failed to reset MPI (code = %d)\n", ret);