On Sun, 5 Feb 2017 14:56:26 +0100 u-9...@aetey.se wrote: > Hello Mark, > > On Sun, Feb 05, 2017 at 12:12:37PM +0000, Mark Thompson wrote: > > On 05/02/17 10:02, u-9...@aetey.se wrote: > > > To make it a bit more clear, my use case is > > > > > > - various devices and videobuffers > > > - different applications which are not feasible to patch/teach/replace > > > > > > Replacing ffmpeg with something else or modifying the applications > > > unfortunately does not fit there, that's also why get_format() does not > > > help. > > > Even if you need to support such a use-case, doing it via the get_format() > > callback is still the right thing to do. Once you've done that, all normal > > applications (including ffmpeg.c itself) can use the standard API as it > > already exists to set the output format. For your > > decoding-into-framebuffer case the calling application must already be > > fully aware of the state of the framebuffer (after all, it has to be able > > to make a suitable AVFrame to pass to get_buffer2() so that you can avoid > > the extra copy), so adding get_format() support to also communicate the > > format is not onerous. > > Note that it is generally impossible to let the application decide > what to choose. Sometimes this may work, but the applications lack > the relevant needed knowledge, which is not guessable from > "what the layers before and after me report as supported formats > in a certain order". > > > Then, if you have a proprietary application which cannot be modified > > because you don't have the source, you could make a shim layer like: > > Proprietary or not, I can hardly modify them. > > A shim layer is certainly a possible workaround, but from my > perspective it would be "moving from a mildly inelegant > to a basically broken and unreliable technology". > > The problem is > <offtopic - system administration> > the technology of LD_*, an old and really bad design by itself. > Compared to a _library_specific_ envvar it is a long way father > from being usable as a general solution. > Note that an LD_* variable affects _linking_ (which is very intrusive) > for _all_ programs, related or not, in all child processes. > Note also that some applications do play tricks with LD_* on their own. > Have I said enough? :( > </offtopic> > > > static enum AVPixelFormat get_format_by_env_var(pix_fmt_list) > > { > > requested_pix_fmt = getenv(SOMETHING); > > if (requested_pix_fmt in pix_fmt_list) > > return requested_pix_fmt; > > else > > error; > > } > > Exactly, but in my situation it is much more robust and easier to > enable the corresponding code in the decoder (or even add it there on > my own in the worst case) than play with binary patching on the fly, > which dynamic linking basically is. > > So instead of forcing the possible fellow sysadmins in a similar situation > to patch, it would we nice to just let them build lilbavcodec with > this slightly non-standard (and pretty safe) behaviour. > > > and LD_PRELOAD it into the application to achieve the same result (insofar > > as that is possible - it seems unlikely that it will be able to use > > get_buffer() appropriately, so there are probably going to be more > > redundant copies in the application and you would need to patch it directly > > to eliminate them). > > You see. > > In any case, thanks for understanding the original problem.
I think you don't get it. There will be no such environment variable use in the libraries, ever. The discussion about this was over a long time ago. _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel