public MediaFileDescriptor buildMediaDescriptor(File f) {
   MediaFileDescriptor id = new MediaFileDescriptor();
   int[] data;
   String md5;
   try {
     id.setPath(f.getCanonicalPath());
     id.setMtime(f.lastModified());
     id.setSize(f.length());
     // generate thumbnails only for images, not video
     if (Utils.isValideImageName(f.getName())) {
       MetaDataFinder mdf = new MetaDataFinder(f);
       double[] latLon = mdf.getLatLong();
       if (latLon != null) {
         id.setLat(latLon[0]);
         id.setLon(latLon[1]);
       }
       // bufferize images in memory, read directly from file for others
       ByteArrayInputStream fbi = this.readFileToMemory(f);
       id.setHash(new ImageHash().generateSignature(fbi));
       fbi.reset();
       md5 = generateMD5(fbi);
       id.setMd5Digest(md5);
     } else {
       md5 = generateMD5(f);
       id.setMd5Digest(md5);
     }
   } catch (FileNotFoundException e) {
     e.printStackTrace();
   } catch (IOException e) {
     System.err.println("Error processing  file " + f.getName());
     e.printStackTrace();
   }
   return id;
 }