On Tue, Feb 16, 2016 at 2:19 AM, Luca Barbato <[email protected]> wrote:
> On 16/02/16 03:44, Vittorio Giovara wrote:
>> Samples produced by Omneon (Harmonic) store external references with
>> paths ending with 0s. Such movs cannot be loaded properly since every
>> 0 is converted to '/', to keep the same parsing code for dref type 2
>> and type 18: this makes the external reference point to a non-existing
>> direactory, rather than to the actual referenced file.
>>
>> Add a brief trimming loop that drops all ending 0s before trying to
>> parse the external reference path.
>>
>> Signed-off-by: Vittorio Giovara <[email protected]>
>> ---
>> Note: all samples I was given only have one zero appended, so it might
>> be enough to just do something like
>>
>> -if (dref->path[j] == ':' || dref->path[j] == 0)
>> +if (dref->path[j] == ':' || (dref->path[j] == 0 && j < len -1))
>>
>> the loop seems safer but potentially wasteful.
>> Opinions?
>> Vittorio
>>
>>  libavformat/mov.c | 7 +++++++
>>  1 file changed, 7 insertions(+)
>>
>> diff --git a/libavformat/mov.c b/libavformat/mov.c
>> index 1cb91b9..7081ead 100644
>> --- a/libavformat/mov.c
>> +++ b/libavformat/mov.c
>> @@ -554,6 +554,13 @@ static int mov_read_dref(MOVContext *c, AVIOContext 
>> *pb, MOVAtom atom)
>>                          memmove(dref->path, dref->path+volume_len, len);
>>                          dref->path[len] = 0;
>>                      }
>> +                    // trim string of any ending zeros
>> +                    for (j = len - 1; j >= 0; j--) {
>> +                        if (dref->path[j] == 0)
>> +                            len--;
>> +                        else
>> +                            break;
>> +                    }
>>                      for (j = 0; j < len; j++)
>>                          if (dref->path[j] == ':' || dref->path[j] == 0)
>>                              dref->path[j] = '/';
>>
>
> breaking the other loop in the presence of 0 isn't an option?

No because for dref type 18 uses 0 instead of / for setting absolute path
I think this software is adding the null terminator even though it's
not strictly required, so it might be enough to just opt for the other
alternative I proposed.
-- 
Vittorio
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to