[FFmpeg-cvslog] qsvdec: make ff_qsv_map_pixfmt() return a MFX fourcc as well

Anton Khirnov git at videolan.org
Mon Nov 14 16:20:21 EET 2016


ffmpeg | branch: master | Anton Khirnov <anton at khirnov.net> | Wed Jun 22 11:41:26 2016 +0200| [536bb17e9659c5ed7576a218d4085cdd6d5742fa] | committer: Anton Khirnov

qsvdec: make ff_qsv_map_pixfmt() return a MFX fourcc as well

Stop hardcoding NV12.

Also, move this function to the shared code, it will be used by the
encoder as well.

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=536bb17e9659c5ed7576a218d4085cdd6d5742fa
---

 libavcodec/qsv.c          | 12 ++++++++++++
 libavcodec/qsv_internal.h |  2 ++
 libavcodec/qsvdec.c       | 15 ++-------------
 libavcodec/qsvdec.h       |  3 +--
 4 files changed, 17 insertions(+), 15 deletions(-)

diff --git a/libavcodec/qsv.c b/libavcodec/qsv.c
index 8596f0d..5be6405 100644
--- a/libavcodec/qsv.c
+++ b/libavcodec/qsv.c
@@ -89,6 +89,18 @@ int ff_qsv_error(int mfx_err)
     }
 }
 
+int ff_qsv_map_pixfmt(enum AVPixelFormat format, uint32_t *fourcc)
+{
+    switch (format) {
+    case AV_PIX_FMT_YUV420P:
+    case AV_PIX_FMT_YUVJ420P:
+        *fourcc = MFX_FOURCC_NV12;
+        return AV_PIX_FMT_NV12;
+    default:
+        return AVERROR(ENOSYS);
+    }
+}
+
 static int qsv_load_plugins(mfxSession session, const char *load_plugins,
                             void *logctx)
 {
diff --git a/libavcodec/qsv_internal.h b/libavcodec/qsv_internal.h
index ceee8df..e865741 100644
--- a/libavcodec/qsv_internal.h
+++ b/libavcodec/qsv_internal.h
@@ -61,6 +61,8 @@ int ff_qsv_error(int mfx_err);
 
 int ff_qsv_codec_id_to_mfx(enum AVCodecID codec_id);
 
+int ff_qsv_map_pixfmt(enum AVPixelFormat format, uint32_t *fourcc);
+
 int ff_qsv_init_internal_session(AVCodecContext *avctx, mfxSession *session,
                                  const char *load_plugins);
 
diff --git a/libavcodec/qsvdec.c b/libavcodec/qsvdec.c
index 0215761..2b01d34 100644
--- a/libavcodec/qsvdec.c
+++ b/libavcodec/qsvdec.c
@@ -40,17 +40,6 @@
 #include "qsv_internal.h"
 #include "qsvdec.h"
 
-int ff_qsv_map_pixfmt(enum AVPixelFormat format)
-{
-    switch (format) {
-    case AV_PIX_FMT_YUV420P:
-    case AV_PIX_FMT_YUVJ420P:
-        return AV_PIX_FMT_NV12;
-    default:
-        return AVERROR(ENOSYS);
-    }
-}
-
 static int qsv_init_session(AVCodecContext *avctx, QSVContext *q, mfxSession session,
                             AVBufferRef *hw_frames_ref)
 {
@@ -150,7 +139,7 @@ static int qsv_decode_init(AVCodecContext *avctx, QSVContext *q)
     param.mfx.FrameInfo.BitDepthLuma   = 8;
     param.mfx.FrameInfo.BitDepthChroma = 8;
     param.mfx.FrameInfo.Shift          = 0;
-    param.mfx.FrameInfo.FourCC         = MFX_FOURCC_NV12;
+    param.mfx.FrameInfo.FourCC         = q->fourcc;
     param.mfx.FrameInfo.Width          = avctx->coded_width;
     param.mfx.FrameInfo.Height         = avctx->coded_height;
     param.mfx.FrameInfo.ChromaFormat   = MFX_CHROMAFORMAT_YUV420;
@@ -463,7 +452,7 @@ int ff_qsv_process_data(AVCodecContext *avctx, QSVContext *q,
                                            AV_PIX_FMT_NONE };
         enum AVPixelFormat qsv_format;
 
-        qsv_format = ff_qsv_map_pixfmt(q->parser->format);
+        qsv_format = ff_qsv_map_pixfmt(q->parser->format, &q->fourcc);
         if (qsv_format < 0) {
             av_log(avctx, AV_LOG_ERROR,
                    "Only 8-bit YUV420 streams are supported.\n");
diff --git a/libavcodec/qsvdec.h b/libavcodec/qsvdec.h
index 9853591..de66a7d 100644
--- a/libavcodec/qsvdec.h
+++ b/libavcodec/qsvdec.h
@@ -56,6 +56,7 @@ typedef struct QSVContext {
     AVCodecParserContext *parser;
     AVCodecContext *avctx_internal;
     enum AVPixelFormat orig_pix_fmt;
+    uint32_t fourcc;
 
     // options set by the caller
     int async_depth;
@@ -67,8 +68,6 @@ typedef struct QSVContext {
     int         nb_ext_buffers;
 } QSVContext;
 
-int ff_qsv_map_pixfmt(enum AVPixelFormat format);
-
 int ff_qsv_process_data(AVCodecContext *avctx, QSVContext *q,
                         AVFrame *frame, int *got_frame, AVPacket *pkt);
 



More information about the ffmpeg-cvslog mailing list