-
Notifications
You must be signed in to change notification settings - Fork 34
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Submodule ffmpeg f89949a..e4c1272 Update 0018, 0031, 0057, 0068, 0076 and 0077 Signed-off-by: Haihao Xiang <[email protected]>
- Loading branch information
1 parent
bddd0f1
commit 6c0c22e
Showing
7 changed files
with
96 additions
and
128 deletions.
There are no files selected for viewing
Submodule ffmpeg
updated
91 files
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,63 +1,44 @@ | ||
From 42452f13d1bceb375b128c6c643ced783a2176e3 Mon Sep 17 00:00:00 2001 | ||
From 50f74dbe1b1ee4f78ab429e6e1e070168bf5d2f6 Mon Sep 17 00:00:00 2001 | ||
From: Linjie Fu <[email protected]> | ||
Date: Mon, 18 May 2020 16:54:57 +0800 | ||
Subject: [PATCH 02/50] lavcu/qsv: Add decoding support for 444 8/10 bit | ||
Subject: [PATCH 02/51] lavcu/qsv: Add decoding support for 444 8/10 bit | ||
|
||
Add support for 0yuv/y410 in system memory | ||
|
||
Signed-off-by: Linjie Fu <[email protected]> | ||
Signed-off-by: Haihao Xiang <[email protected]> | ||
--- | ||
libavcodec/qsv.c | 22 ++++++++++++++++++++++ | ||
libavcodec/qsvdec.c | 4 ++++ | ||
libavutil/hwcontext_qsv.c | 13 +++++++++++++ | ||
3 files changed, 39 insertions(+) | ||
libavcodec/qsv.c | 8 ++++++++ | ||
libavcodec/qsvdec.c | 2 ++ | ||
libavutil/hwcontext_qsv.c | 5 +++++ | ||
3 files changed, 15 insertions(+) | ||
|
||
diff --git a/libavcodec/qsv.c b/libavcodec/qsv.c | ||
index 3449789a2c..44334f574f 100644 | ||
index 51aac16695..c00dcd9b11 100644 | ||
--- a/libavcodec/qsv.c | ||
+++ b/libavcodec/qsv.c | ||
@@ -210,7 +210,9 @@ enum AVPixelFormat ff_qsv_map_fourcc(uint32_t fourcc) | ||
case MFX_FOURCC_RGB4: return AV_PIX_FMT_BGRA; | ||
#if CONFIG_VAAPI | ||
@@ -212,6 +212,7 @@ enum AVPixelFormat ff_qsv_map_fourcc(uint32_t fourcc) | ||
case MFX_FOURCC_YUY2: return AV_PIX_FMT_YUYV422; | ||
+ case MFX_FOURCC_AYUV: return AV_PIX_FMT_VUYX; | ||
case MFX_FOURCC_Y210: return AV_PIX_FMT_Y210; | ||
case MFX_FOURCC_AYUV: return AV_PIX_FMT_VUYX; | ||
+ case MFX_FOURCC_Y410: return AV_PIX_FMT_XV30; | ||
#endif | ||
} | ||
return AV_PIX_FMT_NONE; | ||
@@ -239,10 +241,18 @@ int ff_qsv_map_pixfmt(enum AVPixelFormat format, uint32_t *fourcc) | ||
case AV_PIX_FMT_YUYV422: | ||
*fourcc = MFX_FOURCC_YUY2; | ||
return AV_PIX_FMT_YUYV422; | ||
+ case AV_PIX_FMT_VUYX: | ||
+ case AV_PIX_FMT_YUV444P: | ||
+ *fourcc = MFX_FOURCC_AYUV; | ||
+ return AV_PIX_FMT_VUYX; | ||
case AV_PIX_FMT_YUV422P10: | ||
case AV_PIX_FMT_Y210: | ||
*fourcc = MFX_FOURCC_Y210; | ||
return AV_PIX_FMT_Y210; | ||
@@ -247,6 +248,9 @@ int ff_qsv_map_pixfmt(enum AVPixelFormat format, uint32_t *fourcc) | ||
case AV_PIX_FMT_VUYX: | ||
*fourcc = MFX_FOURCC_AYUV; | ||
return AV_PIX_FMT_VUYX; | ||
+ case AV_PIX_FMT_XV30: | ||
+ case AV_PIX_FMT_YUV444P10: | ||
+ *fourcc = MFX_FOURCC_Y410; | ||
+ return AV_PIX_FMT_XV30; | ||
#endif | ||
default: | ||
return AVERROR(ENOSYS); | ||
@@ -277,6 +287,18 @@ int ff_qsv_map_frame_to_surface(const AVFrame *frame, mfxFrameSurface1 *surface) | ||
surface->Data.U16 = (mfxU16 *)frame->data[0] + 1; | ||
surface->Data.V16 = (mfxU16 *)frame->data[0] + 3; | ||
@@ -291,6 +295,10 @@ int ff_qsv_map_frame_to_surface(const AVFrame *frame, mfxFrameSurface1 *surface) | ||
surface->Data.A = frame->data[0] + 3; | ||
break; | ||
+ | ||
+ case AV_PIX_FMT_VUYX: | ||
+ surface->Data.V = frame->data[0]; | ||
+ surface->Data.U = frame->data[0] + 1; | ||
+ surface->Data.Y = frame->data[0] + 2; | ||
+ surface->Data.A = frame->data[0] + 3; | ||
+ break; | ||
+ | ||
|
||
+ case AV_PIX_FMT_XV30: | ||
+ surface->Data.U = frame->data[0]; | ||
+ break; | ||
|
@@ -66,54 +47,42 @@ index 3449789a2c..44334f574f 100644 | |
return AVERROR(ENOSYS); | ||
} | ||
diff --git a/libavcodec/qsvdec.c b/libavcodec/qsvdec.c | ||
index 0f0d719e23..6137f1e000 100644 | ||
index 0254a394bd..912d58965a 100644 | ||
--- a/libavcodec/qsvdec.c | ||
+++ b/libavcodec/qsvdec.c | ||
@@ -141,6 +141,8 @@ static int qsv_get_continuous_buffer(AVCodecContext *avctx, AVFrame *frame, | ||
frame->linesize[0] = 2 * FFALIGN(avctx->width, 128); | ||
@@ -142,6 +142,7 @@ static int qsv_get_continuous_buffer(AVCodecContext *avctx, AVFrame *frame, | ||
break; | ||
case AV_PIX_FMT_Y210: | ||
case AV_PIX_FMT_VUYX: | ||
+ case AV_PIX_FMT_XV30: | ||
+ case AV_PIX_FMT_VUYX: | ||
frame->linesize[0] = 4 * FFALIGN(avctx->width, 128); | ||
break; | ||
default: | ||
@@ -1041,6 +1043,8 @@ const FFCodec ff_##x##_qsv_decoder = { \ | ||
AV_PIX_FMT_P010, \ | ||
@@ -1043,6 +1044,7 @@ const FFCodec ff_##x##_qsv_decoder = { \ | ||
AV_PIX_FMT_YUYV422, \ | ||
AV_PIX_FMT_Y210, \ | ||
+ AV_PIX_FMT_VUYX, \ | ||
AV_PIX_FMT_VUYX, \ | ||
+ AV_PIX_FMT_XV30, \ | ||
AV_PIX_FMT_QSV, \ | ||
AV_PIX_FMT_NONE }, \ | ||
.hw_configs = qsv_hw_configs, \ | ||
diff --git a/libavutil/hwcontext_qsv.c b/libavutil/hwcontext_qsv.c | ||
index e08a203082..66ff2212e4 100644 | ||
index 3234264e1c..853e549236 100644 | ||
--- a/libavutil/hwcontext_qsv.c | ||
+++ b/libavutil/hwcontext_qsv.c | ||
@@ -117,8 +117,12 @@ static const struct { | ||
#if CONFIG_VAAPI | ||
{ AV_PIX_FMT_YUYV422, | ||
MFX_FOURCC_YUY2 }, | ||
+ { AV_PIX_FMT_VUYX, | ||
+ MFX_FOURCC_AYUV }, | ||
{ AV_PIX_FMT_Y210, | ||
MFX_FOURCC_Y210 }, | ||
@@ -123,6 +123,8 @@ static const struct { | ||
// the SDK only delares support for AYUV | ||
{ AV_PIX_FMT_VUYX, | ||
MFX_FOURCC_AYUV }, | ||
+ { AV_PIX_FMT_XV30, | ||
+ MFX_FOURCC_Y410 }, | ||
#endif | ||
}; | ||
|
||
@@ -1502,6 +1506,15 @@ static int map_frame_to_surface(const AVFrame *frame, mfxFrameSurface1 *surface) | ||
surface->Data.U16 = (mfxU16 *)frame->data[0] + 1; | ||
surface->Data.V16 = (mfxU16 *)frame->data[0] + 3; | ||
@@ -1514,6 +1516,9 @@ static int map_frame_to_surface(const AVFrame *frame, mfxFrameSurface1 *surface) | ||
// use the value from the frame. | ||
surface->Data.A = frame->data[0] + 3; | ||
break; | ||
+ case AV_PIX_FMT_VUYX: | ||
+ surface->Data.V = frame->data[0]; | ||
+ surface->Data.U = frame->data[0] + 1; | ||
+ surface->Data.Y = frame->data[0] + 2; | ||
+ surface->Data.A = frame->data[0] + 3; | ||
+ break; | ||
+ case AV_PIX_FMT_XV30: | ||
+ surface->Data.U = frame->data[0]; | ||
+ break; | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,7 +1,7 @@ | ||
From 7f7c9c9d9dc9b762714d8d9f8fd4ff15eefe230f Mon Sep 17 00:00:00 2001 | ||
From d56c060b4e1d7b519720ab9d11923564402ccf2f Mon Sep 17 00:00:00 2001 | ||
From: Fei Wang <[email protected]> | ||
Date: Thu, 28 May 2020 14:14:32 -0400 | ||
Subject: [PATCH 06/50] lavc/qsv: support hevc/vp9 12bit | ||
Subject: [PATCH 07/51] lavc/qsv: support hevc/vp9 12bit | ||
|
||
ffmpeg -init_hw_device qsv=qsv:hw -hwaccel qsv -filter_hw_device qsv -v verbose -c:v hevc_qsv -i GENERAL_12b_420_RExt_Sony_1.bit -vf hwdownload,format=p012 -vsync passthrough -frames 25 -f md5 -y qsv_out.md5 | ||
|
||
|
@@ -20,12 +20,12 @@ ffmpeg -init_hw_device qsv=qsv:hw -hwaccel qsv -filter_hw_device qsv -v verbose | |
2 files changed, 35 insertions(+) | ||
|
||
diff --git a/libavcodec/qsv.c b/libavcodec/qsv.c | ||
index 44334f574f..bd0d689c27 100644 | ||
index c00dcd9b11..f1e47514c0 100644 | ||
--- a/libavcodec/qsv.c | ||
+++ b/libavcodec/qsv.c | ||
@@ -213,6 +213,11 @@ enum AVPixelFormat ff_qsv_map_fourcc(uint32_t fourcc) | ||
case MFX_FOURCC_AYUV: return AV_PIX_FMT_VUYX; | ||
case MFX_FOURCC_Y210: return AV_PIX_FMT_Y210; | ||
case MFX_FOURCC_AYUV: return AV_PIX_FMT_VUYX; | ||
case MFX_FOURCC_Y410: return AV_PIX_FMT_XV30; | ||
+#if QSV_VERSION_ATLEAST(1, 31) | ||
+ case MFX_FOURCC_P016: return AV_PIX_FMT_P012; | ||
|
@@ -35,8 +35,8 @@ index 44334f574f..bd0d689c27 100644 | |
#endif | ||
} | ||
return AV_PIX_FMT_NONE; | ||
@@ -253,6 +258,20 @@ int ff_qsv_map_pixfmt(enum AVPixelFormat format, uint32_t *fourcc) | ||
case AV_PIX_FMT_YUV444P10: | ||
@@ -251,6 +256,20 @@ int ff_qsv_map_pixfmt(enum AVPixelFormat format, uint32_t *fourcc) | ||
case AV_PIX_FMT_XV30: | ||
*fourcc = MFX_FOURCC_Y410; | ||
return AV_PIX_FMT_XV30; | ||
+#if QSV_VERSION_ATLEAST(1, 31) | ||
|
@@ -57,11 +57,11 @@ index 44334f574f..bd0d689c27 100644 | |
default: | ||
return AVERROR(ENOSYS); | ||
diff --git a/libavutil/hwcontext_qsv.c b/libavutil/hwcontext_qsv.c | ||
index 66ff2212e4..480e89415c 100644 | ||
index 853e549236..f49d1c8006 100644 | ||
--- a/libavutil/hwcontext_qsv.c | ||
+++ b/libavutil/hwcontext_qsv.c | ||
@@ -123,6 +123,14 @@ static const struct { | ||
MFX_FOURCC_Y210 }, | ||
@@ -125,6 +125,14 @@ static const struct { | ||
MFX_FOURCC_AYUV }, | ||
{ AV_PIX_FMT_XV30, | ||
MFX_FOURCC_Y410 }, | ||
+#if QSV_VERSION_ATLEAST(1, 31) | ||
|
@@ -75,23 +75,23 @@ index 66ff2212e4..480e89415c 100644 | |
#endif | ||
}; | ||
|
||
@@ -1478,6 +1486,7 @@ static int map_frame_to_surface(const AVFrame *frame, mfxFrameSurface1 *surface) | ||
@@ -1480,6 +1488,7 @@ static int map_frame_to_surface(const AVFrame *frame, mfxFrameSurface1 *surface) | ||
switch (frame->format) { | ||
case AV_PIX_FMT_NV12: | ||
case AV_PIX_FMT_P010: | ||
+ case AV_PIX_FMT_P012: | ||
surface->Data.Y = frame->data[0]; | ||
surface->Data.UV = frame->data[1]; | ||
break; | ||
@@ -1502,6 +1511,7 @@ static int map_frame_to_surface(const AVFrame *frame, mfxFrameSurface1 *surface) | ||
@@ -1504,6 +1513,7 @@ static int map_frame_to_surface(const AVFrame *frame, mfxFrameSurface1 *surface) | ||
break; | ||
|
||
case AV_PIX_FMT_Y210: | ||
+ case AV_PIX_FMT_Y212: | ||
surface->Data.Y16 = (mfxU16 *)frame->data[0]; | ||
surface->Data.U16 = (mfxU16 *)frame->data[0] + 1; | ||
surface->Data.V16 = (mfxU16 *)frame->data[0] + 3; | ||
@@ -1515,6 +1525,12 @@ static int map_frame_to_surface(const AVFrame *frame, mfxFrameSurface1 *surface) | ||
@@ -1519,6 +1529,12 @@ static int map_frame_to_surface(const AVFrame *frame, mfxFrameSurface1 *surface) | ||
case AV_PIX_FMT_XV30: | ||
surface->Data.U = frame->data[0]; | ||
break; | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,7 +1,7 @@ | ||
From 1a590755d9780a53234e0fc023e9d239f0b47d67 Mon Sep 17 00:00:00 2001 | ||
From 95f4fd513416a00873694b6a203afea805e7745c Mon Sep 17 00:00:00 2001 | ||
From: Tong Wu <[email protected]> | ||
Date: Mon, 29 Nov 2021 15:12:12 +0800 | ||
Subject: [PATCH 30/50] qsv: remove CONFIG_VAAPI | ||
Subject: [PATCH 31/51] qsv: remove CONFIG_VAAPI | ||
|
||
Make 8-bit, 10-bit, 12-bit YUV 4:2:2 video sources as well as YUV 4:4:4 | ||
video sources supported by d3d11va and dxva2 just like what VAAPI does. | ||
|
@@ -13,7 +13,7 @@ Sign-off-by: Tong Wu <[email protected]> | |
2 files changed, 8 deletions(-) | ||
|
||
diff --git a/libavcodec/qsv.c b/libavcodec/qsv.c | ||
index bd0d689c27..6edc029122 100644 | ||
index f1e47514c0..ec7b5c2ddd 100644 | ||
--- a/libavcodec/qsv.c | ||
+++ b/libavcodec/qsv.c | ||
@@ -208,7 +208,6 @@ enum AVPixelFormat ff_qsv_map_fourcc(uint32_t fourcc) | ||
|
@@ -22,8 +22,8 @@ index bd0d689c27..6edc029122 100644 | |
case MFX_FOURCC_RGB4: return AV_PIX_FMT_BGRA; | ||
-#if CONFIG_VAAPI | ||
case MFX_FOURCC_YUY2: return AV_PIX_FMT_YUYV422; | ||
case MFX_FOURCC_AYUV: return AV_PIX_FMT_VUYX; | ||
case MFX_FOURCC_Y210: return AV_PIX_FMT_Y210; | ||
case MFX_FOURCC_AYUV: return AV_PIX_FMT_VUYX; | ||
@@ -217,7 +216,6 @@ enum AVPixelFormat ff_qsv_map_fourcc(uint32_t fourcc) | ||
case MFX_FOURCC_P016: return AV_PIX_FMT_P012; | ||
case MFX_FOURCC_Y216: return AV_PIX_FMT_Y212; | ||
|
@@ -40,7 +40,7 @@ index bd0d689c27..6edc029122 100644 | |
case AV_PIX_FMT_YUV422P: | ||
case AV_PIX_FMT_YUYV422: | ||
*fourcc = MFX_FOURCC_YUY2; | ||
@@ -271,7 +268,6 @@ int ff_qsv_map_pixfmt(enum AVPixelFormat format, uint32_t *fourcc) | ||
@@ -269,7 +266,6 @@ int ff_qsv_map_pixfmt(enum AVPixelFormat format, uint32_t *fourcc) | ||
case AV_PIX_FMT_XV36: | ||
*fourcc = MFX_FOURCC_Y416; | ||
return AV_PIX_FMT_XV36; | ||
|
@@ -49,7 +49,7 @@ index bd0d689c27..6edc029122 100644 | |
default: | ||
return AVERROR(ENOSYS); | ||
diff --git a/libavutil/hwcontext_qsv.c b/libavutil/hwcontext_qsv.c | ||
index f17a31ceba..ec45db7e1f 100644 | ||
index 740b690ae6..17b9702241 100644 | ||
--- a/libavutil/hwcontext_qsv.c | ||
+++ b/libavutil/hwcontext_qsv.c | ||
@@ -114,7 +114,6 @@ static const struct { | ||
|
@@ -59,24 +59,24 @@ index f17a31ceba..ec45db7e1f 100644 | |
-#if CONFIG_VAAPI | ||
{ AV_PIX_FMT_YUYV422, | ||
MFX_FOURCC_YUY2 }, | ||
{ AV_PIX_FMT_VUYX, | ||
@@ -131,7 +130,6 @@ static const struct { | ||
{ AV_PIX_FMT_Y210, | ||
@@ -133,7 +132,6 @@ static const struct { | ||
{ AV_PIX_FMT_XV36, | ||
MFX_FOURCC_Y416 }, | ||
#endif | ||
-#endif | ||
}; | ||
|
||
extern int ff_qsv_get_surface_base_handle(mfxFrameSurface1 *surf, | ||
@@ -1503,7 +1501,6 @@ static int map_frame_to_surface(const AVFrame *frame, mfxFrameSurface1 *surface) | ||
@@ -1505,7 +1503,6 @@ static int map_frame_to_surface(const AVFrame *frame, mfxFrameSurface1 *surface) | ||
surface->Data.R = frame->data[0] + 2; | ||
surface->Data.A = frame->data[0] + 3; | ||
break; | ||
-#if CONFIG_VAAPI | ||
case AV_PIX_FMT_YUYV422: | ||
surface->Data.Y = frame->data[0]; | ||
surface->Data.U = frame->data[0] + 1; | ||
@@ -1531,7 +1528,6 @@ static int map_frame_to_surface(const AVFrame *frame, mfxFrameSurface1 *surface) | ||
@@ -1535,7 +1532,6 @@ static int map_frame_to_surface(const AVFrame *frame, mfxFrameSurface1 *surface) | ||
surface->Data.V = frame->data[0] + 2; | ||
surface->Data.A = frame->data[0] + 3; | ||
break; | ||
|
Oops, something went wrong.