On Tue, 10 May 2016 14:35:02 +0200 Michael Niedermayer <mich...@niedermayer.cc> wrote:
> On Tue, May 10, 2016 at 02:02:52PM +0200, Hendrik Leppkes wrote: > > On Tue, May 10, 2016 at 1:43 PM, Michael Niedermayer > > <mich...@niedermayer.cc> wrote: > > > On Tue, May 10, 2016 at 11:17:12AM +0100, Derek Buitenhuis wrote: > > >> On 5/10/2016 7:24 AM, Hendrik Leppkes wrote: > > >> > I don't like this, the struct is pretty cleanly defined and unlikely > > >> > to be extended much over time. > > >> > Most other structs have AVOptions so the CLI can interact with it, but > > >> > this struct is not meant to be modified by users, its just a direct > > >> > line of communication between demuxer->decoder or encoder->muxer. > > >> > > >> To me this mostly still feels like trying to make a demuxing library > > >> something it isn't. It demuxes and muxes. > > >> > > >> You can argue that it should be easier than decoding a frame to get this > > >> info (which I don't personally think is much trouble at all). However, > > >> jamming it into libavformat for reasons like "we've always done this" and > > >> "there's no better place" is not good design IMO. > > >> > > >> It sounds like what you really want is a higher level "easy" API. Don't > > >> jam it in to existing decoupled APIs because it is convenient, IMO. > > >> That's > > >> how horrible things like having ffmpeg.c functionality in libavformat > > >> came > > >> to exist, and a decade of misery followed. > > > > > > This patch adds an AVClass field to AVCodecParameters like we use in > > > other public structures. > > > i fail to see how this patch is related to your reply > > > > > > What the patch does, is it makes the API more consistent and easy to > > > use. Users call the AVOption functions to set fields in the main > > > public structures, if they do that for AVCodecParameters it would > > > crash. > > > Even an empty AVClass that doesnt list options would reduce that > > > misery by at least not crashing but giving a clear error message. > > > > > > > We should not design our API around people not caring to read our API, > > because thats not a fight we can ever win. > > APIs should be designed with the "Principle of least astonishment" > > its quite surprising that AVOption APIs work with most public API > structures but crash with some > (AVPacket is another and i am of the oppinon and stated that previously > IIRC that it too should have a AVClass as its first element, this is > just hard to add as it requires ABI bumping everything which is why > i didnt push much for that being done, it needs to be done at a > time we bump all stuff for more important reasons) > > also let me steal the text from wikipedia about the > Principle_of_least_astonishment, as its IMO well written Indeed, av_opt calls on structs which don't support it compile without warning, but mysteriously crash at runtime. That's a violation of this principle. And no, it doesn't mean that every struct should have an AVClass, because that would be insane. > > In more practical terms, the principle aims to exploit users' pre-existing > knowledge to minimize the learning curve, for instance by designing > interfaces that borrow heavily from "functionally similar or analogous > programs with which your users are likely to be familiar."[2] User > expectations in this respect may be closely related to a particular computing > platform or tradition. For example, Unix command line programs are expected > to follow certain conventions with respect to switches,[2] and widgets of > Microsoft Windows programs are expected to follow certain conventions with > respect to key bindings.[6] In more abstract settings like an API, the > expectation that function or method names intuitively match their behavior is > another example.[7] This practice also involves the application of sensible > defaults.[4] > > When two elements of an interface conflict, or are ambiguous, the behavior > should be that which will least surprise the user; in particular a programmer > should try to think of the behavior that will least surprise someone who uses > the program, rather than that behavior that is natural from knowing the inner > workings of the program.[4] > > --------- > also in my own words: People dont read the manual, if use of an API > requires instead of benefits from people reading the manual that leads > to no good > > > [...] _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel