[FFmpeg-devel] [PATCH 4/5] lavc/qsvenc: add an option to set h264 pps for every frame

Li, Zhong zhong.li at intel.com
Thu Nov 1 08:46:24 EET 2018


> From: ffmpeg-devel [mailto:ffmpeg-devel-bounces at ffmpeg.org] On Behalf
> Of Mark Thompson
> Sent: Thursday, November 1, 2018 6:30 AM
> To: ffmpeg-devel at ffmpeg.org
> Subject: Re: [FFmpeg-devel] [PATCH 4/5] lavc/qsvenc: add an option to set
> h264 pps for every frame
> 
> On 31/10/18 11:00, Li, Zhong wrote:
> >> From: ffmpeg-devel [mailto:ffmpeg-devel-bounces at ffmpeg.org] On
> Behalf
> >> Of Mark Thompson
> >> Sent: Wednesday, October 31, 2018 8:15 AM
> >> To: ffmpeg-devel at ffmpeg.org
> >> Subject: Re: [FFmpeg-devel] [PATCH 4/5] lavc/qsvenc: add an option to
> >> set
> >> h264 pps for every frame
> >>
> >> On 30/10/18 09:21, Li, Zhong wrote:
> >>>> From: ffmpeg-devel [mailto:ffmpeg-devel-bounces at ffmpeg.org] On
> >> Behalf
> >>>> Of Moritz Barsnick
> >>>> Sent: Friday, October 26, 2018 7:49 PM
> >>>> To: FFmpeg development discussions and patches
> >>>> <ffmpeg-devel at ffmpeg.org>
> >>>> Subject: Re: [FFmpeg-devel] [PATCH 4/5] lavc/qsvenc: add an option
> >>>> to set
> >>>> h264 pps for every frame
> >>>>
> >>>> On Thu, Oct 25, 2018 at 20:36:10 +0800, Zhong Li wrote:
> >>>>> 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.
> >>>>
> >>>> Could this change in behavior surprise anyone? If it's okay to
> >>>> change, perhaps at least bump lavc's micro version?
> >>>>
> >>>> Moritz
> >>>
> >>> I doubt how many people would like to repeat every frame's pps.
> >>> Most codecs (x264/x265, and nvenc) won't do that by default.
> >>
> >> Huh, right.  I feel like I must be missing something here - why would
> >> anyone ever want this option enabled?  It doesn't even help with
> >> seeking to arbitrary points in streams without global headers because
> >> you don't have the SPS as well.
> >>
> >> If there isn't some hidden reason for this, it sounds fine to just
> >> switch it off completely without an option to reenable.
> >
> > Two reasons I prefer to have an option to disable it:
> > 1. Keep compatibility with previous behavior though the default case has
> been changed.
> >   Since someone is surprised by current change as previous comment,
> would be a bigger surprise if totally disable it?
> > 2. I am not very good at video streaming, but I guess in some rare cases of
> streaming, repeating pps maybe helpful
> >   (pps and sps can be transferred separated. Some pps are dropped won't
> cause the whole GOP can't decodable).
> >   It is possible?
> 
> I can't think of any case where this would make sense, since the extradata
> cases always carry the two parameter set types together.  (Though maybe
> someone else can think of one?)
> 
> Anyway, the compatibility argument is reasonable so I won't argue further.
> 
> 
> > 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.
> >
> > Signed-off-by: Zhong Li <zhong.li at intel.com>
> > ---
> >  libavcodec/qsvenc.c      | 5 ++---
> >  libavcodec/qsvenc.h      | 2 ++
> >  libavcodec/qsvenc_h264.c | 2 ++
> >  3 files changed, 6 insertions(+), 3 deletions(-)
> >
> > diff --git a/libavcodec/qsvenc.c b/libavcodec/qsvenc.c index
> > ad432fc..fffca65 100644
> > --- a/libavcodec/qsvenc.c
> > +++ b/libavcodec/qsvenc.c
> > @@ -648,11 +648,10 @@ FF_ENABLE_DEPRECATION_WARNINGS
> >              q->extco2.Trellis = q->trellis;  #endif
> >
> > -#if QSV_HAVE_LA_DS
> > +#if QSV_VERSION_ATLEAST(1, 8)
> >              q->extco2.LookAheadDS =
> q->look_ahead_downsampling;
> > -#endif
> > +            q->extco2.RepeatPPS   = q->repeat_pps ?
> MFX_CODINGOPTION_ON : MFX_CODINGOPTION_OFF;
> >
> > -#if QSV_HAVE_BREF_TYPE
> 
> While the #if changes look technically correct (they all resolve to the 1.8
> version), changing the unrelated conditions doesn't feel like it should be
> done in this patch.  If you want to clean that up then maybe a separate
> patch?

Splitting to a separated patch is a good suggestion. Will update.

> 
> >  #if FF_API_PRIVATE_OPT
> >  FF_DISABLE_DEPRECATION_WARNINGS
> >              if (avctx->b_frame_strategy >= 0) diff --git
> > a/libavcodec/qsvenc.h b/libavcodec/qsvenc.h index 1f97f77..9aebc2a
> > 100644
> > --- a/libavcodec/qsvenc.h
> > +++ b/libavcodec/qsvenc.h
> > @@ -162,6 +162,8 @@ typedef struct QSVEncContext {
> >      int int_ref_qp_delta;
> >      int recovery_point_sei;
> >
> > +    int repeat_pps;
> > +
> >      int a53_cc;
> >
> >  #if QSV_HAVE_MF
> > diff --git a/libavcodec/qsvenc_h264.c b/libavcodec/qsvenc_h264.c index
> > ac7023e..893a737 100644
> > --- a/libavcodec/qsvenc_h264.c
> > +++ b/libavcodec/qsvenc_h264.c
> > @@ -155,6 +155,8 @@ static const AVOption options[] = {
> >      { "auto"   , NULL, 0, AV_OPT_TYPE_CONST, { .i64 =
> MFX_MF_AUTO     }, INT_MIN, INT_MAX,     VE, "mfmode" },
> >  #endif
> >
> > +    { "repeat_pps", "repeat pps for every frame",
> > + OFFSET(qsv.repeat_pps), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 1, VE },
> 
> Should be AV_OPT_TYPE_BOOL.

Yup, will update. Thanks



More information about the ffmpeg-devel mailing list