On Mon, 26 Mar 2018 11:48:01 -0400
Devin Heitmueller <dheitmuel...@ltnglobal.com> wrote:

> Hello all,
> 
> > On Mar 24, 2018, at 6:37 AM, Michael Niedermayer <mich...@niedermayer.cc> 
> > wrote:
> > 
> > On Sat, Mar 24, 2018 at 01:07:48AM +0100, Marton Balint wrote:  
> >> 
> >> 
> >> On Fri, 23 Mar 2018, Devin Heitmueller wrote:
> >>   
> >>> Hello,
> >>> 
> >>> I am in the process of reworking libavfilter to pass along the field order
> >>> across links.  For the moment I followed the model found in AVFrame where
> >>> there are two int fields: “interlaced_frame” and “top_field_first”.
> >>> However it seems like it would be more appropriate to use the enum
> >>> AVFieldOrder, which is a single field and provides more flexibility
> >>> (including being able to be set to “unknown” if appropriate).
> >>> 
> >>> Does anyone have an objection to moving the definition of AVFieldOrder to
> >>> libavutil, so it can be taken advantage of by libavfilter?  Right now it’s
> >>> in libavcodec, and from what I understand libavfilter does not depend on
> >>> libavcodec.  
> >>   
> >   
> >> AVFieldOrder is already a mess,   
> > 
> > +1  
> 
> Well, I really opened up a can of worms, eh?
> 
> As someone who used to work on Linux video capture drivers in a former life, 
> I can appreciate how confusing interlaced formats can be, perhaps even among 
> some of the ffmpeg developers.  It gets even worse when you have to deal with 
> the buffers delivered directly from embedded hardware such as SOCs, where the 
> formats can be even more esoteric than what you might find in various codecs 
> (most of which make at least some effort to normalize down to only a few 
> formats).
> 
> For what it’s worth, there were similar such debates years ago on what sort 
> of definitions are necessary to specify interlaced formats, and this is what 
> we arrived at (and have been using for many years):
> 
> https://linuxtv.org/downloads/v4l-dvb-apis/uapi/v4l/field-order.html 
> <https://linuxtv.org/downloads/v4l-dvb-apis/uapi/v4l/field-order.html>
> 
> The enum values described on that page cover pretty much all the cases you 
> can come across, including buffers organized as interleaved versus separate 
> fields, etc.
> 
> The above page is nice because it has some pictures/diagrams which allow you 
> to visualize the actual differences between the different modes.  It also 
> gives a good summary of the differences between spatial ordering and temporal 
> ordering (which I suspect is a cause of much of the confusing).
> 
> My goal was to solve an immediate business problem - making sure that when 
> playing a 1080i H.264 or MPEG-2 video that the decklink output gets properly 
> configured to 1080i59.  The scope creep came in after I realized this data 
> had no means of being propagated through the filter framework.  Now it’s 
> being suggested that we would have to redesign the whole way AVFieldOrder is 
> done, presumably including some sort of backward compatibility with the 
> existing system and API deprecation path for what is already there.
> 
> I’m not confident I have the time required to achieve such a goal.  This 
> presents several options:
> 
> 1.  Do nothing.  I’ll maintain my patch out-of-tree and Decklink will 
> continue to make bad choices on setting the output format.
> 
> 2.  Somebody else create a replacement for AVFieldOrder, go through all the 
> rounds of feedback/debate, merge the functionality and fix all the various 
> codecs/demuxers/etc which would need to use the new framework.  I’m happy to 
> rework my patch to use such replacement, but given ffmpeg has gone for many 
> years with AVFieldOrder in the state it’s in, I’m not confident there are 
> many volunteers willing to take on such an endeavor.
> 
> 3.  Try to get some variant of my patch upstream which leverages either the 
> existing AVFieldOrder or the AVFrame approach (i.e. 
> interlaced_frame/top_field_first struct members), and continue to live with 
> the deficiencies in the API.  I don’t think this makes the situation any 
> worse, it lays the groundwork for propagating this data through pipelines 
> (which can be converted to use some other struct member at a later date), and 
> it solves all the use cases that I care about.
> 
> I’m happy to contribute where I can, but part of me feels like let’s not let 
> “perfect be the enemy of good”.

Just adding a new summary enum would probably be a good idea. I suggest
you make a patch that's not too much effort, and that _only_ adds a new
enum to libavutil (though it will probably need to list all possible
variants).

Whether merging all interlaced flag things into a single enum makes
sense or not, no idea.
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel

Reply via email to