On Thu, 2 Feb 2012 15:02:58 +0100, Janne Grunau <[email protected]> wrote:
> On 2012-02-02 14:43:03 +0100, Anton Khirnov wrote:
> > Right now those muxers use the default timebase in all cases(1/90000).
> >
> > This patch avoid unnecessary rescaling and makes the printed timestamps
> > more readable.
> >
> > Obviously changes the results of many FATE tests.
> > ---
> > The full patch is about 2MB large, so I cut off most of it.
>
> have you verified that only the timestamps differ? git diff --word-diff
> will be helpful.
>
Yes, unless I missed something.
> [...]
>
> > diff --git a/libavformat/framecrcenc.c b/libavformat/framecrcenc.c
> > index d845e79..6153a28 100644
> > --- a/libavformat/framecrcenc.c
> > +++ b/libavformat/framecrcenc.c
> > @@ -21,6 +21,7 @@
> >
> > #include "libavutil/adler32.h"
> > #include "avformat.h"
> > +#include "internal.h"
> >
> > static int framecrc_write_packet(struct AVFormatContext *s, AVPacket *pkt)
> > {
> > @@ -39,6 +40,7 @@ AVOutputFormat ff_framecrc_muxer = {
> > .extensions = "",
> > .audio_codec = CODEC_ID_PCM_S16LE,
> > .video_codec = CODEC_ID_RAWVIDEO,
> > + .write_header = ff_set_tb_from_codec,
> > .write_packet = framecrc_write_packet,
> > .flags = AVFMT_VARIABLE_FPS,
> > };
> > diff --git a/libavformat/internal.h b/libavformat/internal.h
> > index 559e710..1f7983c 100644
> > --- a/libavformat/internal.h
> > +++ b/libavformat/internal.h
> > @@ -307,4 +307,9 @@ int ff_add_param_change(AVPacket *pkt, int32_t channels,
> > uint64_t channel_layout, int32_t sample_rate,
> > int32_t width, int32_t height);
> >
> > +/**
> > + * Set the timebase for each stream from the corresponding codec timebase.
> > + */
> > +void ff_set_tb_from_codec(AVFormatContext *s);
> > +
> > #endif /* AVFORMAT_INTERNAL_H */
> > diff --git a/libavformat/md5enc.c b/libavformat/md5enc.c
> > index 4509c18..10b81c5 100644
> > --- a/libavformat/md5enc.c
> > +++ b/libavformat/md5enc.c
> > @@ -21,6 +21,7 @@
> >
> > #include "libavutil/md5.h"
> > #include "avformat.h"
> > +#include "internal.h"
> >
> > #define PRIVSIZE 512
> >
> > @@ -102,6 +103,7 @@ AVOutputFormat ff_framemd5_muxer = {
> > .priv_data_size = PRIVSIZE,
> > .audio_codec = CODEC_ID_PCM_S16LE,
> > .video_codec = CODEC_ID_RAWVIDEO,
> > + .write_header = ff_set_tb_from_codec,
> > .write_packet = framemd5_write_packet,
> > .flags = AVFMT_VARIABLE_FPS,
> > };
> > diff --git a/libavformat/utils.c b/libavformat/utils.c
> > index e10348d..f8043b5 100644
> > --- a/libavformat/utils.c
> > +++ b/libavformat/utils.c
> > @@ -3883,3 +3883,12 @@ const struct AVCodecTag
> > *avformat_get_riff_audio_tags(void)
> > {
> > return ff_codec_wav_tags;
> > }
> > +
> > +void ff_set_tb_from_codec(AVFormatContext *s)
> > +{
> > + int i;
> > + for (i = 0; i < s->nb_streams; i++) {
> > + AVStream *st = s->streams[i];
> > + avpriv_set_pts_info(st, 64, st->codec->time_base.num,
> > st->codec->time_base.den);
>
> Are codec timestamps even 64 bit if they are generated from a format
> which wraps sooner?
>
I'm not sure what would the implications of that be, but a quick glance
at libavformat/utils.c shows that pts_wrap_bits is only used when
demuxing. So the number I use there should make no difference.
--
Anton Khirnov
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel