On 16/02/16 22:26, Vittorio Giovara wrote:
> 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.
> 

Then I guess is fine your way.

lu
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to