[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