[FFmpeg-devel] [PATCH 5/5] src_movie: implement multiple outputs.

Nicolas George nicolas.george at normalesup.org
Mon Jul 23 13:42:52 CEST 2012

Le sextidi 6 thermidor, an CCXX, Stefano Sabatini a écrit :
> A stream spec may contain a program_id or a stream_id, I don't know if
> they could contain the '+' character.

They are integers too, for the moment at least.

> I suppose for the moment we can keep '+' and de-escape the spec list
> in case of need (e.g. by using av_get_token() instead of av_strtok()).

We can change that if it actually becomes necessary, since it requires more
code (malloc checking).

> (Unrelated note, may be useful to match the language of the stream in
> case it is specified).

I agree. In fact, any kind of metadata matching would be nice.

> doxy may help
> and here
> and here too


> >         av_log(log, AV_LOG_WARNING, "Stream specifier \"%s\" %s\n", spec,
> >                already ? "matched only already used streams" :
> matched only by already used stream?

I believe we usually say that a stream specifier matches a stream (or a
regexp matches a string), not the other way around.

> nit++: drop the final dot, should be more consistent with most libav* messages


> Also since this is a PAWE, maybe: "Loop with several streams is currently unsupported"


> can be simplified with the newly added avfilter_get_buffer_ref_from_frame()


> *to* the requested output.


> >     if (!ret)
> >         ret = pkt->size;
> why this?

Some video decoders return 0 for success instead of the number of used

> &movie->pkt == pkt?
> In this case is less confusing to use just pkt->size consistently.


New version attached.

> Unrelated, and feel free to not reply, I wonder how we should specify
> the options for the codec/format (this is especially relevant for a
> sink movie with multiple inputs). We could specify the options using
> an AVDictionary -> string serializer (like implemented in a recent

(about that patch, I believe it has not yet been pushed)

> patch), but then we need to specify the stream/format to which the
> options apply.
> A possibility would be to apply stream specifier to options, for
> example:
> movie=a=1:v=1:
> fopts='probesize=1M, cryptokey=0xdeadbeef':
> copts='codec:a0=rawaudio, sample_fmt:a=u8, codec:v0=rawvideo, pix_fmt:v0=rgb24'

Using stream specifiers would be a good idea, especially since this is
consistent with what ffmpeg does.

OTOH, requiring the user to know the difference between a format option and
a stream option is not very practical. Especially since that difference may
be tricky: pix_fmt, for example, is actually an option of the rawvideo
format, not a stream option.

The best course of action is IMHO to do like ffmpeg: take all options
together and be smart about what they apply too. Due to the way the API is
done, this may not be too complicated: if we have the options in a dict, I
believe this would work:

  avformat_input_file(..., &dict);
    /* takes the format options, leaves what it does not know */
  avformat_find_stream_info(..., &dict); /* idem */
  for (all selected streams) {
      dict2 = filter_by_stream_specifier(dict);
      avcodec_open2(..., dict2);

An additional bonus of doing that is that it does not require a second round
of escaping: the options can be inserted flatly into the movie argument.


  Nicolas George
-------------- next part --------------
A non-text attachment was scrubbed...
Name: src_movie.c
Type: text/x-csrc
Size: 20070 bytes
Desc: not available
URL: <http://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20120723/56a12be1/attachment.bin>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 198 bytes
Desc: Digital signature
URL: <http://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20120723/56a12be1/attachment.asc>

More information about the ffmpeg-devel mailing list