Re: [FFmpeg-devel] [PATCH 3/5] avcodec/ccaption_dec: implement positioning for closed captions

2016-07-17 Thread Michael Niedermayer
On Tue, Jun 14, 2016 at 11:57:43AM -0700, Aman Gupta wrote:
> From: Aman Gupta 
> 
> 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, 26 insertions(+), 3 deletions(-)

applied

thx

[...]
-- 
Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

Dictatorship naturally arises out of democracy, and the most aggravated
form of tyranny and slavery out of the most extreme liberty. -- Plato


signature.asc
Description: Digital signature
___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel


[FFmpeg-devel] [PATCH 3/5] avcodec/ccaption_dec: implement positioning for closed captions

2016-06-14 Thread Aman Gupta
From: Aman Gupta 

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, 26 insertions(+), 3 deletions(-)

diff --git a/libavcodec/ccaption_dec.c b/libavcodec/ccaption_dec.c
index 0b4a061..16a7959 100644
--- a/libavcodec/ccaption_dec.c
+++ b/libavcodec/ccaption_dec.c
@@ -435,7 +435,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(>buffer);
@@ -444,15 +444,33 @@ static int capture_screen(CCaptionSubContext *ctx)
 {
 if (CHECK_FLAG(screen->row_used, i)) {
 const char *row = screen->characters[i];
+const char *charset = screen->charsets[i];
+j = 0;
+while (row[j] == ' ' && charset[j] == CCSET_BASIC_AMERICAN)
+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];
 const char *charset = screen->charsets[i];
 const char *override;
-int j = 0;
+int x, y, seen_char = 0;
+j = 0;
 
 /* skip leading space */
-while (row[j] == ' ' && charset[j] == CCSET_BASIC_AMERICAN)
+while (row[j] == ' ' && charset[j] == CCSET_BASIC_AMERICAN && j < 
tab)
 j++;
 
+x = ASS_DEFAULT_PLAYRESX * (0.1 + 0.0250 * j);
+y = ASS_DEFAULT_PLAYRESY * (0.1 + 0.0533 * i);
+av_bprintf(>buffer, "{\\an7}{\\pos(%d,%d)}", x, y);
+
 for (; j < SCREEN_COLUMNS; j++) {
 const char *e_tag = "", *s_tag = "";
 
@@ -487,9 +505,14 @@ static int capture_screen(CCaptionSubContext *ctx)
 override = charset_overrides[(int)charset[j]][(int)row[j]];
 if (override) {
 av_bprintf(>buffer, "%s%s%s", e_tag, s_tag, override);
+seen_char = 1;
+} else if (row[j] == ' ' && !seen_char) {
+av_bprintf(>buffer, "%s%s\\h", e_tag, s_tag);
 } else {
 av_bprintf(>buffer, "%s%s%c", e_tag, s_tag, row[j]);
+seen_char = 1;
 }
+
 }
 av_bprintf(>buffer, "\\N");
 }
-- 
2.8.1

___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel