[FFmpeg-devel] [PATCH 1/2] avformat/microdvd: Use \n instead of \0 to end file header

Paul B Mahol onemda at gmail.com
Fri Dec 27 11:44:53 EET 2019


lgtm

On 12/27/19, Andreas Rheinhardt <andreas.rheinhardt at gmail.com> 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 <andreas.rheinhardt at 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 at ffmpeg.org
> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>
> To unsubscribe, visit link above, or email
> ffmpeg-devel-request at ffmpeg.org with subject "unsubscribe".


More information about the ffmpeg-devel mailing list