summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorReynaldo H. Verdejo Pinochet <reynaldo@osg.samsung.com>2015-12-02 12:27:08 -0800
committerReynaldo H. Verdejo Pinochet <reynaldo@osg.samsung.com>2015-12-04 11:59:47 -0800
commit193b0d81d1fc85eb2d51847e90b0098e8a111988 (patch)
tree2461b3a1610193c89f5ace233196811a021a0a49
parentd9dec6893a0c66870d08bdfbee5b0ad9fcb66674 (diff)
downloadgst-libav-193b0d81d1fc85eb2d51847e90b0098e8a111988.tar.gz
Require libav provided by FFmpeg at run-time
Error out if system's libav* libraries are not provided by FFmpeg. Libav-incompatible changes were introduced to support the latter so we can no longer support both. https://bugzilla.gnome.org/show_bug.cgi?id=758183
-rw-r--r--ext/libav/gstav.c25
1 files changed, 24 insertions, 1 deletions
diff --git a/ext/libav/gstav.c b/ext/libav/gstav.c
index 1c2e482..66b8bca 100644
--- a/ext/libav/gstav.c
+++ b/ext/libav/gstav.c
@@ -38,6 +38,23 @@ GST_DEBUG_CATEGORY (ffmpeg_debug);
static GMutex gst_avcodec_mutex;
+/*
+ * Check for FFmpeg-provided libavcodec/format
+ */
+static inline gboolean
+gst_ffmpeg_avcodec_is_ffmpeg (void)
+{
+ guint av_version = avutil_version ();
+
+ GST_DEBUG ("Using libavcodec version %d.%d.%d",
+ av_version >> 16, (av_version & 0x00ff00) >> 8, av_version & 0xff);
+
+ /* FFmpeg *_MICRO versions start at 100 and Libav's at 0 */
+ if ((av_version & 0xff) < 100)
+ return FALSE;
+
+ return TRUE;
+}
int
gst_ffmpeg_avcodec_open (AVCodecContext * avctx, AVCodec * codec)
@@ -118,8 +135,14 @@ static gboolean
plugin_init (GstPlugin * plugin)
{
GST_DEBUG_CATEGORY_INIT (ffmpeg_debug, "libav", 0, "libav elements");
-#ifndef GST_DISABLE_GST_DEBUG
+ /* Bail if not FFmpeg. We can no longer ensure operation with Libav */
+ if (!gst_ffmpeg_avcodec_is_ffmpeg ()) {
+ GST_ERROR_OBJECT (plugin,
+ "Incompatible, non-FFmpeg libavcodec/format found");
+ return FALSE;
+ }
+#ifndef GST_DISABLE_GST_DEBUG
av_log_set_callback (gst_ffmpeg_log_callback);
#endif