mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
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 <andreas.rheinhardt@gmail.com> Reviewed-by: Paul B Mahol <onemda@gmail.com> Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
This commit is contained in:
parent
b0d0d7e4d0
commit
9bde6c6be0
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
Binary file not shown.
Loading…
Reference in New Issue
Block a user