diff options
author | Guillaume Martres <smarter@ubuntu.com> | 2013-11-15 23:28:30 +0100 |
---|---|---|
committer | Diego Biurrun <diego@biurrun.de> | 2013-12-08 00:28:27 +0100 |
commit | 9aa053ceded5550b2e538578af383fd89d82364c (patch) | |
tree | 59fda0bc8eb5493846787ab47da09a3aa28926cc | |
parent | b6a971994187e87fcc8811108e144f15c1652728 (diff) | |
download | ffmpeg-9aa053ceded5550b2e538578af383fd89d82364c.tar.gz |
libvpx: do not mark VP9 as experimental when using libvpx >= 1.3.0
Signed-off-by: Diego Biurrun <diego@biurrun.de>
-rw-r--r-- | libavcodec/Makefile | 4 | ||||
-rw-r--r-- | libavcodec/libvpx.c | 35 | ||||
-rw-r--r-- | libavcodec/libvpx.h | 28 | ||||
-rw-r--r-- | libavcodec/libvpxdec.c | 6 | ||||
-rw-r--r-- | libavcodec/libvpxenc.c | 6 |
5 files changed, 75 insertions, 4 deletions
diff --git a/libavcodec/Makefile b/libavcodec/Makefile index a4314bb3db..4a304ec320 100644 --- a/libavcodec/Makefile +++ b/libavcodec/Makefile @@ -611,8 +611,8 @@ OBJS-$(CONFIG_LIBVORBIS_ENCODER) += libvorbis.o \ vorbis_data.o vorbis_parser.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..20f44841f2 --- /dev/null +++ b/libavcodec/libvpx.c @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2013 Guillaume Martres <smarter@ubuntu.com> + * + * This file is part of Libav. + * + * Libav 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. + * + * Libav 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 Libav; 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..cb1ed0959f --- /dev/null +++ b/libavcodec/libvpx.h @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2013 Guillaume Martres <smarter@ubuntu.com> + * + * This file is part of Libav. + * + * Libav 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. + * + * Libav 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 Libav; 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 d65f7f95ce..6052207b76 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_EXPERIMENTAL, + .capabilities = CODEC_CAP_AUTO_THREADS, }; #endif /* CONFIG_LIBVPX_VP9_DECODER */ diff --git a/libavcodec/libvpxenc.c b/libavcodec/libvpxenc.c index 9996afc74c..ce8ea33149 100644 --- a/libavcodec/libvpxenc.c +++ b/libavcodec/libvpxenc.c @@ -30,6 +30,7 @@ #include "avcodec.h" #include "internal.h" +#include "libvpx.h" #include "libavutil/base64.h" #include "libavutil/common.h" #include "libavutil/mathematics.h" @@ -605,6 +606,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); } @@ -624,7 +628,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, |