diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2015-03-28 03:16:21 +0300 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2015-03-28 03:16:21 +0300 |
commit | b12eacb3837cad2daaeda1f77ceb1045bca68789 (patch) | |
tree | 10428214a95fd2fce6c115ebf0dac9c709d35b4f /libavcodec/qsvdec.c | |
parent | 151ae8ea5b54e12da6d53fa96d67026371e760ea (diff) | |
parent | d0a63d8b989647ffdb5f40da8e1feaffe1a8e791 (diff) |
Merge commit 'd0a63d8b989647ffdb5f40da8e1feaffe1a8e791'
* commit 'd0a63d8b989647ffdb5f40da8e1feaffe1a8e791':
qsvdec: split off some code that will be shared with the encoder
Conflicts:
libavcodec/Makefile
libavcodec/qsvdec.h
Merged-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavcodec/qsvdec.c')
-rw-r--r-- | libavcodec/qsvdec.c | 89 |
1 files changed, 5 insertions, 84 deletions
diff --git a/libavcodec/qsvdec.c b/libavcodec/qsvdec.c index 762f158fff..0115b377d9 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; |