1// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#ifndef MEDIA_BASE_DJB2_H_ 6#define MEDIA_BASE_DJB2_H_ 7 8#include "base/basictypes.h" 9#include "media/base/media_export.h" 10 11// DJB2 is a hash algorithm with excellent distribution and speed 12// on many different sets. 13// It has marginally more collisions than FNV1, but makes up for it in 14// performance. 15// The return value is suitable for table lookups. 16// For small fixed sizes (ie a pixel), it has low overhead and inlines well. 17// For large data sets, it optimizes into assembly/simd and is appropriate 18// for realtime applications. 19// See Also: 20// http://www.cse.yorku.ca/~oz/hash.html 21 22static const uint32 kDJB2HashSeed = 5381u; 23 24// These functions perform DJB2 hash. The simplest call is DJB2Hash() to 25// generate the DJB2 hash of the given data: 26// uint32 hash = DJB2Hash(data1, length1, kDJB2HashSeed); 27// 28// You can also compute the DJB2 hash of data incrementally by making multiple 29// calls to DJB2Hash(): 30// uint32 hash_value = kDJB2HashSeed; // Initial seed for DJB2. 31// for (size_t i = 0; i < copy_lines; ++i) { 32// hash_value = DJB2Hash(source, bytes_per_line, hash_value); 33// source += source_stride; 34// } 35 36// For the given buffer of data, compute the DJB2 hash of 37// the data. You can call this any number of times during the computation. 38MEDIA_EXPORT uint32 DJB2Hash(const void* buf, size_t len, uint32 seed); 39 40#endif // MEDIA_BASE_DJB2_H_ 41 42