Quoting Martin Storsjö (2014-11-04 15:38:09)
> From: Michael Niedermayer <[email protected]>
> 
> This is the same logic as is invoked on AVFMT_TS_NEGATIVE,
> but which can be enabled/disabled manually, or can be enabled
> in muxers which only need it in certain conditions.
> 
> Also allow using the same mechanis to force streams to start
> at 0.
> 
> This includes documentation by Stefano Sabatini, Clément Bœsch
> and Michael Niedermayer.
> ---
>  doc/muxers.texi             | 26 ++++++++++++++++++++++++++
>  libavformat/avformat.h      | 18 +++++++++++++++++-
>  libavformat/mux.c           | 12 ++++++++++--
>  libavformat/options_table.h |  5 +++++
>  libavformat/version.h       |  2 +-
>  5 files changed, 59 insertions(+), 4 deletions(-)
> 
> diff --git a/doc/muxers.texi b/doc/muxers.texi
> index 6d2c495..ede7786 100644
> --- a/doc/muxers.texi
> +++ b/doc/muxers.texi
> @@ -16,6 +16,32 @@ with the options @code{--enable-muxer=@var{MUXER}} /
>  The option @code{-formats} of the av* tools will display the list of
>  enabled muxers.
>  
> +Some of the generic, muxer independent options are:
> +
> +@table @option
> +@item avoid_negative_ts @var{integer} (@emph{output})
> +
> +Possible values:
> +@table @samp
> +@item make_non_negative
> +Shift timestamps to make them non-negative.
> +Also note that this affects only leading negative timestamps, and not
> +non-monotonic negative timestamps.
> +@item make_zero
> +Shift timestamps so that the first timestamp is 0.
> +@item auto (default)
> +Enables shifting when required by the target format.
> +@item disabled
> +Disables shifting of timestamp.
> +@end table
> +
> +When shifting is enabled, all output timestamps are shifted by the
> +same amount. Audio, video, and subtitles desynching and relative
> +timestamp differences are preserved compared to how they would have
> +been without shifting.
> +@end table
> +
> +
>  A description of some of the currently available muxers follows.
>  
>  @anchor{crc}
> diff --git a/libavformat/avformat.h b/libavformat/avformat.h
> index f28186f..172e59e 100644
> --- a/libavformat/avformat.h
> +++ b/libavformat/avformat.h
> @@ -429,7 +429,10 @@ typedef struct AVProbeData {
>                                          timestamps. If not set the timestamp
>                                          will be shifted in av_write_frame and
>                                          av_interleaved_write_frame so they
> -                                        start from 0. */
> +                                        start from 0.
> +                                        The user or muxer can override this 
> through
> +                                        AVFormatContext.avoid_negative_ts
> +                                        */
>  
>  /**
>   * @addtogroup lavf_encoding
> @@ -1198,6 +1201,19 @@ typedef struct AVFormatContext {
>       */
>      int max_ts_probe;
>  
> +    /**
> +     * Avoid negative timestamps during muxing.
> +     * Any value of the AVFMT_AVOID_NEG_TS_* constants.
> +     * Note, this only works when interleave_packet_per_dts is in use.
> +     * - muxing: Set by user
> +     * - demuxing: unused
> +     */
> +    int avoid_negative_ts;
> +#define AVFMT_AVOID_NEG_TS_AUTO             -1 ///< Enabled when required by 
> target format
> +#define AVFMT_AVOID_NEG_TS_DISABLED          0 ///< Do not change timestamps
> +#define AVFMT_AVOID_NEG_TS_MAKE_NON_NEGATIVE 1 ///< Shift timestamps so they 
> are non negative
> +#define AVFMT_AVOID_NEG_TS_MAKE_ZERO         2 ///< Shift timestamps so that 
> they start at 0

I'm wondering if allowing the callers to override the format flag and
pass negative timestamps to the muxer that explicitly do not support
that is such a great idea. Is there any conceivable use case for that?

-- 
Anton Khirnov
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to