[FFmpeg-devel] [PATCH 1/2] avformat/microdvd: Use \n instead of \0 to end file header
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 --- 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 -- 2.20.1 ___ 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".
Re: [FFmpeg-devel] [PATCH 1/2] avformat/microdvd: Use \n instead of \0 to end file header
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 > --- > 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".
Re: [FFmpeg-devel] [PATCH 1/2] avformat/microdvd: Use \n instead of \0 to end file header
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 >> --- >> 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".
Re: [FFmpeg-devel] [PATCH 1/2] avformat/microdvd: Use \n instead of \0 to end file header
lgtm On 12/27/19, Andreas Rheinhardt wrote: > 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 >>> --- >>> 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". ___ 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".
Re: [FFmpeg-devel] [PATCH 1/2] avformat/microdvd: Use \n instead of \0 to end file header
On Fri, Dec 27, 2019 at 10:44:53AM +0100, Paul B Mahol wrote: > lgtm will apply thx [...] -- Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB It is dangerous to be right in matters on which the established authorities are wrong. -- Voltaire signature.asc Description: PGP signature ___ 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".