Andreas Rheinhardt: > 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 > 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".