[FFmpeg-devel] [PATCH] timestamp discontinuity in subtitles is OK
Michael Niedermayer
michaelni
Thu Oct 9 20:28:37 CEST 2008
On Thu, Oct 09, 2008 at 01:17:23PM +0200, Aurelien Jacobs wrote:
> Michael Niedermayer wrote:
>
> > On Thu, Oct 09, 2008 at 12:39:21AM +0200, Aurelien Jacobs wrote:
> > > Michael Niedermayer wrote:
> > >
> > > > On Mon, Oct 06, 2008 at 08:24:45AM -0000, Wolfram Gloger wrote:
> > > > > Hi,
> > > > >
> > > > > > i think there is a easier solution
> > > > > > just check for AVFMT_TS_DISCONT which would prevent misdetection in all
> > > > > > containers that do not allow discontinuities.
> > > > >
> > > > > But we _do_ have containers with AVFMT_TS_DISCONT which can have
> > > > > subtitles in them (dvbsub in mpegts, dvdsub in mpeg), so this wouldn't
> > > > > help.
> > > >
> > > > when discontinuities are allowed, then they likely are also allowed
> > > > between subtitle packets (but if you disagree, feel free to quote the specs,
> > > > id be happy to hear what they say ...),
> > > > thus whichever way is used to detect them, the detection should
> > > > be needed between subtitle packets as well.
> > > >
> > > > a check for AVFMT_TS_DISCONT is correct, one for subtitles is not AFAICS.
> > > > The real question is what do the dvbsub/dvdsub specs say about
> > > > discontinuities?
> > >
> > > I guess attached patch is what you meant.
> > >
> > > Aurel
> > > Index: ffmpeg.c
> > > ===================================================================
> > > --- ffmpeg.c (revision 15588)
> > > +++ ffmpeg.c (working copy)
> > > @@ -285,6 +285,7 @@
> > > is not defined */
> > > int64_t pts; /* current pts */
> > > int is_start; /* is 1 at the start and after a discontinuity */
> > > + int ts_discont;
> > > } AVInputStream;
> > >
> > > typedef struct AVInputFile {
> > > @@ -1573,6 +1574,7 @@
> > > ist->start = av_gettime();
> > > ist->frame = 0;
> > > }
> > > + ist->ts_discont = is->iformat->flags & AVFMT_TS_DISCONT;
> > > }
> > > }
> > >
> >
> > > @@ -2105,7 +2107,8 @@
> > > }
> > >
> > > // fprintf(stderr, "next:%"PRId64" dts:%"PRId64" off:%"PRId64" %d\n", ist->next_pts, pkt.dts, input_files_ts_offset[ist->file_index], ist->st->codec->codec_type);
> > > - if (pkt.dts != AV_NOPTS_VALUE && ist->next_pts != AV_NOPTS_VALUE) {
> > > + if (pkt.dts != AV_NOPTS_VALUE && ist->next_pts != AV_NOPTS_VALUE
> > > + && ist->ts_discont) {
> > > int64_t pkt_dts= av_rescale_q(pkt.dts, ist->st->time_base, AV_TIME_BASE_Q);
> >
> > Is there any reason why is->iformat->flags & AVFMT_TS_DISCONT is not
> > directly used here?
>
> Because 'is' is not accessible by any mean in this scope (at least AFAICT).
see svnlog
[...]
--
Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB
Why not whip the teacher when the pupil misbehaves? -- Diogenes of Sinope
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: Digital signature
URL: <http://lists.mplayerhq.hu/pipermail/ffmpeg-devel/attachments/20081009/df6bb484/attachment.pgp>
More information about the ffmpeg-devel
mailing list