Updated Patch. Thanks,
Niklesh On Mon, May 25, 2015 at 9:10 PM, Philip Langdale <phil...@overt.org> wrote: > On Mon, 25 May 2015 00:37:03 +0530 > Niklesh Lalwani <niklesh.lalw...@iitb.ac.in> wrote: > > > From: Niklesh <niklesh.lalw...@iitb.ac.in> > > > > Signed-off-by: Niklesh <niklesh.lalw...@iitb.ac.in> > > --- > > libavcodec/movtextdec.c | 32 ++++++++++++++++---------------- > > 1 file changed, 16 insertions(+), 16 deletions(-) > > > > diff --git a/libavcodec/movtextdec.c b/libavcodec/movtextdec.c > > index 04e1c8a..11934f9 100644 > > --- a/libavcodec/movtextdec.c > > +++ b/libavcodec/movtextdec.c > > @@ -32,14 +32,13 @@ > > #define STYLE_FLAG_UNDERLINE 4 > > > > static int text_to_ass(AVBPrint *buf, const char *text, const char > > *text_end, > > - int **style_start, int **style_end, > > - int **style_flags, int style_entries) > > + char **style_start, char **style_end, > > + uint8_t **style_flags, int style_entries) > > { > > int i = 0; > > - int style_pos = 0; > > while (text < text_end) { > > for (i = 0; i < style_entries; i++) { > > - if (*style_flags[i] && style_pos == *style_start[i]) { > > + if (*style_flags[i] && text == style_start[i]) { > > if (*style_flags[i] & STYLE_FLAG_BOLD) > > av_bprintf(buf, "{\\b1}"); > > if (*style_flags[i] & STYLE_FLAG_ITALIC) > > @@ -61,7 +60,7 @@ static int text_to_ass(AVBPrint *buf, const char > > *text, const char *text_end, } > > > > for (i = 0; i < style_entries; i++) { > > - if (*style_flags[i] && style_pos == *style_end[i]) { > > + if (*style_flags[i] && text == style_end[i]) { > > if (*style_flags[i] & STYLE_FLAG_BOLD) > > av_bprintf(buf, "{\\b0}"); > > if (*style_flags[i] & STYLE_FLAG_ITALIC) > > @@ -71,7 +70,6 @@ static int text_to_ass(AVBPrint *buf, const char > > *text, const char *text_end, } > > } > > text++; > > - style_pos++; > > } > > > > return 0; > > @@ -98,13 +96,13 @@ static int mov_text_decode_frame(AVCodecContext > > *avctx, //char *ptr_temp; > > int text_length, tsmb_type, style_entries; > > uint64_t tsmb_size, tracksize; > > - int **style_start = {0,}; > > - int **style_end = {0,}; > > - int **style_flags = {0,}; > > + char **style_start = { 0, }; > > + char **style_end = { 0, }; > > + uint8_t **style_flags = { 0, }; > > const uint8_t *tsmb; > > int index, i, size_var; > > - int *flag; > > - int *style_pos; > > + uint8_t *flag; > > + char *style_pos; > > > > if (!ptr || avpkt->size < 2) > > return AVERROR_INVALIDDATA; > > @@ -172,19 +170,17 @@ static int mov_text_decode_frame(AVCodecContext > > *avctx, break; > > > > for(i = 0; i < style_entries; i++) { > > - style_pos = av_malloc(4); > > - *style_pos = AV_RB16(tsmb); > > + style_pos = ptr + AV_RB16(tsmb); > > index = i; > > av_dynarray_add(&style_start, &index, style_pos); > > tsmb += 2; > > - style_pos = av_malloc(4); > > - *style_pos = AV_RB16(tsmb); > > + style_pos = ptr + AV_RB16(tsmb); > > index = i; > > av_dynarray_add(&style_end, &index, style_pos); > > tsmb += 2; > > // fontID = AV_RB16(tsmb); > > tsmb += 2; > > - flag = av_malloc(4); > > + flag = av_malloc(1); > > You need to check for malloc failure and return an error. > > > *flag = AV_RB8(tsmb); > > index = i; > > av_dynarray_add(&style_flags, &index, flag); > > @@ -194,6 +190,10 @@ static int mov_text_decode_frame(AVCodecContext > > *avctx, tsmb += 4; > > } > > text_to_ass(&buf, ptr, end, style_start, style_end, > > style_flags, style_entries); + > > + for(i = 0; i < style_entries; i++) { > > + av_freep(&style_flags[i]); > > + } > > av_freep(&style_start); > > av_freep(&style_end); > > av_freep(&style_flags); > > > > > --phil > _______________________________________________ > ffmpeg-devel mailing list > ffmpeg-devel@ffmpeg.org > http://ffmpeg.org/mailman/listinfo/ffmpeg-devel >
From e0f0972d48f25f09fb850b229a0a23ab688809b5 Mon Sep 17 00:00:00 2001 From: Niklesh <niklesh.lalw...@iitb.ac.in> Date: Mon, 25 May 2015 21:43:34 +0530 Subject: [PATCH] Improve upon dynamic arrays- movtext subtitles Signed-off-by: Niklesh <niklesh.lalw...@iitb.ac.in> --- libavcodec/movtextdec.c | 34 ++++++++++++++++++---------------- 1 file changed, 18 insertions(+), 16 deletions(-) diff --git a/libavcodec/movtextdec.c b/libavcodec/movtextdec.c index 04e1c8a..2ecbc6f 100644 --- a/libavcodec/movtextdec.c +++ b/libavcodec/movtextdec.c @@ -32,14 +32,13 @@ #define STYLE_FLAG_UNDERLINE 4 static int text_to_ass(AVBPrint *buf, const char *text, const char *text_end, - int **style_start, int **style_end, - int **style_flags, int style_entries) + char **style_start, char **style_end, + uint8_t **style_flags, int style_entries) { int i = 0; - int style_pos = 0; while (text < text_end) { for (i = 0; i < style_entries; i++) { - if (*style_flags[i] && style_pos == *style_start[i]) { + if (*style_flags[i] && text == style_start[i]) { if (*style_flags[i] & STYLE_FLAG_BOLD) av_bprintf(buf, "{\\b1}"); if (*style_flags[i] & STYLE_FLAG_ITALIC) @@ -61,7 +60,7 @@ static int text_to_ass(AVBPrint *buf, const char *text, const char *text_end, } for (i = 0; i < style_entries; i++) { - if (*style_flags[i] && style_pos == *style_end[i]) { + if (*style_flags[i] && text == style_end[i]) { if (*style_flags[i] & STYLE_FLAG_BOLD) av_bprintf(buf, "{\\b0}"); if (*style_flags[i] & STYLE_FLAG_ITALIC) @@ -71,7 +70,6 @@ static int text_to_ass(AVBPrint *buf, const char *text, const char *text_end, } } text++; - style_pos++; } return 0; @@ -98,13 +96,13 @@ static int mov_text_decode_frame(AVCodecContext *avctx, //char *ptr_temp; int text_length, tsmb_type, style_entries; uint64_t tsmb_size, tracksize; - int **style_start = {0,}; - int **style_end = {0,}; - int **style_flags = {0,}; + char **style_start = { 0, }; + char **style_end = { 0, }; + uint8_t **style_flags = { 0, }; const uint8_t *tsmb; int index, i, size_var; - int *flag; - int *style_pos; + uint8_t *flag; + char *style_pos; if (!ptr || avpkt->size < 2) return AVERROR_INVALIDDATA; @@ -172,19 +170,19 @@ static int mov_text_decode_frame(AVCodecContext *avctx, break; for(i = 0; i < style_entries; i++) { - style_pos = av_malloc(4); - *style_pos = AV_RB16(tsmb); + style_pos = ptr + AV_RB16(tsmb); index = i; av_dynarray_add(&style_start, &index, style_pos); tsmb += 2; - style_pos = av_malloc(4); - *style_pos = AV_RB16(tsmb); + style_pos = ptr + AV_RB16(tsmb); index = i; av_dynarray_add(&style_end, &index, style_pos); tsmb += 2; // fontID = AV_RB16(tsmb); tsmb += 2; - flag = av_malloc(4); + flag = av_malloc(1); + if (!flag) + return NULL; *flag = AV_RB8(tsmb); index = i; av_dynarray_add(&style_flags, &index, flag); @@ -194,6 +192,10 @@ static int mov_text_decode_frame(AVCodecContext *avctx, tsmb += 4; } text_to_ass(&buf, ptr, end, style_start, style_end, style_flags, style_entries); + + for(i = 0; i < style_entries; i++) { + av_freep(&style_flags[i]); + } av_freep(&style_start); av_freep(&style_end); av_freep(&style_flags); -- 1.9.1
_______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel