[vlc-devel] [PATCH] avcodec: only assume DXVA2 is used if it's forced

Rémi Denis-Courmont remi at remlab.net
Mon Mar 30 19:06:27 CEST 2015

Le lundi 30 mars 2015, 18:44:31 Steve Lhomme a écrit :
> I see,
> https://mailman.videolan.org/pipermail/vlc-devel/2014-August/099420.html
> So what you're saying is that it should be done differently ?

I mean that:
1) This patch is wrong.
2) The problem was brought up a long time ago but ignored.

> I agree on that.
> Since at this point we know the input format, we could check if dxva2
> will actually be able to handle, using the regular module loading and
> decide if we want FF_THREAD_FRAME or not.

No, the format is not *fully* known at this point, at least not 
systematically. libavcodec provides the final format only upon get_format() or 
get_buffer() callback invocation. (In the latter case, it means that hardware 
acceleration is not supported.)

Hardware capability checking can only happen within ffmpeg_GetFormat(), 
specifically vlc_va_New().

> Another way could be to let avcodec pick it's decoder first and if
> it's DXVA2 then we disable FF_THREAD_FRAME. I'm not sure if it's
> possible to do it in that order, but it would be much cleaner and
> logical.

As far as I know, that is not possible with current libavcodec versions. To my 
knowledge, if you want to support both multi-threading and hardware 
acceleration, you must leave multi-threading enabled. It might be slightly 
less efficient than single threading and will waste memory if hardware 
acceleration is used.

> Also #14054 has other issues like bad plane alignment, so this change
> won't be sufficient. I'm not even sure frame threading is much
> superior to slice threading.

I guess DXVA2 used to fail completely with slice threading. I do not know the 
current situation.

Rémi Denis-Courmont

More information about the vlc-devel mailing list