[FFmpeg-devel] [PATCH 1/2] lavc/qsvenc: expose qp of encoded frames

James Almer jamrial at gmail.com
Tue Aug 7 07:27:32 EEST 2018


On 7/26/2018 4:51 AM, Zhong Li wrote:
> Requirement from ticket #7254.
> Currently only H264 supported by MSDK.
> 
> Signed-off-by: Zhong Li <zhong.li at intel.com>
> ---
>  libavcodec/qsvenc.c      | 43 +++++++++++++++++++++++++++++++++++++++++++
>  libavcodec/qsvenc.h      |  2 ++
>  libavcodec/qsvenc_h264.c |  5 +++++
>  3 files changed, 50 insertions(+)
> 
> diff --git a/libavcodec/qsvenc.c b/libavcodec/qsvenc.c
> index 8096945..1294ed2 100644
> --- a/libavcodec/qsvenc.c
> +++ b/libavcodec/qsvenc.c
> @@ -1139,6 +1139,10 @@ static int encode_frame(AVCodecContext *avctx, QSVEncContext *q,
>  {
>      AVPacket new_pkt = { 0 };
>      mfxBitstream *bs;
> +#if QSV_VERSION_ATLEAST(1, 26)
> +    mfxExtAVCEncodedFrameInfo *enc_info;
> +    mfxExtBuffer **enc_buf;
> +#endif
>  
>      mfxFrameSurface1 *surf = NULL;
>      mfxSyncPoint *sync     = NULL;
> @@ -1172,6 +1176,22 @@ static int encode_frame(AVCodecContext *avctx, QSVEncContext *q,
>      bs->Data      = new_pkt.data;
>      bs->MaxLength = new_pkt.size;
>  
> +#if QSV_VERSION_ATLEAST(1, 26)
> +    if (avctx->codec_id == AV_CODEC_ID_H264) {
> +        enc_info = av_mallocz(sizeof(*enc_info));
> +        if (!enc_info)
> +            return AVERROR(ENOMEM);
> +    
> +        enc_info->Header.BufferId = MFX_EXTBUFF_ENCODED_FRAME_INFO;
> +        enc_info->Header.BufferSz = sizeof (*enc_info);
> +        bs->NumExtParam = 1;
> +        enc_buf = av_mallocz(sizeof(mfxExtBuffer *));

This allocation is unchecked, and also leaks. You free bs and enc_info
everywhere, but not enc_buf.


More information about the ffmpeg-devel mailing list