* 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>tags/n2.2-rc1
@@ -733,8 +733,8 @@ OBJS-$(CONFIG_LIBVORBIS_ENCODER) += libvorbisenc.o \ | |||||
vorbis_data.o vorbis_parser.o xiph.o | vorbis_data.o vorbis_parser.o xiph.o | ||||
OBJS-$(CONFIG_LIBVPX_VP8_DECODER) += libvpxdec.o | OBJS-$(CONFIG_LIBVPX_VP8_DECODER) += libvpxdec.o | ||||
OBJS-$(CONFIG_LIBVPX_VP8_ENCODER) += libvpxenc.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_LIBWAVPACK_ENCODER) += libwavpackenc.o | ||||
OBJS-$(CONFIG_LIBX264_ENCODER) += libx264.o | OBJS-$(CONFIG_LIBX264_ENCODER) += libx264.o | ||||
OBJS-$(CONFIG_LIBXAVS_ENCODER) += libxavs.o | OBJS-$(CONFIG_LIBXAVS_ENCODER) += libxavs.o | ||||
@@ -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; | |||||
} |
@@ -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 */ |
@@ -31,6 +31,7 @@ | |||||
#include "libavutil/imgutils.h" | #include "libavutil/imgutils.h" | ||||
#include "avcodec.h" | #include "avcodec.h" | ||||
#include "internal.h" | #include "internal.h" | ||||
#include "libvpx.h" | |||||
typedef struct VP8DecoderContext { | typedef struct VP8DecoderContext { | ||||
struct vpx_codec_ctx decoder; | struct vpx_codec_ctx decoder; | ||||
@@ -132,6 +133,9 @@ AVCodec ff_libvpx_vp8_decoder = { | |||||
#if CONFIG_LIBVPX_VP9_DECODER | #if CONFIG_LIBVPX_VP9_DECODER | ||||
static av_cold int vp9_init(AVCodecContext *avctx) | 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); | return vpx_init(avctx, &vpx_codec_vp9_dx_algo); | ||||
} | } | ||||
@@ -144,6 +148,6 @@ AVCodec ff_libvpx_vp9_decoder = { | |||||
.init = vp9_init, | .init = vp9_init, | ||||
.close = vp8_free, | .close = vp8_free, | ||||
.decode = vp8_decode, | .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 */ | #endif /* CONFIG_LIBVPX_VP9_DECODER */ |
@@ -31,6 +31,7 @@ | |||||
#include "avcodec.h" | #include "avcodec.h" | ||||
#include "internal.h" | #include "internal.h" | ||||
#include "libavutil/avassert.h" | #include "libavutil/avassert.h" | ||||
#include "libvpx.h" | |||||
#include "libavutil/base64.h" | #include "libavutil/base64.h" | ||||
#include "libavutil/common.h" | #include "libavutil/common.h" | ||||
#include "libavutil/intreadwrite.h" | #include "libavutil/intreadwrite.h" | ||||
@@ -849,6 +850,9 @@ AVCodec ff_libvpx_vp8_encoder = { | |||||
#if CONFIG_LIBVPX_VP9_ENCODER | #if CONFIG_LIBVPX_VP9_ENCODER | ||||
static av_cold int vp9_init(AVCodecContext *avctx) | 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); | return vpx_init(avctx, &vpx_codec_vp9_cx_algo); | ||||
} | } | ||||
@@ -868,7 +872,7 @@ AVCodec ff_libvpx_vp9_encoder = { | |||||
.init = vp9_init, | .init = vp9_init, | ||||
.encode2 = vp8_encode, | .encode2 = vp8_encode, | ||||
.close = vp8_free, | .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 }, | .pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_YUV420P, AV_PIX_FMT_NONE }, | ||||
.priv_class = &class_vp9, | .priv_class = &class_vp9, | ||||
.defaults = defaults, | .defaults = defaults, | ||||