Andreas Rheinhardt: > Up until now, the microdvd demuxer uses av_strdup() to allocate the > extradata from a string; its length is set to strlen() + 1, i.e. > including the \0 at the end. Upon remuxing, the muxer would simply copy > the extradata at the beginning, including the \0. > > This commit changes this by not adding the \0 to the size of the > extradata; the muxer now delimits extradata by inserting a \n. This > required to change the subtitles-microdvd-remux FATE-test. > > Furthermore, the extradata is now allocated with zeroed padding. > > The microdvd decoder is not affected by this, as it didn't use the size > of the extradata at all, but treated it as a C-string. > > Signed-off-by: Andreas Rheinhardt <andreas.rheinha...@gmail.com> > --- > libavformat/microdvddec.c | 9 +++++---- > libavformat/microdvdenc.c | 1 + > tests/ref/fate/sub-microdvd-remux | Bin 416 -> 416 bytes > 3 files changed, 6 insertions(+), 4 deletions(-) > > diff --git a/libavformat/microdvddec.c b/libavformat/microdvddec.c > index ca9086afe9..08e6fca09c 100644 > --- a/libavformat/microdvddec.c > +++ b/libavformat/microdvddec.c > @@ -117,10 +117,11 @@ static int microdvd_read_header(AVFormatContext *s) > continue; > } > if (!st->codecpar->extradata && sscanf(line, "{DEFAULT}{}%c", > &c) == 1) { > - st->codecpar->extradata = av_strdup(line + 11); > - if (!st->codecpar->extradata) > - return AVERROR(ENOMEM); > - st->codecpar->extradata_size = > strlen(st->codecpar->extradata) + 1; > + int ret, size = strlen(line + 11); > + ret = ff_alloc_extradata(st->codecpar, size); > + if (ret < 0) > + return ret; > + memcpy(st->codecpar->extradata, line + 11, size); > continue; > } > } > diff --git a/libavformat/microdvdenc.c b/libavformat/microdvdenc.c > index 04f475b645..6639651e02 100644 > --- a/libavformat/microdvdenc.c > +++ b/libavformat/microdvdenc.c > @@ -36,6 +36,7 @@ static int microdvd_write_header(struct AVFormatContext *s) > if (par->extradata && par->extradata_size > 0) { > avio_write(s->pb, "{DEFAULT}{}", 11); > avio_write(s->pb, par->extradata, par->extradata_size); > + avio_w8(s->pb, '\n'); > avio_flush(s->pb); > } > > diff --git a/tests/ref/fate/sub-microdvd-remux > b/tests/ref/fate/sub-microdvd-remux > index > a71da99031fdc4bff13ea7124c046e761a650dc8..92ff233f56b6fec33d4e9e0698ec43377ea5fab7 > 100644 > GIT binary patch > delta 12 > TcmZ3$ynuOvE+f}Qy&^^c7%l^0 > > delta 12 > TcmZ3$ynuOvE+fN6y&^^c7yJWP > Ping.
- Andreas _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".