libvpx: do not mark VP9 as experimental when using libvpx >= 1.3.0

Signed-off-by: Diego Biurrun <diego@biurrun.de>
This commit is contained in:
Guillaume Martres 2013-11-15 23:28:30 +01:00 committed by Diego Biurrun
parent b6a9719941
commit 9aa053cede
5 changed files with 75 additions and 4 deletions

View File

@ -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

35
libavcodec/libvpx.c Normal file
View File

@ -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;
}

28
libavcodec/libvpx.h Normal file
View File

@ -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 */

View File

@ -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 */

View File

@ -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,