On Sun, 9 Aug 2015 14:50:16 +0530 Niklesh Lalwani <niklesh.lalw...@iitb.ac.in> wrote:
> From: Niklesh <niklesh.lalw...@iitb.ac.in> > > Sets the default style in ASS from the default style information > present in movtext header > > Signed-off-by: Niklesh <niklesh.lalw...@iitb.ac.in> > --- > libavcodec/movtextdec.c | 82 > ++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 78 > insertions(+), 4 deletions(-) > > diff --git a/libavcodec/movtextdec.c b/libavcodec/movtextdec.c > index fc6993e..d5d6567 100644 > --- a/libavcodec/movtextdec.c > +++ b/libavcodec/movtextdec.c > @@ -37,6 +37,27 @@ > #define HLIT_BOX (1<<1) > #define HCLR_BOX (1<<2) > > +#define BOTTOM_LEFT 1 > +#define BOTTOM_CENTER 2 > +#define BOTTOM_RIGHT 3 > +#define MIDDLE_LEFT 4 > +#define MIDDLE_CENTER 5 > +#define MIDDLE_RIGHT 6 > +#define TOP_LEFT 7 > +#define TOP_CENTER 8 > +#define TOP_RIGHT 9 > + > +typedef struct { > + char *font; > + int fontsize; > + int color; > + int back_color; > + int bold; > + int italic; > + int underline; > + int alignment; > +} Movtext_default; > + This name is inconsistent. Use MovTextDefault. > typedef struct { > uint16_t fontID; > char *font; > @@ -66,6 +87,7 @@ typedef struct { > HilightcolorBox c; > FontRecord **ftab; > FontRecord *ftab_temp; > + Movtext_default d; > uint8_t box_flags; > uint16_t style_entries, ftab_entries; > uint64_t tracksize; > @@ -106,6 +128,9 @@ static int mov_text_tx3g(AVCodecContext *avctx, > MovTextContext *m) { > char *tx3g_ptr = avctx->extradata; > int i, box_size, font_length; > + int8_t v_align, h_align; > + int style_fontID; > + StyleBox s_default; > > m->count_f = 0; > m->ftab_entries = 0; > @@ -116,13 +141,52 @@ static int mov_text_tx3g(AVCodecContext *avctx, > MovTextContext *m) // Display Flags > tx3g_ptr += 4; > // Alignment > - tx3g_ptr += 2; > + h_align = *tx3g_ptr++; > + v_align = *tx3g_ptr++; > + if (h_align == 0) { > + if (v_align == 0) > + m->d.alignment = TOP_LEFT; > + if (v_align == 1) > + m->d.alignment = MIDDLE_LEFT; > + if (v_align == -1) > + m->d.alignment = BOTTOM_LEFT; > + } > + if (h_align == 1) { > + if (v_align == 0) > + m->d.alignment = TOP_CENTER; > + if (v_align == 1) > + m->d.alignment = MIDDLE_CENTER; > + if (v_align == -1) > + m->d.alignment = BOTTOM_CENTER; > + } > + if (h_align == -1) { > + if (v_align == 0) > + m->d.alignment = TOP_RIGHT; > + if (v_align == 1) > + m->d.alignment = MIDDLE_RIGHT; > + if (v_align == -1) > + m->d.alignment = BOTTOM_RIGHT; > + } > // Background Color > + memcpy(&m->d.back_color, tx3g_ptr, 3); > tx3g_ptr += 4; > // BoxRecord > tx3g_ptr += 8; > // StyleRecord > - tx3g_ptr += 12; > + tx3g_ptr += 4; > + // fontID > + style_fontID = AV_RB16(tx3g_ptr); > + tx3g_ptr += 2; > + // face-style-flags > + s_default.style_flag = *tx3g_ptr++; > + m->d.bold = s_default.style_flag & STYLE_FLAG_BOLD; > + m->d.italic = s_default.style_flag & STYLE_FLAG_ITALIC; > + m->d.underline = s_default.style_flag & STYLE_FLAG_UNDERLINE; > + // fontsize > + m->d.fontsize = *tx3g_ptr++; > + // Primary color > + memcpy(&m->d.color, tx3g_ptr, 3); > + tx3g_ptr += 4; > // FontRecord > // FontRecord Size > tx3g_ptr += 4; > @@ -169,6 +233,10 @@ static int mov_text_tx3g(AVCodecContext *avctx, > MovTextContext *m) } > tx3g_ptr = tx3g_ptr + font_length; > } > + for (i = 0; i < m->ftab_entries; i++) { > + if (style_fontID == m->ftab[i]->fontID) > + m->d.font = m->ftab[i]->font; > + } > return 0; > } > > @@ -312,9 +380,15 @@ static int mov_text_init(AVCodecContext *avctx) { > * it's very common to find files where the default style is > broken > * and respecting it results in a worse experience than ignoring > it. */ > + int ret; > MovTextContext *m = avctx->priv_data; > - mov_text_tx3g(avctx, m); > - return ff_ass_subtitle_header_default(avctx); > + ret = mov_text_tx3g(avctx, m); > + if (ret == 0) { > + return ff_ass_subtitle_header(avctx, m->d.font, > m->d.fontsize, m->d.color, > + m->d.back_color, m->d.bold, > m->d.italic, > + m->d.underline, m->d.alignment); > + } else > + return ff_ass_subtitle_header_default(avctx); > } > > static int mov_text_decode_frame(AVCodecContext *avctx, --phil _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel