[FFmpeg-devel] [PATCH] lavc/vaapi_encode_h264: add support for maxframesize

Fu, Linjie linjie.fu at intel.com
Tue Apr 23 11:16:10 EEST 2019


> -----Original Message-----
> From: mypopy at gmail.com [mailto:mypopy at gmail.com]
> Sent: Tuesday, April 23, 2019 13:42
> To: FFmpeg development discussions and patches <ffmpeg-
> devel at ffmpeg.org>
> Cc: Fu, Linjie <linjie.fu at intel.com>
> Subject: Re: [FFmpeg-devel] [PATCH] lavc/vaapi_encode_h264: add support
> for maxframesize
> 
> On Tue, Apr 23, 2019 at 11:29 AM Linjie Fu <linjie.fu at intel.com> wrote:
> >
> > Add support for max frame size:
> >     - max_frame_size (bytes) to indicate the allowed max frame size.
> >     - pass_num to indicate number of passes.
> >     - delta_qp to indicate adjust qp value.
> >
> > Currently only AVC encoder can support this settings in multiple pass case.
> > If the frame size exceeds, the encoder will do more pak passes to adjust
> the
> > QP value to control the frame size.
> >
> > Set Default num_passes to 4 (1~4), set delta_qp[4] = {1, 1, 1, 1}, use
> > new_qp for encoder if frame size exceeds the limitation:
> >     new_qp = base_qp + delta_qp[0] + delta_qp[1] + ...
> >
> > ffmpeg -hwaccel vaapi -vaapi_device /dev/dri/renderD128 -f rawvideo \
> >         -v verbose -s:v 352x288 -i ./input.yuv -vf format=nv12,hwupload \
> >         -c:v h264_vaapi -profile:v main -g 30 -bf 3 -max_frame_size 40000 \
> >         -pass_num 2 -delta_qp 2 -vframes 100 -y ./max_frame_size.h264
> >
> Some question list as follow:
> 
> 1. Can I change delta_qp per pass, e,g, 4 pass 1, 2, 3, 4, use
> delta_qp[4] like: 1, 2, 4, 8?

Yes, it's available. 
Actually I considered this whether to expose the detailed settings for the user,
And end up with current solution:
	- setting max_frame_size only
		will use default 4 passes with delta_qp = {1, 1, 1, 1}
	- setting max_frame_size with detailed pass_num and delta_qp
		Can be customized by user.
Not splitting delta_qp setting for each pass is trying to make it easier for users.

> 2. So let's think about the limiting case, if we setting
> max_frame_size = 1 for 1080P, what's the action for this driver?

Maybe the commit message is a little bit confusing,
driver will adjust add delta_qp to original qp to decrease the frame size for each pass:
	new_qp = base_qp + delta_qp[0]
If the frame size is still too big, will try 2 passes
	new_qp = base_qp + delta_qp[0] + delta_qp[1]
If the frame size is still too big  after 4 passes qp modification, driver will use max qp allowed by the sum of delta_qp;
	new_qp = base_qp + delta_qp[0] + delta_qp[1] + delta_qp[2] + delta_qp[3] 

> 3. Maybe we can hide the pass_num and delta_qp, only export the
> max_frame_size for this case?  I don't think export the driver QP
> adjustment detail  logic to user space is good idea, user will
> confused about to how to set/adjust pass_num/delta_qp per pass.

Similar with 1, I think a  default path with a valuable set of parameters(Needs advice), together with a customizing method is good.

> 4. Missing docs

Will refine the commit message, and a doc if still needed.

> 5. What's the relationship about other bit rate control like VBR or MBBRC ?

IMHO, max frame size will modify the qp value set by bit rate control methods, and trying to meet the size limitation for each frame.

> 6. Only 264 encoder support this feature? What platform have you tested?

Yes, only AVC encoder can be supported by iHD driver, and tested in KBL.
 

Thanks for the comment.
Linjie


More information about the ffmpeg-devel mailing list