[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