aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2013-12-08 13:49:16 +0100
committerMichael Niedermayer <michaelni@gmx.at>2013-12-08 13:49:16 +0100
commiteb87d1f6784fb488b95fb0932c0367e8d9d0418d (patch)
tree0db5e72271bf5d627d4da9f3de5293b54e85d038
parentae330070ee8b985abb011835502b03baacfbb18c (diff)
parent9aa053ceded5550b2e538578af383fd89d82364c (diff)
downloadffmpeg-eb87d1f6784fb488b95fb0932c0367e8d9d0418d.tar.gz
Merge remote-tracking branch 'qatar/master'
* qatar/master: libvpx: do not mark VP9 as experimental when using libvpx >= 1.3.0 Conflicts: libavcodec/libvpxdec.c libavcodec/libvpxenc.c Merged-by: Michael Niedermayer <michaelni@gmx.at>
-rw-r--r--libavcodec/Makefile4
-rw-r--r--libavcodec/libvpx.c35
-rw-r--r--libavcodec/libvpx.h28
-rw-r--r--libavcodec/libvpxdec.c6
-rw-r--r--libavcodec/libvpxenc.c6
5 files changed, 75 insertions, 4 deletions
diff --git a/libavcodec/Makefile b/libavcodec/Makefile
index a44ceec065..6cd18de965 100644
--- a/libavcodec/Makefile
+++ b/libavcodec/Makefile
@@ -733,8 +733,8 @@ OBJS-$(CONFIG_LIBVORBIS_ENCODER) += libvorbisenc.o \
vorbis_data.o vorbis_parser.o xiph.o
OBJS-$(CONFIG_LIBVPX_VP8_DECODER) += libvpxdec.o
OBJS-$(CONFIG_LIBVPX_VP8_ENCODER) += libvpxenc.o
-OBJS-$(CONFIG_LIBVPX_VP9_DECODER) += libvpxdec.o
-OBJS-$(CONFIG_LIBVPX_VP9_ENCODER) += libvpxenc.o
+OBJS-$(CONFIG_LIBVPX_VP9_DECODER) += libvpxdec.o libvpx.o
+OBJS-$(CONFIG_LIBVPX_VP9_ENCODER) += libvpxenc.o libvpx.o
OBJS-$(CONFIG_LIBWAVPACK_ENCODER) += libwavpackenc.o
OBJS-$(CONFIG_LIBX264_ENCODER) += libx264.o
OBJS-$(CONFIG_LIBXAVS_ENCODER) += libxavs.o
diff --git a/libavcodec/libvpx.c b/libavcodec/libvpx.c
new file mode 100644
index 0000000000..9ff2e91bc4
--- /dev/null
+++ b/libavcodec/libvpx.c
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2013 Guillaume Martres <smarter@ubuntu.com>
+ *
+ * This file is part of FFmpeg.
+ *
+ * FFmpeg is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * FFmpeg is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with FFmpeg; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#include <vpx/vpx_codec.h>
+
+#include "libvpx.h"
+
+int ff_vp9_check_experimental(AVCodecContext *avctx)
+{
+ if (avctx->strict_std_compliance > FF_COMPLIANCE_EXPERIMENTAL &&
+ (vpx_codec_version_major() < 1 ||
+ (vpx_codec_version_major() == 1 && vpx_codec_version_minor() < 3))) {
+ av_log(avctx, AV_LOG_ERROR,
+ "Non-experimental support of VP9 requires libvpx >= 1.3.0\n");
+ return AVERROR_EXPERIMENTAL;
+ }
+ return 0;
+}
diff --git a/libavcodec/libvpx.h b/libavcodec/libvpx.h
new file mode 100644
index 0000000000..2c901f92ef
--- /dev/null
+++ b/libavcodec/libvpx.h
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2013 Guillaume Martres <smarter@ubuntu.com>
+ *
+ * This file is part of FFmpeg.
+ *
+ * FFmpeg is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * FFmpeg is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with FFmpeg; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#ifndef AVCODEC_LIBVPX_H
+#define AVCODEC_LIBVPX_H
+
+#include "avcodec.h"
+
+int ff_vp9_check_experimental(AVCodecContext *avctx);
+
+#endif /* AVCODEC_LIBVPX_H */
diff --git a/libavcodec/libvpxdec.c b/libavcodec/libvpxdec.c
index b2471c722b..8d608c3860 100644
--- a/libavcodec/libvpxdec.c
+++ b/libavcodec/libvpxdec.c
@@ -31,6 +31,7 @@
#include "libavutil/imgutils.h"
#include "avcodec.h"
#include "internal.h"
+#include "libvpx.h"
typedef struct VP8DecoderContext {
struct vpx_codec_ctx decoder;
@@ -132,6 +133,9 @@ AVCodec ff_libvpx_vp8_decoder = {
#if CONFIG_LIBVPX_VP9_DECODER
static av_cold int vp9_init(AVCodecContext *avctx)
{
+ int ret;
+ if ((ret = ff_vp9_check_experimental(avctx)))
+ return ret;
return vpx_init(avctx, &vpx_codec_vp9_dx_algo);
}
@@ -144,6 +148,6 @@ AVCodec ff_libvpx_vp9_decoder = {
.init = vp9_init,
.close = vp8_free,
.decode = vp8_decode,
- .capabilities = CODEC_CAP_AUTO_THREADS | CODEC_CAP_DR1 | CODEC_CAP_EXPERIMENTAL,
+ .capabilities = CODEC_CAP_AUTO_THREADS | CODEC_CAP_DR1,
};
#endif /* CONFIG_LIBVPX_VP9_DECODER */
diff --git a/libavcodec/libvpxenc.c b/libavcodec/libvpxenc.c
index 65586cf02a..8883801e1b 100644
--- a/libavcodec/libvpxenc.c
+++ b/libavcodec/libvpxenc.c
@@ -31,6 +31,7 @@
#include "avcodec.h"
#include "internal.h"
#include "libavutil/avassert.h"
+#include "libvpx.h"
#include "libavutil/base64.h"
#include "libavutil/common.h"
#include "libavutil/intreadwrite.h"
@@ -849,6 +850,9 @@ AVCodec ff_libvpx_vp8_encoder = {
#if CONFIG_LIBVPX_VP9_ENCODER
static av_cold int vp9_init(AVCodecContext *avctx)
{
+ int ret;
+ if ((ret = ff_vp9_check_experimental(avctx)))
+ return ret;
return vpx_init(avctx, &vpx_codec_vp9_cx_algo);
}
@@ -868,7 +872,7 @@ AVCodec ff_libvpx_vp9_encoder = {
.init = vp9_init,
.encode2 = vp8_encode,
.close = vp8_free,
- .capabilities = CODEC_CAP_DELAY | CODEC_CAP_AUTO_THREADS | CODEC_CAP_EXPERIMENTAL,
+ .capabilities = CODEC_CAP_DELAY | CODEC_CAP_AUTO_THREADS,
.pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_YUV420P, AV_PIX_FMT_NONE },
.priv_class = &class_vp9,
.defaults = defaults,