On Wed, 6 Sep 2017 21:07:53 +0100
Mark Thompson <s...@jkqxz.net> wrote:

> On 06/09/17 17:27, wm4 wrote:
> > On Wed, 6 Sep 2017 16:49:11 +0100
> > Mark Thompson <s...@jkqxz.net> wrote:
> >   
> >> On 06/09/17 15:33, wm4 wrote:  
> >>> On Tue,  5 Sep 2017 23:59:30 +0100
> >>> Mark Thompson <s...@jkqxz.net> wrote:
> >>>     
> >>>> ---
> >>>> Saves the VA config, the frame pool, and the VA context (in that order). 
> >>>>  The device reference is held so that freeing the persistent data is 
> >>>> possible (the transient context is already gone when it happens).
> >>>>
> >>>>
> >>>>  libavcodec/vaapi_decode.c | 241 
> >>>> +++++++++++++++++++++++++++++++++-------------
> >>>>  libavcodec/vaapi_decode.h |  18 ++++
> >>>>  2 files changed, 192 insertions(+), 67 deletions(-)
> >>>>    
> >>>
> >>> Doesn't this also discard the frames context if the decoder context
> >>> changes? That seems unnecessary. Can't it just reuse the frames context
> >>> whenever the frames parameters are the same?    
> >>
> >> What case do you want to cover here?  The VA config change is rare 
> >> (codec/profile change in the stream, codec isn't actually supported 
> >> because of other lavc stuff but it could work), and is large enough that 
> >> the user might want to apply different settings in init_hw_frames.  VA 
> >> context depends on frames so must always be remade if the frames change.  
> > 
> > It depends on how the config change is done. There were cases in the
> > past where libavcodec called get_format() on every IDR or so. If it can
> > check the cached decoder fine-grained "enough", fine.
> > 
> > It still seems unnecessary to conflate the decoder and the frames. Also
> > what about use cases such as the user wanting to use an existing frames
> > context on a new decoder context? (Not my use case, but IMO something
> > that shows that the current API might be too inflexible.)  
> 
> I think should be regarded as opportunistic, and may make a new one at any 
> time with no warning.  If there are hard requirements about the frames then 
> hw_frames_ctx should be used instead.

That's fine, I'm just looking for a way you can do this without
hardcoding things specific to a decoding API/wrapper, like what surface
format to use and how to pad surfaces.

> >> For normal cases:
> >> * Flush with the same extradata (e.g. seeking) reuses everything.
> >> * Resolution change reuses the VA config and makes new frames and VA 
> >> context.
> >>  
> >>> Also, it would be possible to implement frames context reuse without
> >>> having to change each hwaccel implementation.    
> >>
> >> Maybe?  It would need some amount of change around management of 
> >> hw_device_ctx / user-set hw_frames_ctx / legacy hwaccel_context cases, 
> >> since all of the choices between those are currently made by the 
> >> individual hwaccels.  
> > 
> > Not really. The invariant is that you _can_ provide an existing frames
> > context to a hwaccel, and that frames context could be simply cached by
> > the shared code. One requirement is that the shared code could get the
> > needed frame parameter in advance.
> > 
> > That would still require new per-hwaccel code, but only to the extent
> > of what dxva_adjust_hwframes() (as well as current API users) need to
> > know. In particular, this is independent from creating an actual
> > decoder.
> > 
> > So why can't we just export something like dxva_adjust_hwframes()?
> > 
> > The only problem is that this would need a new entry point, as the user
> > somehow select the AVHWaccel implicitly with the get_format() return.  
> 
> I'm not really sure what you are suggesting here.  Can you explain a bit 
> further what you mean?

Exporting a function like dxva_adjust_hwframes() for every hwaccel,
dispatched in a similar way hwaccel use is. (So I guess something like
avcodec_adjust_hwframes(ctx, pix_fmt).)
_______________________________________________
libav-devel mailing list
libav-devel@libav.org
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to