Hi
This is the fixed version of this patch that follows the way other
companies do on supporting FFmpeg.
1>Put library mvm264 to the nonfree list in configure
2>Remove calling to dlopen
Please review.
Thanks.
Yufei
From 1a636c0aa2288731374a4a6139c385baad2a8e98 Mon Sep 17 00:00:00 2001
From: yhe
Date: Fri, 29 Mar 2019 10:06:37 -0400
Subject: [PATCH] h.264 decoder and encoder support with M264
---
Changelog | 1 +
configure | 6 +
libavcodec/Makefile| 2 +
libavcodec/allcodecs.c | 2 +
libavcodec/m264dec.c | 304 +
libavcodec/m264dec.h | 40 +++
libavcodec/m264enc.c | 262 ++
libavcodec/m264enc.h | 38 +++
8 files changed, 655 insertions(+)
create mode 100644 libavcodec/m264dec.c
create mode 100644 libavcodec/m264dec.h
create mode 100644 libavcodec/m264enc.c
create mode 100644 libavcodec/m264enc.h
diff --git a/Changelog b/Changelog
index 4d80e5b..ce0daf8 100644
--- a/Changelog
+++ b/Changelog
@@ -19,6 +19,7 @@ version :
- ARBC decoder
- libaribb24 based ARIB STD-B24 caption support (profiles A and C)
- Support decoding of HEVC 4:4:4 content in nvdec and cuviddec
+- Support h.264 encoding and decoding with Matrox M264 card.
version 4.1:
diff --git a/configure b/configure
index dcead3a..b579d10 100755
--- a/configure
+++ b/configure
@@ -302,6 +302,7 @@ External library support:
--enable-mbedtls enable mbedTLS, needed for https support
if openssl, gnutls or libtls is not used [no]
--enable-mediacodec enable Android MediaCodec support [no]
+ --enable-mvm264 enable Matrox M264 H.264 support [no]
--enable-libmysofa enable libmysofa, needed for sofalizer filter [no]
--enable-openal enable OpenAL 1.1 capture support [no]
--enable-opencl enable OpenCL processing [no]
@@ -1717,6 +1718,7 @@ EXTERNAL_LIBRARY_NONFREE_LIST="
libfdk_aac
openssl
libtls
+mvm264
"
EXTERNAL_LIBRARY_VERSION3_LIST="
@@ -2697,6 +2699,8 @@ h263p_decoder_select="h263_decoder"
h263p_encoder_select="h263_encoder"
h264_decoder_select="cabac golomb h264chroma h264dsp h264parse h264pred h264qpel videodsp"
h264_decoder_suggest="error_resilience"
+h264_m264_decoder_deps="mvm264"
+h264_m264_encoder_deps="mvm264"
hap_decoder_select="snappy texturedsp"
hap_encoder_deps="libsnappy"
hap_encoder_select="texturedspenc"
@@ -2753,6 +2757,7 @@ msmpeg4v3_decoder_select="h263_decoder"
msmpeg4v3_encoder_select="h263_encoder"
mss2_decoder_select="mpegvideo qpeldsp vc1_decoder"
mts2_decoder_select="mss34dsp"
+mvm264_deps_any="libdl LoadLibrary"
mwsc_decoder_deps="zlib"
mxpeg_decoder_select="mjpeg_decoder"
nellymoser_decoder_select="mdct sinewin"
@@ -6277,6 +6282,7 @@ enabled mmal && { check_lib mmal interface/mmal/mmal.h mmal_port_co
check_lib mmal interface/mmal/mmal.h mmal_port_connect -lmmal_core -lmmal_util -lmmal_vc_client -lbcm_host; } ||
die "ERROR: mmal not found" &&
check_func_headers interface/mmal/mmal.h "MMAL_PARAMETER_VIDEO_MAX_NUM_CALLBACKS"; }
+enabled mvm264&& require_headers mvm264api.h
enabled openal&& { { for al_extralibs in "${OPENAL_LIBS}" "-lopenal" "-lOpenAL32"; do
check_lib openal 'AL/al.h' alGetError "${al_extralibs}" && break; done } ||
die "ERROR: openal not found"; } &&
diff --git a/libavcodec/Makefile b/libavcodec/Makefile
index 15c43a8..8e8f9ab 100644
--- a/libavcodec/Makefile
+++ b/libavcodec/Makefile
@@ -348,6 +348,8 @@ OBJS-$(CONFIG_H264_DECODER)+= h264dec.o h264_cabac.o h264_cavlc.o \
h264_slice.o h264data.o
OBJS-$(CONFIG_H264_AMF_ENCODER)+= amfenc_h264.o
OBJS-$(CONFIG_H264_CUVID_DECODER) += cuviddec.o
+OBJS-$(CONFIG_H264_M264_DECODER) += m264dec.o
+OBJS-$(CONFIG_H264_M264_ENCODER) += m264enc.o
OBJS-$(CONFIG_H264_MEDIACODEC_DECODER) += mediacodecdec.o
OBJS-$(CONFIG_H264_MMAL_DECODER) += mmaldec.o
OBJS-$(CONFIG_H264_NVENC_ENCODER) += nvenc_h264.o
diff --git a/libavcodec/allcodecs.c b/libavcodec/allcodecs.c
index b26aeca..c03a5a3 100644
--- a/libavcodec/allcodecs.c
+++ b/libavcodec/allcodecs.c
@@ -737,6 +737,8 @@ extern AVCodec ff_libopenh264_encoder;
extern AVCodec ff_libopenh264_decoder;
extern AVCodec ff_h264_amf_encoder;
extern AVCodec ff_h264_cuvid_decoder;
+extern AVCodec ff_h264_m264_decoder;
+extern AVCodec ff_h264_m264_encoder;
extern AVCodec ff_h264_nvenc_encoder;
extern AVCodec ff_h264_omx_encoder;
extern AVCodec ff_h264_qsv_encoder;
diff --git a/libavcodec/m264dec.c b/libavcodec/m264dec.c
new file mode 100644
index 000..cb58bad
--- /dev/null
+++ b/libavcodec/m264dec.c
@@ -0,0 +1,304 @@
+/*
+ * M264 H.264 video decoder
+ *
+ * This file