file_hash questions

jb jb at kdenlive.org
Fri Sep 25 09:40:38 BST 2020


On jeudi, 24 septembre 2020 13.50:28 h CEST jb wrote:
> Le 23.09.20 à 23:26, Camille Moulin a écrit :
> > Hi Tom,
> 
> > On 22/09/2020 07:43, amindfv at mailbox.org wrote:
> Hi,
> 
> >> Apologies if this is answered in the docs - a quick search didn't uncover
> >> the answers.> 
> > Generally speaking, the documentation of the file format could be
> > improved :-(
> > 
> >> I'm wondering about the "kdenlive:file_hash" property in the file XML:
> >>    - Which hashing algorithm is used?
> >  
> >  From what I understand, it's seems to be md5, but, for performance
> > 
> > reasons,  it's calculated only on the first and last Mo of the file if
> > the file is bigger than 2Mo
> > 
> > In ./src/bin/projectclip.cpp, starting line 820:
> >>          QFile file(clipUrl());
> >>          if (file.open(QIODevice::ReadOnly)) { // write size and hash
> >> 
> >> only if resource points to a file
> >> 
> >>              /*
> >>               * 1 MB = 1 second per 450 files (or faster)
> >>               * 10 MB = 9 seconds per 450 files (or faster)
> >>               */
> >>              if (file.size() > 2000000) {
> >>                  fileData = file.read(1000000);
> >>                  if (file.seek(file.size() - 1000000)) {
> >>                      fileData.append(file.readAll());
> >>                  }
> >>              } else {
> >>                  fileData = file.readAll();
> >>              }
> >>              file.close();
> >> 
> >> ClipController::setProducerProperty(QStringLiteral("kdenlive:file_size"),
> >> QString::number(file.size()));
> >> 
> >>              fileHash = QCryptographicHash::hash(fileData,
> >> 
> >> QCryptographicHash::Md5);
> >> 
> >>          }
> 
> That's correct.
> 
> >>    - When are the hashes checked? E.g. if I save a kdenlive file, quit,
> >>    then reopen it, will the hashes of the files on disk be checked?> 
> > Yes, I think so
> 
> That's a very good question. In fact the hash not really checked during
> normal usage. It is updated when Kdenlive is running and detects that
> the file was changed or when the user triggers reloading a clip, but
> does not seem to be checked on project opening. Thinking of it, I think
> that if the user changes a clip when Kdenlive is not running, opening
> the project will contain an incorrect hash, leading to possible bugs.
> 
> 
> It would be much safer to check it on each project opening... I will
> investigate and come back to you.

So after some tests, I can confirm that the hash was not checked on project 
opening. As a result, a project could in some circumstances uses a wrong proxy 
clip or be unable to find a clip that had been moved to another location.

This is now fixed in git master and 20.08.x branch, with this commit:
https://invent.kde.org/multimedia/kdenlive/commit/
0430805f0a6ed6121900cb3f1d15766dc7e3f4a1


Thanks.
Jean-Baptiste

> 
> Regards,
> 
> Jean-Baptiste
> 
> >>   Are there other points at which it's checked? Can the user manually
> >>   start a check?> 
> > I guess that if you reload the clip, it will check it and update it if
> > modified.
> > 
> > HTH,
> > 
> > Camille






More information about the kdenlive mailing list