[FFmpeg-devel] [PATCH v2 8/9] lavc/ccaption_dec: implement positioning for closed captions
Aman Gupta
ffmpeg at tmm1.net
Wed Jan 13 02:42:59 CET 2016
From: Aman Gupta <aman at tmm1.net>
Positioning math is based on the guidelines in
https://dvcs.w3.org/hg/text-tracks/raw-file/default/608toVTT/608toVTT.html#positioning-in-cea-608
---
libavcodec/ccaption_dec.c | 29 +++++++++++++++++++++++++----
1 file changed, 25 insertions(+), 4 deletions(-)
diff --git a/libavcodec/ccaption_dec.c b/libavcodec/ccaption_dec.c
index 1c8a0d0..4ec063e 100644
--- a/libavcodec/ccaption_dec.c
+++ b/libavcodec/ccaption_dec.c
@@ -316,7 +316,7 @@ static void roll_up(CCaptionSubContext *ctx)
static int capture_screen(CCaptionSubContext *ctx)
{
- int i;
+ int i, j, tab = 0;
struct Screen *screen = ctx->screen + ctx->active_screen;
enum cc_font prev_font = CCFONT_REGULAR;
av_bprint_clear(&ctx->buffer);
@@ -325,13 +325,30 @@ static int capture_screen(CCaptionSubContext *ctx)
{
if (CHECK_FLAG(screen->row_used, i)) {
const char *row = screen->characters[i];
+ j = 0;
+ while (row[j] == ' ')
+ j++;
+ if (!tab || j < tab)
+ tab = j;
+ }
+ }
+
+ for (i = 0; screen->row_used && i < SCREEN_ROWS; i++)
+ {
+ if (CHECK_FLAG(screen->row_used, i)) {
+ const char *row = screen->characters[i];
const char *font = screen->fonts[i];
- int j = 0;
+ int x, y, seen_char = 0;
+ j = 0;
/* skip leading space */
- while (row[j] == ' ')
+ while (row[j] == ' ' && j < tab)
j++;
+ x = ASS_DEFAULT_PLAYRESX * (0.1 + 0.0250 * j);
+ y = ASS_DEFAULT_PLAYRESY * (0.1 + 0.0533 * i);
+ av_bprintf(&ctx->buffer, "{\\an7}{\\pos(%d,%d)}", x, y);
+
for (; j < SCREEN_COLUMNS; j++) {
const char *e_tag = "", *s_tag = "";
@@ -365,8 +382,12 @@ static int capture_screen(CCaptionSubContext *ctx)
prev_font = font[j];
if (row[j] == 1)
av_bprintf(&ctx->buffer, "%s%s\u266A", e_tag, s_tag);
- else
+ else if (row[j] == ' ' && !seen_char)
+ av_bprintf(&ctx->buffer, "%s%s\\h", e_tag, s_tag);
+ else {
av_bprintf(&ctx->buffer, "%s%s%c", e_tag, s_tag, row[j]);
+ seen_char = 1;
+ }
}
av_bprintf(&ctx->buffer, "\\N");
--
2.5.3
More information about the ffmpeg-devel
mailing list