Commit Graph

145 Commits

Author SHA1 Message Date
Zhong Li
74007dd86a lavc/qsv: Fix MSDK initialization failure in system memory mode
MSDK does not create internal acceleration device on Linux,
So MFXVideoCORE_SetHandle() is necessary.
It has been added for ff_qsv_init_session_device().
But missed for ff_qsv_init_internal_session() due to commit
1f26a23 overwrited commit db89f45

Fix #7030

Signed-off-by: Zhong Li <zhong.li@intel.com>
2019-09-26 13:44:02 +08:00
Zhong Li
4dc3d93880 lavc/qsvenc: fix the incorrent map from bits to bytes
Reported-by:Maggie Sun <maggie.sun@intel.com>
Signed-off-by: Zhong Li <zhong.li@intel.com>
2019-07-01 13:24:01 +08:00
Linjie Fu
8f6e651833 lavc/qsvenc: Fix the memory leak for enc_ctrl.Payload
frame->enc_ctrl.Payload is malloced in get_free_frame, directly memset
the whole structure of enc_ctrl to zero will cause the memory leak for
enc_ctrl.Payload.

frame->enc_ctrl as a structure will be malloc and init to zero by calling
frame = av_mallocz(sizeof(*frame)), so the memset is redundant and can
be removed.

Signed-off-by: Linjie Fu <linjie.fu@intel.com>
Signed-off-by: Zhong Li <zhong.li@intel.com>
2019-05-22 22:16:21 +08:00
Zhong Li
1125277bc6 lavc/qsvenc: enable hevc gpb option
GPB is the default type, just contains forward references but the
slice_type is B slice with higher encoding efficiency than regular P
slice, but lower performance.

Add an option to allow user to set regular P slice.

Fix ticket#6870

Test data on Intel Kabylake (i7-7567U CPU @ 3.50GHz):
1. ffmpeg -hwaccel qsv -c:v h264_qsv -i bbb_sunflower_1080p_30fps_normal.mp4 -vsync passthrough
-vframes 1000  -c:v hevc_qsv -gpb 0 -bf 0 -q 25 test_gpb_off_bf0_kbl.mp4

transcoding fps: 85
encoded file size of test_gpb_off_bf0_kbl.mp4: 21960100 (bytes)

2. ffmpeg -hwaccel qsv -c:v h264_qsv -i bbb_sunflower_1080p_30fps_normal.mp4 -vsync passthrough
-vframes 1000  -c:v hevc_qsv -gpb 1 -bf 0 -q 25 test_gpb_on_bf0_kbl.mp4

transcoding fps: 79
encoded file size oftest_gpb_on_bf0_kbl.mp4:  21211449 (bytes)

In this case, enable gpb can bring about 7% performance drop but 3.4% encoding efficiency improvment.

Signed-off-by: Zhong Li <zhong.li@intel.com>
2019-04-03 23:00:15 +08:00
Zhong Li
c745bedd18 lavc/qsvenc: enable hevc coding options configuration
Signed-off-by: Zhong Li <zhong.li@intel.com>
2019-04-03 22:57:55 +08:00
Zhong Li
d071a1117d lavc/qsvenc: get vps extradata from MSDK
Signed-off-by: Zhong Li <zhong.li@intel.com>
Reviewed-by: Mark Thompson <sw@jkqxz.net>
2019-04-01 19:21:48 +08:00
Linjie Fu
a8355eed36 lavc/qsvenc: expose low_power as a common option for QSV encoder
Always exposes low_power option for all qsv encoder, and reports a warning
if VDENC is not supported in current version of MSDK.

Signed-off-by: Linjie Fu <linjie.fu@intel.com>
Signed-off-by: Zhong Li <zhong.li@intel.com>
2019-04-01 19:21:42 +08:00
Zhong Li
b9a066ae23 lavc/qsvenc: use the common option "trellis" of AVCodecContext
Signed-off-by: Zhong Li <zhong.li@intel.com>
2019-03-28 21:50:01 +08:00
Zhong Li
b47446cc39 lavc/qsvenc: make the queried libmfx version easily reused
Signed-off-by: Zhong Li <zhong.li@intel.com>
2019-03-28 21:48:09 +08:00
Zhong Li
74cf2dc3ac lavc/qsvenc: enable QVBR mode
QVBR mode is to use the variable bitrate control algorithm
with constant quality.
mfxExtCodingOption3 should be supported to enable QVBR mode.

It is neccesary to specify a max_rate for QVBR, else it may be ICQ mode.
Example usage: ffmpeg -hwaccel qsv -c:v h264_qsv -i input.mp4 -c:v
h264_qsv -global_quality 25 -maxrate 2M test_qvbr.mp4 -v verbose

Clip QVBR quality range to be [0, 51] as Mark's commments.
It is similar to qp range of CQP but possibly should be updated when VP8/VP9
encoding can be supported.

Reviewed-by: Mark Thompson <sw@jkqxz.net>
Signed-off-by: Zhong Li <zhong.li@intel.com>
2019-01-25 16:53:27 +08:00
Zhong Li
87c165c237 lavc/qsvenc: set BRCParamMultiplier to aviod BRC overflow
Fix ticket #7663

Reviewed-by: Carl Eugen Hoyos <ceffmpeg@gmail.com>
Reviewed-by: Hendrik Leppkes <h.leppkes@gmail.com>
Signed-off-by: Zhong Li <zhong.li@intel.com>
2019-01-22 10:44:39 +08:00
Zhong Li
0aaaca25e0 lavc/qsvenc: set pict_type to be I for IDR frames.
Signed-off-by: Zhong Li <zhong.li@intel.com>
2019-01-10 21:48:27 +08:00
Linjie Fu
e92ce340e6 lavc/qsvenc: add VDENC support for H264
Add VDENC(lowpower mode) support for QSV H264

It's an experimental function(like lowpower in vaapi) with
some limitations:
- CBR/VBR require HuC which should be explicitly loaded via i915
module parameter(i915.enable_guc=2 for linux kernel version >= 4.16)

Use option "-low_power 1" to enable VDENC.
Add in dump_video_param() to show the status of VDENC in runtime log.

Signed-off-by: Linjie Fu <linjie.fu@intel.com>
Signed-off-by: Zhong Li <zhong.li@intel.com>
2019-01-10 21:48:07 +08:00
Michael Niedermayer
3e461f9d4c avcodec/qsvenc: Fix Unkown typo
Reviewed-by: Lou Logan <lou@lrcd.com>
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2018-12-31 02:37:08 +01:00
Linjie Fu
1c96d2e399 lavc/qsvenc: replace assert with error return
Fix the (m)jpeg encoding regression issue as decription in tikect #7593,
due to bs->FrameType is not set in such case in
MSDK (https://github.com/Intel-Media-SDK/MediaSDK/issues/970).
(And assert on a value coming from an external library is not proper.)

Add default type check for bs->FrameType, and return invalid data error in function
ff_qsv_encode to avoid using uninitialized value.

Signed-off-by: Linjie Fu <linjie.fu@intel.com>
Signed-off-by: Zhong Li <zhong.li@intel.com>
2018-12-10 11:19:24 +08:00
Zhong Li
c9f0cff5ef lavc/qsvenc: add an option to set h264 pps for every frame
RepeatPPS is enabled by default in mfx. It is not necessary mostly and
wasting encoding bits.
Add an option to control it and disable it by default.

Reviewed-by: Mark Thompson <sw@jkqxz.net>
Signed-off-by: Zhong Li <zhong.li@intel.com>
2018-12-07 17:13:36 +08:00
Zhong Li
c4a4cfa762 lavc/qsvenc: dump log for frame rate
Signed-off-by: Zhong Li <zhong.li@intel.com>
2018-12-07 17:12:07 +08:00
Zhong Li
33df1afe39 lavc/qsvenc: make hevc alignment same as h264 for 1.19+ version
It is to clean up to the code and To-Do list.

Signed-off-by: Zhong Li <zhong.li@intel.com>
2018-12-07 17:09:23 +08:00
Zhong Li
34cba65557 lavc/qsvenc: remove redundant code
Signed-off-by: Zhong Li <zhong.li@intel.com>
2018-12-07 17:05:56 +08:00
Linjie Fu
67cdfcf694 lavc/qsvenc: assert uninitialized pict_type
Assert in function ff_qsv_encode to avoid using uninitialized value:

FF_DISABLE_DEPRECATION_WARNINGS
        avctx->coded_frame->pict_type = pict_type;
FF_ENABLE_DEPRECATION_WARNINGS

Signed-off-by: Linjie Fu <linjie.fu@intel.com>
Signed-off-by: Zhong Li <zhong.li@intel.com>
2018-11-30 17:53:26 +08:00
Zhong Li
ac0bcd6b61 lavc/qsvenc: add forced_idr option
This option can be used to repect original input I/IDR frame type.

Reviewed-by: Mark Thompson <sw@jkqxz.net>
Signed-off-by: Zhong Li <zhong.li@intel.com>
2018-11-30 17:53:00 +08:00
James Almer
f4cf6ba8c9 Merge commit 'a2041a6522642859ce64af1c618d6fb90a50d4af'
* commit 'a2041a6522642859ce64af1c618d6fb90a50d4af':
  qsvenc: AV_PIX_FMT_QSV path should release frame

Merged-by: James Almer <jamrial@gmail.com>
2018-09-18 13:28:05 -03:00
Maxym Dmytrychenko
a2041a6522 qsvenc: AV_PIX_FMT_QSV path should release frame
Fixes high memory usage and prevents over allocation of the frames via
proper unref.

Can be checked as:
-hwaccel qsv -c:v h264_qsv -i ../h264-conformance/CANL2_Sony_E.jsv -c:v
h264_qsv -b:v 2000k -y qsv.mp4
2018-09-18 17:53:37 +02:00
James Almer
a12063b118 Merge commit 'c8bca9fe466f810fd484e2c6db7ef7bc83b5a943'
* commit 'c8bca9fe466f810fd484e2c6db7ef7bc83b5a943':
  lavc/qsvenc: dump BufferSizeInKB message

Merged-by: James Almer <jamrial@gmail.com>
2018-09-11 14:01:47 -03:00
James Almer
27e30c73d7 Merge commit 'e16b20782a597e36a9c7488487c3179375a25b97'
* commit 'e16b20782a597e36a9c7488487c3179375a25b97':
  lavc/qsvenc: allow to set qp range for h264 BRC

Merged-by: James Almer <jamrial@gmail.com>
2018-09-11 13:57:49 -03:00
James Almer
50ae1f7e0f Merge commit '76eef04f30a768fa80366d679f3de7e9447b67d5'
* commit '76eef04f30a768fa80366d679f3de7e9447b67d5':
  qsvenc: Fix a misleading log message

Merged-by: James Almer <jamrial@gmail.com>
2018-09-11 13:41:46 -03:00
James Almer
14fe81b3a8 Merge commit '325aa63dd1a3abc2453914d0bc111d297833d725'
* commit '325aa63dd1a3abc2453914d0bc111d297833d725':
  qsv: enforcing continuous memory layout

Merged-by: James Almer <jamrial@gmail.com>
2018-09-11 13:11:22 -03:00
James Almer
7167ac33a8 Merge commit 'c1bcd321ea2c2ae1765a1e64f03278712221d726'
* commit 'c1bcd321ea2c2ae1765a1e64f03278712221d726':
  avcodec/qsv: fix async support

Merged-by: James Almer <jamrial@gmail.com>
2018-09-02 19:23:26 -03:00
James Almer
aebc5b2284 Merge commit 'f8060865f3e1a16c62e0d337ef0979b6ee4ba457'
* commit 'f8060865f3e1a16c62e0d337ef0979b6ee4ba457':
  qsvenc: use the compression_level to replace private option

Merged-by: James Almer <jamrial@gmail.com>
2018-09-02 19:12:18 -03:00
Zhong Li
c8bca9fe46 lavc/qsvenc: dump BufferSizeInKB message
Signed-off-by: Zhong Li <zhong.li@intel.com>
Signed-off-by: Maxym Dmytrychenko <maxim.d33@gmail.com>
2018-09-02 20:02:02 +02:00
Zhong Li
e16b20782a lavc/qsvenc: allow to set qp range for h264 BRC
Signed-off-by: Zhong Li <zhong.li@intel.com>
Signed-off-by: Maxym Dmytrychenko <maxim.d33@gmail.com>
2018-09-02 20:01:42 +02:00
Zhong Li
76eef04f30 qsvenc: Fix a misleading log message
Signed-off-by: Zhong Li <zhong.li@intel.com>
Signed-off-by: Luca Barbato <lu_zero@gentoo.org>
2018-08-23 08:22:45 +02:00
Zhong Li
900487043b lavc/qsvenc: add quality status to side_data
Add fix a memory leak issue as James's comments.

V2: use a local pict_type since coded_frame is deprecated.

Signed-off-by: Zhong Li <zhong.li@intel.com>
2018-08-22 15:26:35 +08:00
Zhong Li
6088b7b037 lavc/qsvenc: expose qp of encoded frames
Requirement from ticket #7254.
Currently only H264 supported by MSDK.

Signed-off-by: Zhong Li <zhong.li@intel.com>
2018-08-07 11:26:37 +08:00
Maxym Dmytrychenko
325aa63dd1 qsv: enforcing continuous memory layout
we need to make sure that memory allocation for Y/UV planes is continuous and re-used from a
pool

Signed-off-by: Maxym Dmytrychenko <maxim.d33@gmail.com>
2018-08-06 22:30:18 +02:00
Dmitry Rogozhkin
c1bcd321ea avcodec/qsv: fix async support
Current implementations of qsv components incorrectly work with async level, they
actually try to work in async+1 level stepping into MFX_WRN_DEVICE_BUSY and polling
loop. This change address this misbehaviour.

Signed-off-by: Dmitry Rogozhkin <dmitry.v.rogozhkin@intel.com>
Cc: Maxym Dmytrychenko <maxim.d33@gmail.com>
Cc: Zhong Li <zhong.li@intel.com>
Signed-off-by: Maxym Dmytrychenko <maxim.d33@gmail.com>
2018-07-26 09:57:54 +02:00
Zhong Li
f8060865f3 qsvenc: use the compression_level to replace private option
Use a common way to control target_usage, keeping consistent with vaapi
encoders. The private option preset is kept only for compatibility.

Signed-off-by: Zhong Li <zhong.li@intel.com>
Signed-off-by: Maxym Dmytrychenko <maxim.d33@gmail.com>
2018-06-11 13:33:23 +02:00
James Almer
f790410b6b Merge commit 'cca5e4f040971db6de0bfe6968f00c021d8a9c42'
* commit 'cca5e4f040971db6de0bfe6968f00c021d8a9c42':
  qsv: adding Multi Frame Encode support

Merged-by: James Almer <jamrial@gmail.com>
2018-04-13 20:34:23 -03:00
Maxym Dmytrychenko
cca5e4f040 qsv: adding Multi Frame Encode support
Starting from API 1.25 helps to improve performance of the simultaneous
encode, 1:N scenario, like:

./avconv  -y -hwaccel qsv -c:v h264_qsv -r 30000/1001 -i
~/bbb_sunflower_1080p_60fps_normal.mp4  -vframes 600 -an \
    -filter_complex "split=2[s1][s2]; [s1]scale_qsv=1280:720[o1];
[s2]scale_qsv=960:540[o2]" \
    -map [o1] -c:v h264_qsv -b:v 3200k -minrate 3200k -maxrate 3200k -f
rawvideo /tmp/3200a.264 \
    -map [o2] -c:v h264_qsv -b:v 1750k -minrate 1750k -maxrate 1750k -f
rawvideo /tmp/1750a.264

Signed-off-by: Maxym Dmytrychenko <maxim.d33@gmail.com>
2018-04-08 20:47:59 +02:00
James Almer
b065c71e9d Merge commit 'deefca02c275ce4bc5ccbee690463ffef81a18b8'
* commit 'deefca02c275ce4bc5ccbee690463ffef81a18b8':
  qsvenc: add the Access Unit Delimiter NAL Unit support

Merged-by: James Almer <jamrial@gmail.com>
2018-03-29 20:34:43 -03:00
James Almer
20608261f7 Merge commit '3d6e76b953afd36e23ef8532b81aea58a6338931'
* commit '3d6e76b953afd36e23ef8532b81aea58a6338931':
  qsvenc: Fix a typo of FrameRateExtD/FrameRateExtN

Merged-by: James Almer <jamrial@gmail.com>
2018-03-29 20:32:57 -03:00
Zhong Li
deefca02c2 qsvenc: add the Access Unit Delimiter NAL Unit support
Signed-off-by: Zhong Li <zhong.li@intel.com>
Signed-off-by: Luca Barbato <lu_zero@gentoo.org>
2018-03-16 13:36:30 +01:00
Zhong Li
3d6e76b953 qsvenc: Fix a typo of FrameRateExtD/FrameRateExtN
Signed-off-by: Zhong Li <zhong.li@intel.com>
Signed-off-by: Luca Barbato <lu_zero@gentoo.org>
2018-03-16 13:36:08 +01:00
Mark Thompson
0cf9fa9924 Merge commit '2d6b3f3a9dce409ca51d70ef4b85c0593bb4b109'
* commit '2d6b3f3a9dce409ca51d70ef4b85c0593bb4b109':
  qsvenc: Provide a detailed error message if the parameters are invalid

Merged-by: Mark Thompson <sw@jkqxz.net>
2018-03-05 23:16:29 +00:00
Zhong Li
2d6b3f3a9d qsvenc: Provide a detailed error message if the parameters are invalid
Currently it always shows "Selected ratecontrol mode is not supported
by the QSV runtime. Choose a different mode", but sometimes it is not
accurate.

Signed-off-by: Zhong Li <zhong.li@intel.com>
Signed-off-by: Luca Barbato <lu_zero@gentoo.org>
2018-03-05 10:39:17 +01:00
Mark Thompson
de3be1d09f Merge commit '8bb9824fcbc5a6ebf68391d70a2c4f03447990d2'
* commit '8bb9824fcbc5a6ebf68391d70a2c4f03447990d2':
  qsvenc: AVBR is not supported on non-windows OS

Merged-by: Mark Thompson <sw@jkqxz.net>
2018-02-12 23:01:24 +00:00
Zhong Li
8bb9824fcb qsvenc: AVBR is not supported on non-windows OS
AVBR is supported from API 1.3 but only available for Windows

Signed-off-by: Zhong Li <zhong.li@intel.com>
Signed-off-by: Maxym Dmytrychenko <maxim.d33@gmail.com>
2018-02-12 00:34:34 +01:00
James Almer
374f818bfb Merge commit '508378556631dc18d32247b4a4e35703758e1ca9'
* commit '508378556631dc18d32247b4a4e35703758e1ca9':
  qsv: Support explicit lookahead downscaling

Merged-by: James Almer <jamrial@gmail.com>
2017-12-14 19:05:55 -03:00
James Almer
f61cf0e4df Merge commit '7c65a76b16bc3a44f1592acde2176f187a058797'
* commit '7c65a76b16bc3a44f1592acde2176f187a058797':
  lavc/qsvenc: add error messeage if ICQ unsupported.

Merged-by: James Almer <jamrial@gmail.com>
2017-12-14 18:46:10 -03:00
James Almer
0929def327 Merge commit '6ff29343b01923e9b125fe7404ac8701cdfb1fe5'
* commit '6ff29343b01923e9b125fe7404ac8701cdfb1fe5':
  lavc/qsvenc: set HRD buffer size

Merged-by: James Almer <jamrial@gmail.com>
2017-12-14 18:44:42 -03:00