[FFmpeg-devel] [PATCH 2/2] movtextenc.c: Support for Bold, Italic and Underlined styles

Niklesh Lalwani niklesh.lalwani at iitb.ac.in
Thu Jun 18 14:48:43 CEST 2015


Thanks Clement, I'll make the necessary changes.

I guess there shouldn't be any alignment problem here. I have tried to take
care of that.

The AVBPrint buffer is initialized with max size inside
mov_text_encode_init(). So, the length shouldn't be a problem.

Niklesh
On 18-Jun-2015 2:35 PM, "Clément Bœsch" <u at pkh.me> wrote:

> On Wed, Jun 17, 2015 at 08:43:26PM +0530, Niklesh Lalwani wrote:
> > From: Niklesh <niklesh.lalwani at iitb.ac.in>
> >
> > Support for Bold, Italic and Underlined styles. The style information is
> appended into the buffer after the text. Dynarray is used to account for
> multiple style records. Tested on QuickTime OSX and iPhone.
> > Signed-off-by: Niklesh <niklesh.lalwani at iitb.ac.in>
> > ---
> >  libavcodec/movtextenc.c | 165
> ++++++++++++++++++++++++++++++++++++++++++------
> >  1 file changed, 145 insertions(+), 20 deletions(-)
> >
> > diff --git a/libavcodec/movtextenc.c b/libavcodec/movtextenc.c
> > index 1b8f454..56c599d 100644
> > --- a/libavcodec/movtextenc.c
> > +++ b/libavcodec/movtextenc.c
> > @@ -24,14 +24,38 @@
> >  #include "libavutil/avassert.h"
> >  #include "libavutil/avstring.h"
> >  #include "libavutil/intreadwrite.h"
> > +#include "libavutil/mem.h"
> > +#include "libavutil/common.h"
> >  #include "ass_split.h"
> >  #include "ass.h"
> >
>
> > +#define STYLE_FLAG_BOLD         1
> > +#define STYLE_FLAG_ITALIC       2
> > +#define STYLE_FLAG_UNDERLINE    4
>
> #define STYLE_FLAG_BOLD      (1<<0)
> #define STYLE_FLAG_ITALIC    (1<<1)
> #define STYLE_FLAG_UNDERLINE (1<<2)
>
> it's more obvious they are combinable flags that way, and you can see when
> you reach a 8, 16, 32 or whatever boundary.
>
> > +#define STYLE_RECORD_SIZE       12
> > +#define SIZE_ADD                10
> > +
> > +
> > +typedef struct {
> > +    uint16_t style_start;
> > +    uint16_t style_end;
> > +    uint8_t style_flag;
> > +} StyleBox;
> > +
> >  typedef struct {
> >      ASSSplitContext *ass_ctx;
> > -    char buffer[2048];
> > -    char *ptr;
> > -    char *end;
> > +    AVBPrint buffer;
> > +    StyleBox **style_attributes;
> > +    StyleBox *style_attributes_temp;
> > +    int count;
> > +    uint8_t style_box_flag;
> > +    uint32_t tsmb_size;
> > +    uint32_t tsmb_type;
> > +    uint16_t style_entries;
> > +    uint16_t style_fontID;
> > +    uint8_t style_fontsize;
> > +    uint32_t style_color;
> > +    uint16_t text_pos;
> >  } MovTextContext;
> >
> >
> > @@ -79,32 +103,98 @@ static av_cold int
> mov_text_encode_init(AVCodecContext *avctx)
> >      if (!avctx->extradata)
> >          return AVERROR(ENOMEM);
> >
> > +    av_bprint_init(&s->buffer, 0, AV_BPRINT_SIZE_UNLIMITED);
> > +
> >      memcpy(avctx->extradata, text_sample_entry, avctx->extradata_size);
> >
> >      s->ass_ctx = ff_ass_split(avctx->subtitle_header);
> >      return s->ass_ctx ? 0 : AVERROR_INVALIDDATA;
> >  }
> >
> > +static void mov_text_style_cb(void *priv, const char style, int close)
> > +{
> > +    MovTextContext *s = priv;
> > +    if (!close) {
> > +        if (s->style_box_flag == 0) {   //first style entry
> > +
> > +            s->style_attributes_temp = av_malloc(sizeof(StyleBox));
>
> sizeof(*s->style_attributes_temp)
>
> > +            if (!s->style_attributes_temp)
> > +                return AVERROR(ENOMEM);
> > +
> > +            s->style_attributes_temp->style_flag = 0;
>
> > +            s->style_attributes_temp->style_start =
> AV_RB16(&s->text_pos);
>
> there is no risk of alignement constraints that wouldn't be honored here,
> right?
>
> [...]
> > -    if (s->ptr == s->buffer)
> > -        return 0;
> > -
>
> > -    AV_WB16(buf, strlen(s->buffer));
> > +    AV_WB16(buf, s->text_pos);
>
> Any risk of having a len too large? Maybe you should initialize the
> AVBuffer with a max limit size.
>
> [...]
>
> No other comment from me.
>
> --
> Clément B.
>
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at ffmpeg.org
> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>
>


More information about the ffmpeg-devel mailing list