[FFmpeg-devel] [PATCH] libavcodec/qsvenc: Change the parameter log to be thread safe
Xiang, Haihao
haihao.xiang at intel.com
Tue Jul 19 09:46:08 EEST 2022
On Fri, 2022-07-08 at 15:14 +0800, Wenbin Chen wrote:
> Dividing one line log into several av_log() call is not thread safe. Now
> merge these strings into one av_log() call.
>
> Signed-off-by: Wenbin Chen <wenbin.chen at intel.com>
> ---
> libavcodec/qsvenc.c | 87 ++++++++++++++++++++++-----------------------
> 1 file changed, 42 insertions(+), 45 deletions(-)
>
> diff --git a/libavcodec/qsvenc.c b/libavcodec/qsvenc.c
> index 2382c2f5f7..5729292f94 100644
> --- a/libavcodec/qsvenc.c
> +++ b/libavcodec/qsvenc.c
> @@ -182,6 +182,7 @@ static void dump_video_param(AVCodecContext *avctx,
> QSVEncContext *q,
> mfxExtCodingOption2 *co2 = NULL;
> mfxExtCodingOption3 *co3 = NULL;
> mfxExtHEVCTiles *exthevctiles = NULL;
> + const char *tmp_str = NULL;
>
> if (q->co2_idx > 0)
> co2 = (mfxExtCodingOption2*)coding_opts[q->co2_idx];
> @@ -195,13 +196,12 @@ static void dump_video_param(AVCodecContext *avctx,
> QSVEncContext *q,
> av_log(avctx, AV_LOG_VERBOSE, "profile: %s; level: %"PRIu16"\n",
> print_profile(avctx->codec_id, info->CodecProfile), info-
> >CodecLevel);
>
> - av_log(avctx, AV_LOG_VERBOSE, "GopPicSize: %"PRIu16"; GopRefDist:
> %"PRIu16"; GopOptFlag: ",
> - info->GopPicSize, info->GopRefDist);
> - if (info->GopOptFlag & MFX_GOP_CLOSED)
> - av_log(avctx, AV_LOG_VERBOSE, "closed ");
> - if (info->GopOptFlag & MFX_GOP_STRICT)
> - av_log(avctx, AV_LOG_VERBOSE, "strict ");
> - av_log(avctx, AV_LOG_VERBOSE, "; IdrInterval: %"PRIu16"\n", info-
> >IdrInterval);
> + av_log(avctx, AV_LOG_VERBOSE,
> + "GopPicSize: %"PRIu16"; GopRefDist: %"PRIu16"; GopOptFlag:%s%s;
> IdrInterval: %"PRIu16"\n",
> + info->GopPicSize, info->GopRefDist,
> + info->GopOptFlag & MFX_GOP_CLOSED ? " closed" : "",
> + info->GopOptFlag & MFX_GOP_STRICT ? " strict" : "",
> + info->IdrInterval);
>
> av_log(avctx, AV_LOG_VERBOSE, "TargetUsage: %"PRIu16"; RateControlMethod:
> %s\n",
> info->TargetUsage, print_ratecontrol(info->RateControlMethod));
> @@ -269,45 +269,46 @@ static void dump_video_param(AVCodecContext *avctx,
> QSVEncContext *q,
> av_log(avctx, AV_LOG_VERBOSE, "IntRefType: %"PRIu16";
> IntRefCycleSize: %"PRIu16"; IntRefQPDelta: %"PRId16"\n",
> co2->IntRefType, co2->IntRefCycleSize, co2->IntRefQPDelta);
>
> - av_log(avctx, AV_LOG_VERBOSE, "MaxFrameSize: %d; ", co2-
> >MaxFrameSize);
> - av_log(avctx, AV_LOG_VERBOSE, "MaxSliceSize: %d; ", co2-
> >MaxSliceSize);
> - av_log(avctx, AV_LOG_VERBOSE, "\n");
> + av_log(avctx, AV_LOG_VERBOSE, "MaxFrameSize: %d; MaxSliceSize: %d\n",
> + co2->MaxFrameSize, co2->MaxSliceSize);
>
> av_log(avctx, AV_LOG_VERBOSE,
> "BitrateLimit: %s; MBBRC: %s; ExtBRC: %s\n",
> print_threestate(co2->BitrateLimit), print_threestate(co2-
> >MBBRC),
> print_threestate(co2->ExtBRC));
>
> - av_log(avctx, AV_LOG_VERBOSE, "Trellis: ");
> if (co2->Trellis & MFX_TRELLIS_OFF) {
> - av_log(avctx, AV_LOG_VERBOSE, "off");
> + av_log(avctx, AV_LOG_VERBOSE, "Trellis: off\n");
> } else if (!co2->Trellis) {
> - av_log(avctx, AV_LOG_VERBOSE, "auto");
> + av_log(avctx, AV_LOG_VERBOSE, "Trellis: auto\n");
> } else {
> - if (co2->Trellis & MFX_TRELLIS_I) av_log(avctx, AV_LOG_VERBOSE,
> "I");
> - if (co2->Trellis & MFX_TRELLIS_P) av_log(avctx, AV_LOG_VERBOSE,
> "P");
> - if (co2->Trellis & MFX_TRELLIS_B) av_log(avctx, AV_LOG_VERBOSE,
> "B");
> + char trellis_type[4];
> + int i = 0;
> + if (co2->Trellis & MFX_TRELLIS_I) trellis_type[i++] = 'I';
> + if (co2->Trellis & MFX_TRELLIS_P) trellis_type[i++] = 'P';
> + if (co2->Trellis & MFX_TRELLIS_B) trellis_type[i++] = 'B';
> + trellis_type[i] = 0;
> + av_log(avctx, AV_LOG_VERBOSE, "Trellis: %s\n", trellis_type);
> }
> - av_log(avctx, AV_LOG_VERBOSE, "\n");
>
> - av_log(avctx, AV_LOG_VERBOSE,
> - "RepeatPPS: %s; NumMbPerSlice: %"PRIu16"; LookAheadDS: ",
> - print_threestate(co2->RepeatPPS), co2->NumMbPerSlice);
> switch (co2->LookAheadDS) {
> - case MFX_LOOKAHEAD_DS_OFF: av_log(avctx, AV_LOG_VERBOSE,
> "off"); break;
> - case MFX_LOOKAHEAD_DS_2x: av_log(avctx, AV_LOG_VERBOSE,
> "2x"); break;
> - case MFX_LOOKAHEAD_DS_4x: av_log(avctx, AV_LOG_VERBOSE,
> "4x"); break;
> - default: av_log(avctx, AV_LOG_VERBOSE, "unknown");
> break;
> + case MFX_LOOKAHEAD_DS_OFF: tmp_str = "off"; break;
> + case MFX_LOOKAHEAD_DS_2x: tmp_str = "2x"; break;
> + case MFX_LOOKAHEAD_DS_4x: tmp_str = "4x"; break;
> + default: tmp_str = "unknown"; break;
> }
> - av_log(avctx, AV_LOG_VERBOSE, "\n");
> + av_log(avctx, AV_LOG_VERBOSE,
> + "RepeatPPS: %s; NumMbPerSlice: %"PRIu16"; LookAheadDS: %s\n",
> + print_threestate(co2->RepeatPPS), co2->NumMbPerSlice,
> tmp_str);
>
> - av_log(avctx, AV_LOG_VERBOSE, "AdaptiveI: %s; AdaptiveB: %s;
> BRefType: ",
> - print_threestate(co2->AdaptiveI), print_threestate(co2-
> >AdaptiveB));
> switch (co2->BRefType) {
> - case MFX_B_REF_OFF: av_log(avctx, AV_LOG_VERBOSE,
> "off"); break;
> - case MFX_B_REF_PYRAMID: av_log(avctx, AV_LOG_VERBOSE,
> "pyramid"); break;
> - default: av_log(avctx, AV_LOG_VERBOSE,
> "auto"); break;
> + case MFX_B_REF_OFF: tmp_str = "off"; break;
> + case MFX_B_REF_PYRAMID: tmp_str = "pyramid"; break;
> + default: tmp_str = "auto"; break;
> }
> + av_log(avctx, AV_LOG_VERBOSE,
> + "AdaptiveI: %s; AdaptiveB: %s; BRefType:%s\n",
> + print_threestate(co2->AdaptiveI), print_threestate(co2-
> >AdaptiveB), tmp_str);
>
> av_log(avctx, AV_LOG_VERBOSE,
> "MinQPI: %"PRIu8"; MaxQPI: %"PRIu8"; MinQPP: %"PRIu8"; MaxQPP:
> %"PRIu8"; MinQPB: %"PRIu8"; MaxQPB: %"PRIu8"\n",
> @@ -319,14 +320,12 @@ static void dump_video_param(AVCodecContext *avctx,
> QSVEncContext *q,
> if (info->RateControlMethod == MFX_RATECONTROL_QVBR)
> av_log(avctx, AV_LOG_VERBOSE, "QVBRQuality: %"PRIu16"\n", co3-
> >QVBRQuality);
>
> - av_log(avctx, AV_LOG_VERBOSE, "PRefType: ");
> switch (co3->PRefType) {
> - case MFX_P_REF_DEFAULT: av_log(avctx, AV_LOG_VERBOSE,
> "default"); break;
> - case MFX_P_REF_SIMPLE: av_log(avctx, AV_LOG_VERBOSE,
> "simple"); break;
> - case MFX_P_REF_PYRAMID: av_log(avctx, AV_LOG_VERBOSE,
> "pyramid"); break;
> - default: av_log(avctx, AV_LOG_VERBOSE,
> "unknown"); break;
> + case MFX_P_REF_DEFAULT: av_log(avctx, AV_LOG_VERBOSE, "PRefType:
> default\n"); break;
> + case MFX_P_REF_SIMPLE: av_log(avctx, AV_LOG_VERBOSE, "PRefType:
> simple\n"); break;
> + case MFX_P_REF_PYRAMID: av_log(avctx, AV_LOG_VERBOSE, "PRefType:
> pyramid\n"); break;
> + default: av_log(avctx, AV_LOG_VERBOSE, "PRefType:
> unknown\n"); break;
> }
> - av_log(avctx, AV_LOG_VERBOSE, "\n");
>
> if (avctx->codec_id == AV_CODEC_ID_HEVC)
> av_log(avctx, AV_LOG_VERBOSE,"GPB: %s\n", print_threestate(co3-
> >GPB));
> @@ -360,13 +359,12 @@ static void dump_video_vp9_param(AVCodecContext *avctx,
> QSVEncContext *q,
> av_log(avctx, AV_LOG_VERBOSE, "profile: %s \n",
> print_profile(avctx->codec_id, info->CodecProfile));
>
> - av_log(avctx, AV_LOG_VERBOSE, "GopPicSize: %"PRIu16"; GopRefDist:
> %"PRIu16"; GopOptFlag: ",
> - info->GopPicSize, info->GopRefDist);
> - if (info->GopOptFlag & MFX_GOP_CLOSED)
> - av_log(avctx, AV_LOG_VERBOSE, "closed ");
> - if (info->GopOptFlag & MFX_GOP_STRICT)
> - av_log(avctx, AV_LOG_VERBOSE, "strict ");
> - av_log(avctx, AV_LOG_VERBOSE, "; IdrInterval: %"PRIu16"\n", info-
> >IdrInterval);
> + av_log(avctx, AV_LOG_VERBOSE,
> + "GopPicSize: %"PRIu16"; GopRefDist: %"PRIu16"; GopOptFlag:%s%s;
> IdrInterval: %"PRIu16"\n",
> + info->GopPicSize, info->GopRefDist,
> + info->GopOptFlag & MFX_GOP_CLOSED ? " closed" : "",
> + info->GopOptFlag & MFX_GOP_STRICT ? " strict" : "",
> + info->IdrInterval);
>
> av_log(avctx, AV_LOG_VERBOSE, "TargetUsage: %"PRIu16"; RateControlMethod:
> %s\n",
> info->TargetUsage, print_ratecontrol(info->RateControlMethod));
> @@ -396,8 +394,7 @@ static void dump_video_vp9_param(AVCodecContext *avctx,
> QSVEncContext *q,
> "IntRefType: %"PRIu16"; IntRefCycleSize: %"PRIu16";
> IntRefQPDelta: %"PRId16"\n",
> co2->IntRefType, co2->IntRefCycleSize, co2->IntRefQPDelta);
>
> - av_log(avctx, AV_LOG_VERBOSE, "MaxFrameSize: %d; ", co2-
> >MaxFrameSize);
> - av_log(avctx, AV_LOG_VERBOSE, "\n");
> + av_log(avctx, AV_LOG_VERBOSE, "MaxFrameSize: %d\n", co2-
> >MaxFrameSize);
>
> av_log(avctx, AV_LOG_VERBOSE,
> "BitrateLimit: %s; MBBRC: %s; ExtBRC: %s\n",
LGTM, will apply
Thanks
Haihao
More information about the ffmpeg-devel
mailing list