mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
lavc/qsvenc: enlarge the maximum number of ExtParam buffers on mfxEncodeCtrl
The next commit and other commits in future will use more ExtParam buffers. And combine 2 free functions into single one Signed-off-by: Haihao Xiang <haihao.xiang@intel.com>
This commit is contained in:
parent
76965fa411
commit
dc26bd8e6d
@ -51,7 +51,7 @@
|
||||
#define ASYNC_DEPTH_DEFAULT 4 // internal parallelism
|
||||
|
||||
#define QSV_MAX_ENC_PAYLOAD 2 // # of mfxEncodeCtrl payloads supported
|
||||
#define QSV_MAX_ENC_EXTPARAM 2
|
||||
#define QSV_MAX_ENC_EXTPARAM 8 // # of mfxEncodeCtrl extparam supported
|
||||
|
||||
#define QSV_MAX_ROI_NUM 256
|
||||
|
||||
|
@ -1622,25 +1622,16 @@ int ff_qsv_enc_init(AVCodecContext *avctx, QSVEncContext *q)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void free_encoder_ctrl_payloads(mfxEncodeCtrl* enc_ctrl)
|
||||
static void free_encoder_ctrl(mfxEncodeCtrl* enc_ctrl)
|
||||
{
|
||||
if (enc_ctrl) {
|
||||
int i;
|
||||
for (i = 0; i < enc_ctrl->NumPayload && i < QSV_MAX_ENC_PAYLOAD; i++) {
|
||||
for (int i = 0; i < enc_ctrl->NumPayload && i < QSV_MAX_ENC_PAYLOAD; i++)
|
||||
av_freep(&enc_ctrl->Payload[i]);
|
||||
}
|
||||
enc_ctrl->NumPayload = 0;
|
||||
}
|
||||
}
|
||||
|
||||
static void free_encoder_ctrl_extparam(mfxEncodeCtrl* enc_ctrl)
|
||||
{
|
||||
if (enc_ctrl) {
|
||||
int i;
|
||||
for (i = 0; i < enc_ctrl->NumExtParam && i < QSV_MAX_ENC_EXTPARAM; i++) {
|
||||
if (enc_ctrl->ExtParam[i])
|
||||
av_freep(&(enc_ctrl->ExtParam[i]));
|
||||
}
|
||||
for (int i = 0; i < enc_ctrl->NumExtParam && i < QSV_MAX_ENC_EXTPARAM; i++)
|
||||
av_freep(&enc_ctrl->ExtParam[i]);
|
||||
|
||||
enc_ctrl->NumPayload = 0;
|
||||
enc_ctrl->NumExtParam = 0;
|
||||
}
|
||||
}
|
||||
@ -1650,8 +1641,7 @@ static void clear_unused_frames(QSVEncContext *q)
|
||||
QSVFrame *cur = q->work_frames;
|
||||
while (cur) {
|
||||
if (cur->used && !cur->surface.Data.Locked) {
|
||||
free_encoder_ctrl_payloads(&cur->enc_ctrl);
|
||||
free_encoder_ctrl_extparam(&cur->enc_ctrl);
|
||||
free_encoder_ctrl(&cur->enc_ctrl);
|
||||
//do not reuse enc_ctrl from previous frame
|
||||
memset(&cur->enc_ctrl, 0, sizeof(cur->enc_ctrl));
|
||||
cur->enc_ctrl.Payload = cur->payloads;
|
||||
@ -2419,8 +2409,7 @@ int ff_qsv_enc_close(AVCodecContext *avctx, QSVEncContext *q)
|
||||
while (cur) {
|
||||
q->work_frames = cur->next;
|
||||
av_frame_free(&cur->frame);
|
||||
free_encoder_ctrl_extparam(&cur->enc_ctrl);
|
||||
free_encoder_ctrl_payloads(&cur->enc_ctrl);
|
||||
free_encoder_ctrl(&cur->enc_ctrl);
|
||||
av_freep(&cur);
|
||||
cur = q->work_frames;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user