42 memset(
c, 0,
sizeof(*
c));
52static const uint64_t
c1 = UINT64_C(0x87c37b91114253d5);
53static const uint64_t
c2 = UINT64_C(0x4cf5ad432745937f);
55#define ROT(a, b) (((a) << (b)) | ((a) >> (64 - (b))))
75static inline uint64_t
update_h1(uint64_t k, uint64_t h1, uint64_t h2)
85static inline uint64_t
update_h2(uint64_t k, uint64_t h1, uint64_t h2)
98 uint64_t h1 =
c->h1, h2 =
c->h2;
100 if (
len <= 0)
return;
102 if (
c->state_pos > 0) {
103 while (
c->state_pos < 16) {
104 c->state[
c->state_pos++] = *
src++;
105 if (--
len <= 0)
return;
134static inline uint64_t
fmix(uint64_t k)
137 k *= UINT64_C(0xff51afd7ed558ccd);
139 k *= UINT64_C(0xc4ceb9fe1a85ec53);
146 uint64_t h1 =
c->h1, h2 =
c->h2;
147 memset(
c->state +
c->state_pos, 0,
sizeof(
c->state) -
c->state_pos);
uint8_t ptrdiff_t const uint8_t ptrdiff_t int intptr_t intptr_t int int16_t * dst
AVMurMur3 * av_murmur3_alloc(void)
Allocate an AVMurMur3 hash context.
void av_murmur3_update(AVMurMur3 *c, const uint8_t *src, size_t len)
Update hash context with new data.
void av_murmur3_init(AVMurMur3 *c)
Initialize or reinitialize an AVMurMur3 hash context.
void av_murmur3_init_seeded(AVMurMur3 *c, uint64_t seed)
Initialize or reinitialize an AVMurMur3 hash context with a seed.
void av_murmur3_final(AVMurMur3 *c, uint8_t dst[16])
Finish hashing and output digest value.
Memory handling functions.
static uint64_t get_k2(const uint8_t *src)
static uint64_t get_k1(const uint8_t *src)
static uint64_t fmix(uint64_t k)
static uint64_t update_h1(uint64_t k, uint64_t h1, uint64_t h2)
static uint64_t update_h2(uint64_t k, uint64_t h1, uint64_t h2)
Public header for MurmurHash3 hash function implementation.