On 20/01/2021 11:53, Nicolas George wrote:
Mark Thompson (12021-01-19):
Can you explain in more detail your use of libavdevice here?
My general sense is that while they might sometimes be convenient to
use if you are already working in a libav* context, they are so
limited (by both the API and the implementation) that most users who
want video output to a screen will turn more full-featured players to
implement this.

(To be clear here, I am talking specifically about outputs to a screen
like fbdev/xv, not about output to non-screen-like devices such as
v4l2 which certainly do have other use-cases.)
For starter, since libavcodec and libavformat are supposed to be the
preferred way of dealing with audio and video, we should assume that
people who develop projects about it will likely have their data already
in AVFrame and AVPacket format, so the fact that these devices work with
the same kind of API is a huge plus.

Second, even though they are limited, they do the work, and for a lot of
projects that is plenty enough. Their existence in libavdevices avoids
reinventing the wheel, and their common API makes it easy to switch,
getting us portability for cheap.

Also, I will turn the board on you: why do YOU object to these
components?
Because the libavformat API is not suitable for (especially) these use-cases, 
so including them in the library feels like a hack that happened to be 
convenient for some subset of people even though it doesn't really fit and 
wants something else.

Those components do feel the worst to me, but this is really a general 
complaint about libavdevice as a whole.  I would prefer that is either mostly 
moved into the ffmpeg utility (where it has clear use and could be better 
integrated), or updated to have a device-oriented API (if there are external 
users, hence the question).

For an API, the things which immediately come to mind are:
* Handle frames as well as packets.
  * Including hardware frames - DRM objects from KMS/V4L2, D3D surfaces from 
Windows desktop duplication (which doesn't currently exist but should).
* Clear core option set - currently almost everything is set by inconsistent 
private options; things like pixel/sample format, frame/sample rate, geometry 
and hardware device should be common options to all.
* Asynchronicity - a big annoyance in current recording scenarios with the 
ffmpeg utility is that both audio and video capture block, and do so on the 
same thread which results in skipped frames.
* Capability probing - the existing method of options which log the 
capabilities are not very useful for API users.

(Not meant to be an exhaustive list.)

Thanks,

- Mark
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".

Reply via email to