diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2013-12-08 13:49:16 +0100 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2013-12-08 13:49:16 +0100 |
commit | eb87d1f6784fb488b95fb0932c0367e8d9d0418d (patch) | |
tree | 0db5e72271bf5d627d4da9f3de5293b54e85d038 | |
parent | ae330070ee8b985abb011835502b03baacfbb18c (diff) | |
parent | 9aa053ceded5550b2e538578af383fd89d82364c (diff) | |
download | ffmpeg-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/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 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, |