[FFmpeg-devel] [PATCH] lavf: add ffprobe demuxer
Michael Niedermayer
michael at niedermayer.cc
Tue Oct 18 17:06:47 EEST 2016
On Tue, Oct 18, 2016 at 01:33:27PM +0200, Stefano Sabatini wrote:
> On date Thursday 2016-10-13 19:46:41 +0200, Stefano Sabatini encoded:
> > On date Thursday 2016-09-29 21:55:11 +0200, wm4 encoded:
> [...]
> > > This seems like a rather special use case. Why does it have a demuxer,
> > > and can't be in your own C code using libavcodec/libavformat?
> > >
> >
> > > In addition, I think using the ffprobe "format" is an overcomplication,
> > > and will justify adding even more stuff to the demuxer, until it's a
> > > similarily complex mess like the ffm demuxer/muxer.
> >
> > I'm aware of the issue. OTOH I think the feature per-se is useful, at
> > least for the two mentioned use cases (debugging - especially if
> > coupled with a corresponding muxer), and data streams (generated by
> > script) injection, since it relies on a textual format easily
> > scriptable and editable by hand.
> >
> > I thus leave the choice to the community. I guess this will require a
> > vote if we cannot find an agreement.
> >
> > Latest patch in attachment with ffprobe demuxer disabled by default,
> > and extended documentation. (I'm also attaching the ff_get_line2 patch
> > which is used by this new patch).
>
> Updated, depends on the ff_get_line2() patch.
> --
> FFmpeg = Fanciful and Fundamentalist Magnificient Ponderous Elastic Game
> configure | 3
> doc/demuxers.texi | 18 ++
> doc/ffprobe-format.texi | 121 ++++++++++++++
> doc/formats.texi | 1
> libavformat/Makefile | 1
> libavformat/allformats.c | 1
> libavformat/ffprobedec.c | 405 +++++++++++++++++++++++++++++++++++++++++++++++
> 7 files changed, 550 insertions(+)
> 1d8a987564e907802dfd84722e3f5aafa69919ee 0002-lavf-add-ffprobe-demuxer.patch
> From bef4930a2bf280425b5952de0e2281f03897ff7c Mon Sep 17 00:00:00 2001
> From: Nicolas George <george at nsup.org>
> Date: Sat, 11 Jan 2014 19:42:41 +0100
> Subject: [PATCH] lavf: add ffprobe demuxer
>
> With several modifications and documentation by Stefano Sabatini
> <stefasab at gmail.com>.
>
> Signed-off-by: Nicolas George <george at nsup.org>
> ---
[...]
> +static int read_section_packet(AVFormatContext *avf, AVPacket *pkt)
> +{
> + FFprobeContext *ffp = avf->priv_data;
> + uint8_t buf[4096];
> + int ret;
> + AVPacket p;
> + char flags;
> +
> + av_init_packet(&p);
> + p.pos = avio_tell(avf->pb);
> + p.stream_index = -1;
> + p.size = -1;
> + av_bprint_clear(&ffp->data);
> + while ((ret = read_section_line(avf, buf, sizeof(buf)))) {
> + int has_time = 0;
> + int64_t pts, dts, duration;
> + char timebuf[1024];
> +
> + if (ret < 0)
> + return ret;
> + if (sscanf(buf, "stream_index=%d", &p.stream_index)) {
> + if ((unsigned)p.stream_index >= avf->nb_streams) {
> + av_log(avf, AV_LOG_ERROR, "Invalid stream number %d specified in packet number %d\n",
> + p.stream_index, ffp->packet_nb);
> + return AVERROR_INVALIDDATA;
> + }
> + }
> +
> +#define PARSE_TIME(name_, is_duration) \
> + sscanf(buf, #name_ "=%"SCNi64, &p.name_); \
> + has_time = sscanf(buf, #name_ "_time=%s", timebuf); \
%s may be unsafe, not sure if theres a check elsewhere that prevents
writing over the outut buffer
[...]
--
Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB
Observe your enemies, for they first find out your faults. -- Antisthenes
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 181 bytes
Desc: Digital signature
URL: <http://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20161018/9c801c52/attachment.sig>
More information about the ffmpeg-devel
mailing list