On 30/01/18 03:35, Song, Ruiling wrote:
>> -----Original Message-----
>> From: libav-devel [mailto:libav-devel-boun...@libav.org] On Behalf Of wm4
>> Sent: Friday, January 26, 2018 5:15 PM
>> To: libav-devel@libav.org
>> Subject: Re: [libav-devel] [PATCH] hwcontext_qsv: Fix qsv hwupload failure 
>> issue
>>
>> On Fri, 26 Jan 2018 05:56:46 +0000
>> "Li, Zhong" <zhong...@intel.com> wrote:
>>
>>>> From: libav-devel [mailto:libav-devel-boun...@libav.org] On Behalf Of
>>>> Ruiling Song
>>>> Sent: Friday, January 26, 2018 9:17 AM
>>>> To: libav-devel@libav.org
>>>> Subject: [libav-devel] [PATCH] hwcontext_qsv: Fix qsv hwupload failure 
>>>> issue
>>>>
>>>> From: "Ruiling, Song" <ruiling.s...@intel.com>
>>>>
>>>> 1.) the initial_pool_size need to be set instead of zero.
>>>> 2.) the PicStruct is required by MediaSDK, so give a default value.
>>>>
>>>> A simple command to reproduce the issue:
>>>> avconv -i INPUT -init_hw_device qsv=foo -filter_hw_device foo -vf
>>>> format=nv12,hwupload -c:v h264_qsv ... OUTPUT
>>>>
>>>> Signed-off-by: Ruiling Song <ruiling.s...@intel.com>
>>>> ---
>>>>  libavutil/hwcontext_qsv.c | 4 ++--
>>>>  1 file changed, 2 insertions(+), 2 deletions(-)
>>>>
>>>> diff --git a/libavutil/hwcontext_qsv.c b/libavutil/hwcontext_qsv.c index
>>>> 9270b22..14f26c6 100644
>>>> --- a/libavutil/hwcontext_qsv.c
>>>> +++ b/libavutil/hwcontext_qsv.c
>>>> @@ -313,6 +313,7 @@ static int qsv_init_surface(AVHWFramesContext *ctx,
>>>> mfxFrameSurface1 *surf)
>>>>      surf->Info.CropH          = ctx->height;
>>>>      surf->Info.FrameRateExtN  = 25;
>>>>      surf->Info.FrameRateExtD  = 1;
>>>> +    surf->Info.PicStruct      = MFX_PICSTRUCT_PROGRESSIVE;
>>>>
>>>>      return 0;
>>>>  }
>>>> @@ -325,8 +326,7 @@ static int qsv_init_pool(AVHWFramesContext *ctx,
>>>> uint32_t fourcc)
>>>>      int i, ret = 0;
>>>>
>>>>      if (ctx->initial_pool_size <= 0) {
>>>> -        av_log(ctx, AV_LOG_ERROR, "QSV requires a fixed frame pool
>>>> size\n");
>>>
>>> Should keep this log message as a warning be better?
>>>
>>>> -        return AVERROR(EINVAL);
>>>> +        ctx->initial_pool_size = 64;
>>
>> That doesn't really feel appropriate. If a fixed size pool is required,
>> the user should simply be forced to specify a size. Making it use a
>> random value doesn't make too much sense to me, and the required size
>> is going to depend on the caller's use cases. In addition 64 by default
>> sounds like a huge waste of memory.
> 
> Thanks for your comment!
> But I think it is better if we don't force the user to explicitly setup a 
> value to get it work.
> Less parameters means less burden for end-users. If this rule is not 
> applicable here, please correct me.
> I am not sure why a default workable value is not as good here. Could you 
> share me more thought?
> And there are more places that set default values to initial_pool_size:
> Inside libavfilter/qsvvpp.c it also sets initial_pool_size to 64.
> Inside avtools/avcov_qsv.c, it sets initial_pool_size to 32.
> I am not sure do you have any comment on this? Will be 32 looks a little 
> better?

IMO any fixed number is a problem.  The user can always break it by holding on 
to more frames - the lookahead option in the libmfx encoder is the easiest way 
to eat lots of frames, but there is nothing stopping the user just not giving 
the frames back for a long time.  The advantage of the extra_hw_frames option 
is that it actually codifies how many frames the user is allowed to hold, so 
that if they do hold more it is clear where the error is rather than the answer 
being "um, that doesn't work, sorry".

It is unclear what the default should be before that number is applied, but 
probably not something particularly large because it is very memory-wasteful if 
you have 64 surfaces and only ever use 2 (currently a common problem when 
chaining filters together - it's only the encoder which wants many).  Obviously 
that can all solved by some sort of magic autonegotiation, but noone has yet 
offered a plan of how that could work.

- Mark
_______________________________________________
libav-devel mailing list
libav-devel@libav.org
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to