[FFmpeg-devel] [PATCH] DVB Subtitles Fix
Michael Niedermayer
michaelni at gmx.at
Wed May 4 21:05:16 CEST 2011
On Wed, May 04, 2011 at 07:18:12PM +0100, JULIAN GARDNER wrote:
>
>
>
>
> ----- Original Message -----
> > From: Michael Niedermayer <michaelni at gmx.at>
> > To: FFmpeg development discussions and patches <ffmpeg-devel at ffmpeg.org>
> > Cc:
> > Sent: Wednesday, 4 May 2011, 18:25
> > Subject: Re: [FFmpeg-devel] [PATCH] DVB Subtitles Fix
> >
> > On Wed, May 04, 2011 at 04:11:33PM +0100, JULIAN GARDNER wrote:
> >>
> >>
> >>
> >>
> >> ----- Original Message -----
> >> > From: Michael Niedermayer <michaelni at gmx.at>
> >> > To: FFmpeg development discussions and patches
> > <ffmpeg-devel at ffmpeg.org>
> >> > Cc:
> >> > Sent: Wednesday, 4 May 2011, 15:14
> >> > Subject: Re: [FFmpeg-devel] [PATCH] DVB Subtitles Fix
> >> >
> >> > On Tue, Apr 26, 2011 at 11:34:10PM +0100, JULIAN GARDNER wrote:
> >> >> Ok first patch to fix the decoding and re-encoding of DVB
> > Subtitles.
> >> >>
> >> >> I went through and validated against the spec, my own engine and
> > fixed the
> >> > bits that were failing or wrong.
> >> >
> >> > please explain how to reproduce the bugs that your patch fixes
> >> >
> >> > Also please explain more elaborately what and why each change is made.
> >> >
> >>
> >> I use LIVE and RECORDED streams from various sources which i have collected
> > over the past years, these are put through ffmpeg and then the output stream is
> > played out in VLC and a couple of my own receivers which are used in
> > professional cable networks.
> >
> > understood, but does this patch fix any problem with these ffmpeg
> > generated streams?
> > Iam asking because id like to reproduce the problem and the fix.
> >
> >
> it fixes all the problems with the encoded streams, also it allows FFMPEG to process a file correctly without bailing out with an error.
>
> I can upload a couple of streams if you want for you to see the problems.
thanks, yes this would help me.
if they are small you can upload to our issue tracker
http://ffmpeg.org/trac/ffmpeg
>
> >>
> >> >
> >> >>
> >> >> I have tested this on recorded streams and live streams and found
> > no
> >> > problems except for one which i will try and explain about.
> >> >>
> >> >> Here in the UK some of our channels use a live speech convertor
> > where you
> >> > see the words appear as they are spoken, now this works fine but the
> > way the
> >> > decode/encode works a lot more space is taken by this encoder for the
> > subsequent
> >> > encoded stream. In one test the incoming packets made up around 3k of
> > data, but
> >> > the amount of data in the output stream was around 15k.
> >> >>
> >> >> joolz
> >> >
> >> >> ffmpeg.c | 11 -
> >> >> libavcodec/dvbsub.c | 103 ++++++++---------
> >> >> libavcodec/dvbsubdec.c | 296
> >> > +++++++++++++++++++++++++++++--------------------
> >> >> libavcodec/utils.c | 3
> >> >> 4 files changed, 233 insertions(+), 180 deletions(-)
> >> >> d22a3a04cf764a0b25138652ad82fe484311405f dvbsubs.diff
> >> >> diff --git a/ffmpeg.c b/ffmpeg.c
> >> >> index 2c69608..e88bcfc 100644
> >> >> --- a/ffmpeg.c
> >> >> +++ b/ffmpeg.c
> >> >> @@ -1092,15 +1092,8 @@ static void
> > do_subtitle_out(AVFormatContext *s,
> >> >> subtitle_out = av_malloc(subtitle_out_max_size);
> >> >> }
> >> >>
> >> >> - /* Note: DVB subtitle need one packet to draw them and one
> > other
> >> >> - packet to clear them */
> >> >> - /* XXX: signal it in the codec context ? */
> >> >> - if (enc->codec_id == CODEC_ID_DVB_SUBTITLE)
> >> >> - nb = 2;
> >> >> - else
> >> >> - nb = 1;
> >> >> -
> >> >> - for(i = 0; i < nb; i++) {
> >> >> + i = 0;
> >> >> + {
> >> >> sub->pts = av_rescale_q(pts,
> > ist->st->time_base,
> >> > AV_TIME_BASE_Q);
> >> >> // start_display_time is required to be 0
> >> >> sub->pts +=
> >> > av_rescale_q(sub->start_display_time, (AVRational){1, 1000},
> > AV_TIME_BASE_Q);
> >> >
> >> > why is this changed?
> >> >
> >>
> >> Because only one stream is needed to process DVB Subtitles, i could not
> > work out why you needed this. The NOTE is wrong regarding needed one to draw and
> > one to remove
> >>
> >> What you will get from the DVB Stream is a packet with NO regions, this is
> > the one that removes the subtitles from the picture, as per the spec, there is a
> > timeout value, which in the ffmpeg engine is always set to 30 seconds, this
> > would cause the receiving unit to switch off the display after 30 seconds of no
> > valid dvb stream.
> >
> > Lets assume something generates subtitles, lets say it generates one
> > displaying "hello world" at start time 0:10 and end time 0:50
> > If i understand you correctly this needs a packet muxed with time 0:10
> > and a empty clear packet muxed at time 0:50
> >
> > And this loop generates these 2 packets from 1 subtitle with start and
> > end times.
> >
> > You remove it and i dont see how this could still work afterwards
> > maybe iam missing something ?
>
> The subtitles dont have an end time per se, what you have is a display time and a timeout value, this is incase of a stream problem or corruption for a missing packet.
>
> now what happens is in you example you would get a display packet with regions/objects/cluts etc and a timeout of 60, then around 50 seconds into the stream you would get a packet which has no objects/regions/cluts. This packet would turn the subs off, now if this packet was corrupted then the timeout would take care of the removal.
I understand that, but this is only so when the source is dvb subs too
it can be something else.a different subtitle format for example.
[...]
--
Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB
The bravest are surely those who have the clearest vision
of what is before them, glory and danger alike, and yet
notwithstanding go out to meet it. -- Thucydides
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 198 bytes
Desc: Digital signature
URL: <http://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20110504/9afeb46a/attachment.asc>
More information about the ffmpeg-devel
mailing list