[FFmpeg-devel,V1,2/2] lavc/vaapi_encode: fix slices number check.

Submitted by Jun Zhao on Dec. 6, 2018, 10:39 a.m.

Details

Message ID 1544092798-4125-3-git-send-email-mypopydev@gmail.com
State New
Headers show

Commit Message

Jun Zhao Dec. 6, 2018, 10:39 a.m.
Fix slice number check logic. Only when the user setting slices
number more than the driver constraints dump the rounded up warning
message.

Signed-off-by: Jun Zhao <mypopydev@gmail.com>
---
 libavcodec/vaapi_encode.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

Comments

Mark Thompson Dec. 9, 2018, 6:08 p.m.
On 06/12/2018 10:39, Jun Zhao wrote:
> Fix slice number check logic. Only when the user setting slices
> number more than the driver constraints dump the rounded up warning
> message.
> 
> Signed-off-by: Jun Zhao <mypopydev@gmail.com>
> ---
>  libavcodec/vaapi_encode.c |    2 +-
>  1 files changed, 1 insertions(+), 1 deletions(-)
> 
> diff --git a/libavcodec/vaapi_encode.c b/libavcodec/vaapi_encode.c
> index eda8a36..3c8a33d 100644
> --- a/libavcodec/vaapi_encode.c
> +++ b/libavcodec/vaapi_encode.c
> @@ -1572,7 +1572,7 @@ static av_cold int vaapi_encode_init_slice_structure(AVCodecContext *avctx)
>          return AVERROR(EINVAL);
>      }
>  
> -    if (ctx->nb_slices > avctx->slices) {
> +    if (ctx->nb_slices < avctx->slices) {
>          av_log(avctx, AV_LOG_WARNING, "Slice count rounded up to "
>                 "%d (from %d) due to driver constraints on slice "
>                 "structure.\n", ctx->nb_slices, avctx->slices);
> 

No?  The existing check looks right to me - we warn if the number got increased over what the user specified due to driver constraints.  (We don't allow it to decrease unless the supplied number is larger than the number of rows, which gets warned about above there.)

- Mark
mypopy@gmail.com Dec. 10, 2018, 1:56 a.m.
On Mon, Dec 10, 2018 at 2:08 AM Mark Thompson <sw@jkqxz.net> wrote:
>
> On 06/12/2018 10:39, Jun Zhao wrote:
> > Fix slice number check logic. Only when the user setting slices
> > number more than the driver constraints dump the rounded up warning
> > message.
> >
> > Signed-off-by: Jun Zhao <mypopydev@gmail.com>
> > ---
> >  libavcodec/vaapi_encode.c |    2 +-
> >  1 files changed, 1 insertions(+), 1 deletions(-)
> >
> > diff --git a/libavcodec/vaapi_encode.c b/libavcodec/vaapi_encode.c
> > index eda8a36..3c8a33d 100644
> > --- a/libavcodec/vaapi_encode.c
> > +++ b/libavcodec/vaapi_encode.c
> > @@ -1572,7 +1572,7 @@ static av_cold int vaapi_encode_init_slice_structure(AVCodecContext *avctx)
> >          , tnereturn AVERROR(EINVAL);
> >      }
> >
> > -    if (ctx->nb_slices > avctx->slices) {
> > +    if (ctx->nb_slices < avctx->slices) {
> >          av_log(avctx, AV_LOG_WARNING, "Slice count rounded up to "
> >                 "%d (from %d) due to driver constraints on slice "
> >                 "structure.\n", ctx->nb_slices, avctx->slices);
> >
>
> No?  The existing check looks right to me - we warn if the number got increased over what the user specified due to driver constraints.  (We don't allow it to decrease unless the supplied number is larger than the number of rows, which gets warned about above there.)
>
> - Mark
I think avctx->slices is user setting value and ctx->nb_slices is the
driver constraints, so I think we need to check avctx->slices >
ctx->nb_slices, then give a  rounded up warning. :)
Mark Thompson Dec. 10, 2018, 10:59 p.m.
On 10/12/2018 01:56, mypopy@gmail.com wrote:
> On Mon, Dec 10, 2018 at 2:08 AM Mark Thompson <sw@jkqxz.net> wrote:
>>
>> On 06/12/2018 10:39, Jun Zhao wrote:
>>> Fix slice number check logic. Only when the user setting slices
>>> number more than the driver constraints dump the rounded up warning
>>> message.
>>>
>>> Signed-off-by: Jun Zhao <mypopydev@gmail.com>
>>> ---
>>>  libavcodec/vaapi_encode.c |    2 +-
>>>  1 files changed, 1 insertions(+), 1 deletions(-)
>>>
>>> diff --git a/libavcodec/vaapi_encode.c b/libavcodec/vaapi_encode.c
>>> index eda8a36..3c8a33d 100644
>>> --- a/libavcodec/vaapi_encode.c
>>> +++ b/libavcodec/vaapi_encode.c
>>> @@ -1572,7 +1572,7 @@ static av_cold int vaapi_encode_init_slice_structure(AVCodecContext *avctx)
>>>          , tnereturn AVERROR(EINVAL);
>>>      }
>>>
>>> -    if (ctx->nb_slices > avctx->slices) {
>>> +    if (ctx->nb_slices < avctx->slices) {
>>>          av_log(avctx, AV_LOG_WARNING, "Slice count rounded up to "
>>>                 "%d (from %d) due to driver constraints on slice "
>>>                 "structure.\n", ctx->nb_slices, avctx->slices);
>>>
>>
>> No?  The existing check looks right to me - we warn if the number got increased over what the user specified due to driver constraints.  (We don't allow it to decrease unless the supplied number is larger than the number of rows, which gets warned about above there.)
>>
> I think avctx->slices is user setting value and ctx->nb_slices is the
> driver constraints,

This is correct.

>                     so I think we need to check avctx->slices >
> ctx->nb_slices, then give a  rounded up warning. :)

avctx->slice > ctx->nb_slices would mean that the driver constraint number is /less/ than number the user set; that would be rounding down.  This case isn't allowed by the code above except for the degenerate example where the user setting is greater than the number of rows, which is already warned about.

What we are actually checking for here is the driver constraint number being /greater/ than the number the user set (that is, that ctx->nb_slices > avctx->slices), and then warning the user that their supplied number has been rounded up to the next available possibility and that the output stream will therefore contain more slices than expected.

- Mark
mypopy@gmail.com Dec. 13, 2018, 12:26 a.m.
On Tue, Dec 11, 2018 at 6:59 AM Mark Thompson <sw@jkqxz.net> wrote:
>
> On 10/12/2018 01:56, mypopy@gmail.com wrote:
> > On Mon, Dec 10, 2018 at 2:08 AM Mark Thompson <sw@jkqxz.net> wrote:
> >>
> >> On 06/12/2018 10:39, Jun Zhao wrote:
> >>> Fix slice number check logic. Only when the user setting slices
> >>> number more than the driver constraints dump the rounded up warning
> >>> message.
> >>>
> >>> Signed-off-by: Jun Zhao <mypopydev@gmail.com>
> >>> ---
> >>>  libavcodec/vaapi_encode.c |    2 +-
> >>>  1 files changed, 1 insertions(+), 1 deletions(-)
> >>>
> >>> diff --git a/libavcodec/vaapi_encode.c b/libavcodec/vaapi_encode.c
> >>> index eda8a36..3c8a33d 100644
> >>> --- a/libavcodec/vaapi_encode.c
> >>> +++ b/libavcodec/vaapi_encode.c
> >>> @@ -1572,7 +1572,7 @@ static av_cold int vaapi_encode_init_slice_structure(AVCodecContext *avctx)
> >>>          , tnereturn AVERROR(EINVAL);
> >>>      }
> >>>
> >>> -    if (ctx->nb_slices > avctx->slices) {
> >>> +    if (ctx->nb_slices < avctx->slices) {
> >>>          av_log(avctx, AV_LOG_WARNING, "Slice count rounded up to "
> >>>                 "%d (from %d) due to driver constraints on slice "
> >>>                 "structure.\n", ctx->nb_slices, avctx->slices);
> >>>
> >>
> >> No?  The existing check looks right to me - we warn if the number got increased over what the user specified due to driver constraints.  (We don't allow it to decrease unless the supplied number is larger than the number of rows, which gets warned about above there.)
> >>
> > I think avctx->slices is user setting value and ctx->nb_slices is the
> > driver constraints,
>
> This is correct.
>
> >                     so I think we need to check avctx->slices >
> > ctx->nb_slices, then give a  rounded up warning. :)
>
> avctx->slice > ctx->nb_slices would mean that the driver constraint number is /less/ than number the user set; that would be rounding down.  This case isn't allowed by the code above except for the degenerate example where the user setting is greater than the number of rows, which is already warned about.
>
> What we are actually checking for here is the driver constraint number being /greater/ than the number the user set (that is, that ctx->nb_slices > avctx->slices), and then warning the user that their supplied number has been rounded up to the next available possibility and that the output stream will therefore contain more slices than expected.
>
> - Mark
Got it, thanks the detail explanation

Patch hide | download patch | download mbox

diff --git a/libavcodec/vaapi_encode.c b/libavcodec/vaapi_encode.c
index eda8a36..3c8a33d 100644
--- a/libavcodec/vaapi_encode.c
+++ b/libavcodec/vaapi_encode.c
@@ -1572,7 +1572,7 @@  static av_cold int vaapi_encode_init_slice_structure(AVCodecContext *avctx)
         return AVERROR(EINVAL);
     }
 
-    if (ctx->nb_slices > avctx->slices) {
+    if (ctx->nb_slices < avctx->slices) {
         av_log(avctx, AV_LOG_WARNING, "Slice count rounded up to "
                "%d (from %d) due to driver constraints on slice "
                "structure.\n", ctx->nb_slices, avctx->slices);