Merge commit 'd0a63d8b989647ffdb5f40da8e1feaffe1a8e791'
authorMichael Niedermayer <michaelni@gmx.at>
Sat, 28 Mar 2015 00:16:21 +0000 (01:16 +0100)
committerMichael Niedermayer <michaelni@gmx.at>
Sat, 28 Mar 2015 00:16:21 +0000 (01:16 +0100)
* 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>
1  2 
configure
libavcodec/Makefile
libavcodec/qsv.c
libavcodec/qsv_internal.h
libavcodec/qsvdec.c
libavcodec/qsvdec.h
libavcodec/qsvdec_h264.c

diff --cc configure
+++ b/configure
@@@ -2071,8 -1759,9 +2072,9 @@@ me_cmp_select="fdctdsp idctdsp pixblock
  mpeg_er_select="error_resilience"
  mpegaudio_select="mpegaudiodsp"
  mpegaudiodsp_select="dct"
 -mpegvideo_select="blockdsp hpeldsp idctdsp me_cmp videodsp"
 +mpegvideo_select="blockdsp h264chroma hpeldsp idctdsp me_cmp videodsp"
  mpegvideoenc_select="me_cmp mpegvideo pixblockdsp qpeldsp"
+ qsvdec_select="qsv"
  
  # decoders / encoders
  aac_decoder_select="imdct15 mdct sinewin"
@@@ -89,9 -78,9 +89,10 @@@ OBJS-$(CONFIG_MPEGVIDEO)               
  OBJS-$(CONFIG_MPEGVIDEOENC)            += mpegvideo_enc.o mpeg12data.o  \
                                            motion_est.o ratecontrol.o    \
                                            mpegvideoencdsp.o
 +OBJS-$(CONFIG_NVENC)                   += nvenc.o
  OBJS-$(CONFIG_PIXBLOCKDSP)             += pixblockdsp.o
  OBJS-$(CONFIG_QPELDSP)                 += qpeldsp.o
+ OBJS-$(CONFIG_QSV)                     += qsv.o
  OBJS-$(CONFIG_QSVDEC)                  += qsvdec.o
  OBJS-$(CONFIG_RANGECODER)              += rangecoder.o
  RDFT-OBJS-$(CONFIG_HARDCODED_TABLES)   += sin_tables.o
@@@ -864,9 -719,8 +865,9 @@@ SKIPHEADERS                            
  
  SKIPHEADERS-$(CONFIG_DXVA2)            += dxva2.h dxva2_internal.h
  SKIPHEADERS-$(CONFIG_LIBSCHROEDINGER)  += libschroedinger.h
 -SKIPHEADERS-$(CONFIG_MPEG_XVMC_DECODER) += xvmc.h
 +SKIPHEADERS-$(CONFIG_LIBUTVIDEO)       += libutvideo.h
- SKIPHEADERS-$(CONFIG_QSVDEC)           += qsv.h qsvdec.h
+ SKIPHEADERS-$(CONFIG_QSVDEC)           += qsv.h qsvdec.h qsv_internal.h
 +SKIPHEADERS-$(CONFIG_XVMC)             += xvmc.h
  SKIPHEADERS-$(CONFIG_VAAPI)            += vaapi_internal.h
  SKIPHEADERS-$(CONFIG_VDA)              += vda.h vda_internal.h
  SKIPHEADERS-$(CONFIG_VDPAU)            += vdpau.h vdpau_internal.h
index 0000000,bd9e18d..31be9d1
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,115 +1,115 @@@
 - * This file is part of Libav.
+ /*
+  * Intel MediaSDK QSV encoder/decoder shared code
+  *
 - * Libav is free software; you can redistribute it and/or
++ * This file is part of FFmpeg.
+  *
 - * Libav is distributed in the hope that it will be useful,
++ * 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.
+  *
 - * License along with Libav; if not, write to the Free Software
++ * 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 <mfx/mfxvideo.h>
+ #include "libavutil/error.h"
+ #include "avcodec.h"
+ #include "qsv_internal.h"
+ int ff_qsv_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);
+ }
+ 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_init_internal_session(AVCodecContext *avctx, mfxSession *session)
+ {
+     mfxIMPL impl   = MFX_IMPL_AUTO_ANY;
+     mfxVersion ver = { { QSV_VERSION_MINOR, QSV_VERSION_MAJOR } };
+     const char *desc;
+     int ret;
+     ret = MFXInit(impl, &ver, session);
+     if (ret < 0) {
+         av_log(avctx, AV_LOG_ERROR, "Error initializing an internal MFX session\n");
+         return ff_qsv_error(ret);
+     }
+     MFXQueryIMPL(*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);
+     return 0;
+ }
index 0000000,4bfef4a..b107913
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,38 +1,38 @@@
 - * This file is part of Libav.
+ /*
+  * Intel MediaSDK QSV encoder/decoder shared code
+  *
 - * Libav is free software; you can redistribute it and/or
++ * This file is part of FFmpeg.
+  *
 - * Libav is distributed in the hope that it will be useful,
++ * 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.
+  *
 - * License along with Libav; if not, write to the Free Software
++ * 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_QSV_INTERNAL_H
+ #define AVCODEC_QSV_INTERNAL_H
+ #define QSV_VERSION_MAJOR 1
+ #define QSV_VERSION_MINOR 1
+ #define ASYNC_DEPTH_DEFAULT 4       // internal parallelism
+ /**
+  * Convert a libmfx error code into a libav error code.
+  */
+ int ff_qsv_error(int mfx_err);
+ int ff_qsv_codec_id_to_mfx(enum AVCodecID codec_id);
+ int ff_qsv_init_internal_session(AVCodecContext *avctx, mfxSession *session);
+ #endif /* AVCODEC_QSV_INTERNAL_H */
Simple merge
Simple merge
Simple merge