diff options
author | Marton Balint <cus@passwd.hu> | 2013-10-23 23:15:54 +0200 |
---|---|---|
committer | Marton Balint <cus@passwd.hu> | 2013-11-10 18:57:51 +0100 |
commit | 65fb59abd27af8e71f3a76e30f4536a878918fb1 (patch) | |
tree | 758856e0ecfcf3dff6660b6e39514a512db324f8 | |
parent | b689b1f6ee1a6900259f0b1f7de15723125d58a3 (diff) | |
download | ffmpeg-65fb59abd27af8e71f3a76e30f4536a878918fb1.tar.gz |
libzvbi-teletextdec: use AVBPrint for whitespace cleanup
Signed-off-by: Marton Balint <cus@passwd.hu>
-rw-r--r-- | libavcodec/libzvbi-teletextdec.c | 37 |
1 files changed, 19 insertions, 18 deletions
diff --git a/libavcodec/libzvbi-teletextdec.c b/libavcodec/libzvbi-teletextdec.c index b5066e068a..c65268d016 100644 --- a/libavcodec/libzvbi-teletextdec.c +++ b/libavcodec/libzvbi-teletextdec.c @@ -20,6 +20,7 @@ #include "avcodec.h" #include "libavutil/opt.h" +#include "libavutil/bprint.h" #include "libavutil/intreadwrite.h" #include <libzvbi.h> @@ -95,9 +96,8 @@ subtitle_rect_free(AVSubtitleRect **sub_rect) static int gen_sub_text(TeletextContext *ctx, AVSubtitleRect *sub_rect, vbi_page *page, int chop_top) { - char *text; const char *in; - char *out; + AVBPrint buf; char *vbi_text = av_malloc(TEXT_MAXSZ); int sz; @@ -115,11 +115,8 @@ gen_sub_text(TeletextContext *ctx, AVSubtitleRect *sub_rect, vbi_page *page, int } vbi_text[sz] = '\0'; in = vbi_text; - out = text = av_malloc(TEXT_MAXSZ); - if (!text) { - av_free(vbi_text); - return AVERROR(ENOMEM); - } + av_bprint_init(&buf, 0, TEXT_MAXSZ); + if (ctx->chop_spaces) { for (;;) { int nl, sz; @@ -134,25 +131,29 @@ gen_sub_text(TeletextContext *ctx, AVSubtitleRect *sub_rect, vbi_page *page, int break; // skip trailing spaces sz = chop_spaces_utf8(in, nl); - memcpy(out, in, sz); - out += sz; - *out++ = '\n'; + av_bprint_append_data(&buf, in, sz); + av_bprintf(&buf, "\n"); in += nl; } } else { - strcpy(text, vbi_text); - out += sz; - *out++ = '\n'; + av_bprintf(&buf, "%s\n", vbi_text); } av_free(vbi_text); - *out = '\0'; - if (out > text) { + + if (!av_bprint_is_complete(&buf)) { + av_bprint_finalize(&buf, NULL); + return AVERROR(ENOMEM); + } + + if (buf.len) { + int ret; sub_rect->type = SUBTITLE_TEXT; - sub_rect->text = text; - av_log(ctx, AV_LOG_DEBUG, "subtext:%s:txetbus\n", text); + if ((ret = av_bprint_finalize(&buf, &sub_rect->text)) < 0) + return ret; + av_log(ctx, AV_LOG_DEBUG, "subtext:%s:txetbus\n", sub_rect->text); } else { sub_rect->type = SUBTITLE_NONE; - av_free(text); + av_bprint_finalize(&buf, NULL); } return 0; } |