[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