From: Aman Gupta <a...@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 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel