[FFmpeg-devel] AMD external header

wm4 nfxjfg at googlemail.com
Wed Nov 29 16:55:50 EET 2017

On Mon, 27 Nov 2017 02:15:12 +0000
"Mironov, Mikhail" <Mikhail.Mironov at amd.com> wrote:

> Hi,
> I would like to summarize thoughts on several threads on this forum related 
> to the issue of including AMD/AMF header file into FFmpeg source tree. 
> It looks like they reflect some policies formal or informal.
> Mark tried to create some policy regarding this issue but wasn't successful. 
> I believe a policy is always created to reach some goal. 
> So my summary will be in form of triad: 
> policy->goal->possible action
> I will skip all arguments, you already read them.
> #1
>    policy: do not include external headers
>    goal: minimize maintenance efforts and increase stability of the project
>    action: remove NVidia headers
> #2
>    policy: keep certain headers in the tree based on some criteria
>    goal: provide certain level of convenience for ordinary users
>    action: include AMD header
> #3
>   policy: do whatever is needed to achieve the goal
>   goal: achieve neutrality in relation to HW vendors
>   action: remove NVidia headers or add AMD header
> Since these policies contradict each other, some priorities should be set 
> and I don't know how to do it. Personally I like #2 the most, but this is not my call.
> But my point is that by keeping NVidia headers in the tree and not allowing AMD header, 
> FFmpeg development team breaks all three policies and do not achieve any goal.
> If this is what you want maybe you should state this explicitly on the "About" page 
> as Mark suggested: 
> "No external headers may be added to the ffmpeg tree, unless they are for AviSynth or Nvidia"
> At least it will be clear for all users and developers. 
> You may say that you will include only headers hard to get. But does it mean that AMD must 
> obscure access to the headers to be included? I hope not.

I'd definitely say adding the nvidia and AviSynth headers was a
mistake. Only headers for basic OS compatibility should be allowed. A
good example for such headers would the atomics emulation or msvcrt
compatibility. In general, the allowed external code/headers are
supposed to support things guaranteed by standards (like C or POSIX),
not third-party libraries like vendor-specific drivers or SDKs.

At this point, the nvidia and avisynth headers are probably considered
against the rules. But as the damage is done and removal would cause
problems to certain people, they're "grandfathered". Mark Thompson put
that into words by making them explicit exceptions to the rule.

(Though I think the avisynth headers should be removed because they're
far less useful than nvidia drivers.)

It also should be made clear that nvidia does not somehow receive
preferred treatment over other vendors. In fact, if someone were to
send a patch to move the nvidia headers to a separate repository, I'd
definitely give it a OK (though I have no special say in this and it
depends on other devs too.)

More information about the ffmpeg-devel mailing list