[FFmpeg-devel] [PATCH 1/3] ass: factor out ff_ass_bprint_dialog

Clément Bœsch u at pkh.me
Tue Oct 29 15:21:45 CET 2013


On Fri, Oct 25, 2013 at 01:47:04AM +0200, Marton Balint wrote:
> Signed-off-by: Marton Balint <cus at passwd.hu>
> ---
>  libavcodec/ass.c | 35 +++++++++++++++++++++++------------
>  libavcodec/ass.h | 23 +++++++++++++++++++++++
>  2 files changed, 46 insertions(+), 12 deletions(-)
> 
> diff --git a/libavcodec/ass.c b/libavcodec/ass.c
> index 6fe18f5..21d2b8b 100644
> --- a/libavcodec/ass.c
> +++ b/libavcodec/ass.c
> @@ -77,14 +77,11 @@ static void insert_ts(AVBPrint *buf, int ts)
>      }
>  }
>  
> -int ff_ass_add_rect(AVSubtitle *sub, const char *dialog,
> -                    int ts_start, int duration, int raw)
> +int ff_ass_bprint_dialog(AVBPrint *buf, const char *dialog,
> +                         int ts_start, int duration, int raw)
>  {
> -    AVBPrint buf;
> -    int ret, dlen;
> -    AVSubtitleRect **rects;
> +    int dlen;
>  
> -    av_bprint_init(&buf, 0, AV_BPRINT_SIZE_UNLIMITED);
>      if (!raw || raw == 2) {
>          long int layer = 0;
>  
> @@ -101,19 +98,33 @@ int ff_ass_add_rect(AVSubtitle *sub, const char *dialog,
>                  return AVERROR_INVALIDDATA;
>              dialog++;
>          }
> -        av_bprintf(&buf, "Dialogue: %ld,", layer);
> -        insert_ts(&buf, ts_start);
> -        insert_ts(&buf, duration == -1 ? -1 : ts_start + duration);
> +        av_bprintf(buf, "Dialogue: %ld,", layer);
> +        insert_ts(buf, ts_start);
> +        insert_ts(buf, duration == -1 ? -1 : ts_start + duration);
>          if (raw != 2)
> -            av_bprintf(&buf, "Default,");
> +            av_bprintf(buf, "Default,");
>      }
>  
>      dlen = strcspn(dialog, "\n");
>      dlen += dialog[dlen] == '\n';
>  
> -    av_bprintf(&buf, "%.*s", dlen, dialog);
> +    av_bprintf(buf, "%.*s", dlen, dialog);
>      if (raw == 2)
> -        av_bprintf(&buf, "\r\n");
> +        av_bprintf(buf, "\r\n");
> +
> +    return dlen;
> +}
> +
> +int ff_ass_add_rect(AVSubtitle *sub, const char *dialog,
> +                    int ts_start, int duration, int raw)
> +{
> +    AVBPrint buf;
> +    int ret, dlen;
> +    AVSubtitleRect **rects;
> +
> +    av_bprint_init(&buf, 0, AV_BPRINT_SIZE_UNLIMITED);
> +    if ((dlen = ff_ass_bprint_dialog(&buf, dialog, ts_start, duration, raw)) < 0)
> +        return dlen;
>      if (!av_bprint_is_complete(&buf))
>          return AVERROR(ENOMEM);
>  
> diff --git a/libavcodec/ass.h b/libavcodec/ass.h
> index ef99b58..544f66a 100644
> --- a/libavcodec/ass.h
> +++ b/libavcodec/ass.h
> @@ -23,6 +23,7 @@
>  #define AVCODEC_ASS_H
>  
>  #include "avcodec.h"
> +#include "libavutil/bprint.h"
>  
>  /**
>   * @name Default values for ASS style
> @@ -90,4 +91,26 @@ int ff_ass_subtitle_header_default(AVCodecContext *avctx);
>  int ff_ass_add_rect(AVSubtitle *sub, const char *dialog,
>                      int ts_start, int duration, int raw);
>  
> +/**
> + * Add an ASS dialog line to an AVBPrintf buffer.
> + *

AVBPrint

> + * @param buf pointer to the AVBPrint buffer

...to an initialized AVBPrint buffer

> + * @param dialog ASS dialog to add to sub
> + * @param ts_start start timestamp for this dialog (in 1/100 second unit)
> + * @param duration duration for this dialog (in 1/100 second unit), can be -1
> + *                 to last until the end of the presentation
> + * @param raw when set to 2, it indicates that dialog contains an ASS
> + *                           dialog line as muxed in Matroska
> + *            when set to 1, it indicates that dialog contains a whole SSA
> + *                           dialog line which should be copied as is.
> + *            when set to 0, it indicates that dialog contains only the Text
> + *                           part of the ASS dialog line, the rest of the line
> + *                           will be generated.
> + * @return number of characters read from dialog. It can be less than the whole
> + *         length of dialog, if dialog contains several lines of text.
> + *         A negative value indicates an error.
> + */
> +int ff_ass_bprint_dialog(AVBPrint *buf, const char *dialog,
> +                         int ts_start, int duration, int raw);
> +
>  #endif /* AVCODEC_ASS_H */

LGTM otherwise

-- 
Clément B.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 490 bytes
Desc: not available
URL: <http://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20131029/2c9793d0/attachment.asc>


More information about the ffmpeg-devel mailing list