[FFmpeg-devel] [PATCH 05/13] lavf/mux: add avformat_init_output

Marton Balint cus at passwd.hu
Mon Jun 13 00:07:31 CEST 2016



On Sun, 12 Jun 2016, Rodger Combs wrote:

> This allows a consumer to run the muxer's init function without actually
> writing the header, which is useful in chained muxers that support
> automatic bitstream filtering.
> ---
> libavformat/avformat.h | 34 +++++++++++++++++++++++++--
> libavformat/internal.h | 10 ++++++++
> libavformat/mux.c      | 64 +++++++++++++++++++++++++++++++++++++++-----------
> libavformat/version.h  |  4 ++--
> 4 files changed, 94 insertions(+), 18 deletions(-)
>
> diff --git a/libavformat/avformat.h b/libavformat/avformat.h
> index d659ee4..d6b0b26 100644
> --- a/libavformat/avformat.h
> +++ b/libavformat/avformat.h
> @@ -616,6 +616,8 @@ typedef struct AVOutputFormat {
>      * AVStream parameters that need to be set before packets are sent.
>      * This method must not write output.
>      *
> +     * Return 0 if streams were fully configured, 1 if not, negative AVERROR on failure
> +     *
>      * Any allocations made here must be freed in deinit().
>      */
>     int (*init)(struct AVFormatContext *);
> @@ -2363,6 +2365,10 @@ void avformat_close_input(AVFormatContext **s);
>  * @addtogroup lavf_encoding
>  * @{
>  */
> +
> +#define AVSTREAM_INIT_IN_WRITE_HEADER 0 ///< stream parameters initialized in avformat_write_header
> +#define AVSTREAM_INIT_IN_INIT_OUTPUT  1 ///< stream parameters initialized in avformat_init_output
> +
> /**
>  * Allocate the stream private data and write the stream header to
>  * an output media file.
> @@ -2374,14 +2380,38 @@ void avformat_close_input(AVFormatContext **s);
>  *                 On return this parameter will be destroyed and replaced with a dict containing
>  *                 options that were not found. May be NULL.
>  *
> - * @return 0 on success, negative AVERROR on failure.
> + * @return AVSTREAM_INIT_IN_WRITE_HEADER on success if the codec had not already been fully initialized in avformat_init,
> + *         AVSTREAM_INIT_IN_INIT_OUTPUT  on success if the codec had already been fully initialized in avformat_init,
> + *         negative AVERROR on failure.
>  *
> - * @see av_opt_find, av_dict_set, avio_open, av_oformat_next.
> + * @see av_opt_find, av_dict_set, avio_open, av_oformat_next, avformat_init_output.
>  */
> av_warn_unused_result
> int avformat_write_header(AVFormatContext *s, AVDictionary **options);

I don't see why you want to change avformat_write_header API. After a 
successful call to avformat_write_header, codecs/streams are always 
initialzied, aren't they? Who cares anymore if it was done in init or 
write_header?

Regards,
Marton


More information about the ffmpeg-devel mailing list