From d0a63d8b989647ffdb5f40da8e1feaffe1a8e791 Mon Sep 17 00:00:00 2001 From: Anton Khirnov Date: Fri, 13 Mar 2015 08:13:00 +0100 Subject: qsvdec: split off some code that will be shared with the encoder --- libavcodec/qsvdec.c | 89 +++-------------------------------------------------- 1 file changed, 5 insertions(+), 84 deletions(-) (limited to 'libavcodec/qsvdec.c') diff --git a/libavcodec/qsvdec.c b/libavcodec/qsvdec.c index 03e31c5bc1..039a0fe925 100644 --- a/libavcodec/qsvdec.c +++ b/libavcodec/qsvdec.c @@ -34,43 +34,9 @@ #include "avcodec.h" #include "internal.h" +#include "qsv_internal.h" #include "qsvdec.h" -int ff_qsv_error(int mfx_err) -{ - switch (mfx_err) { - case MFX_ERR_NONE: - return 0; - case MFX_ERR_MEMORY_ALLOC: - case MFX_ERR_NOT_ENOUGH_BUFFER: - return AVERROR(ENOMEM); - case MFX_ERR_INVALID_HANDLE: - return AVERROR(EINVAL); - case MFX_ERR_DEVICE_FAILED: - case MFX_ERR_DEVICE_LOST: - case MFX_ERR_LOCK_MEMORY: - return AVERROR(EIO); - case MFX_ERR_NULL_PTR: - case MFX_ERR_UNDEFINED_BEHAVIOR: - case MFX_ERR_NOT_INITIALIZED: - return AVERROR_BUG; - case MFX_ERR_UNSUPPORTED: - case MFX_ERR_NOT_FOUND: - return AVERROR(ENOSYS); - case MFX_ERR_MORE_DATA: - case MFX_ERR_MORE_SURFACE: - case MFX_ERR_MORE_BITSTREAM: - return AVERROR(EAGAIN); - case MFX_ERR_INCOMPATIBLE_VIDEO_PARAM: - case MFX_ERR_INVALID_VIDEO_PARAM: - return AVERROR(EINVAL); - case MFX_ERR_ABORTED: - case MFX_ERR_UNKNOWN: - default: - return AVERROR_UNKNOWN; - } -} - int ff_qsv_map_pixfmt(enum AVPixelFormat format) { switch (format) { @@ -82,58 +48,13 @@ int ff_qsv_map_pixfmt(enum AVPixelFormat format) } } -static int codec_id_to_mfx(enum AVCodecID codec_id) -{ - switch (codec_id) { - case AV_CODEC_ID_H264: - return MFX_CODEC_AVC; - case AV_CODEC_ID_MPEG1VIDEO: - case AV_CODEC_ID_MPEG2VIDEO: - return MFX_CODEC_MPEG2; - case AV_CODEC_ID_VC1: - return MFX_CODEC_VC1; - default: - break; - } - - return AVERROR(ENOSYS); -} - static int qsv_init_session(AVCodecContext *avctx, QSVContext *q, mfxSession session) { if (!session) { if (!q->internal_session) { - mfxIMPL impl = MFX_IMPL_AUTO_ANY; - mfxVersion ver = { { QSV_VERSION_MINOR, QSV_VERSION_MAJOR } }; - - const char *desc; - int ret; - - ret = MFXInit(impl, &ver, &q->internal_session); - if (ret < 0) { - av_log(avctx, AV_LOG_ERROR, "Error initializing an internal MFX session\n"); - return ff_qsv_error(ret); - } - - MFXQueryIMPL(q->internal_session, &impl); - - switch (MFX_IMPL_BASETYPE(impl)) { - case MFX_IMPL_SOFTWARE: - desc = "software"; - break; - case MFX_IMPL_HARDWARE: - case MFX_IMPL_HARDWARE2: - case MFX_IMPL_HARDWARE3: - case MFX_IMPL_HARDWARE4: - desc = "hardware accelerated"; - break; - default: - desc = "unknown"; - } - - av_log(avctx, AV_LOG_VERBOSE, - "Initialized an internal MFX session using %s implementation\n", - desc); + int ret = ff_qsv_init_internal_session(avctx, &q->internal_session); + if (ret < 0) + return ret; } q->session = q->internal_session; @@ -159,7 +80,7 @@ int ff_qsv_init(AVCodecContext *avctx, QSVContext *q, mfxSession session) } - ret = codec_id_to_mfx(avctx->codec_id); + ret = ff_qsv_codec_id_to_mfx(avctx->codec_id); if (ret < 0) return ret; -- cgit v1.2.3