aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarton Balint <cus@passwd.hu>2013-10-23 23:15:54 +0200
committerMarton Balint <cus@passwd.hu>2013-11-10 18:57:51 +0100
commit65fb59abd27af8e71f3a76e30f4536a878918fb1 (patch)
tree758856e0ecfcf3dff6660b6e39514a512db324f8
parentb689b1f6ee1a6900259f0b1f7de15723125d58a3 (diff)
downloadffmpeg-65fb59abd27af8e71f3a76e30f4536a878918fb1.tar.gz
libzvbi-teletextdec: use AVBPrint for whitespace cleanup
Signed-off-by: Marton Balint <cus@passwd.hu>
-rw-r--r--libavcodec/libzvbi-teletextdec.c37
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;
}