[FFmpeg-devel] [PATCH 2/3] doc/dict2: Add doc and api change for AVDictionary2
softworkz
ffmpegagent at gmail.com
Sat Apr 12 18:11:57 EEST 2025
From: softworkz <softworkz at hotmail.com>
Signed-off-by: softworkz <softworkz at hotmail.com>
---
doc/APIchanges | 3 +++
doc/dict2.md | 44 ++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 47 insertions(+)
create mode 100644 doc/dict2.md
diff --git a/doc/APIchanges b/doc/APIchanges
index 65bf5a9419..1e0d47083b 100644
--- a/doc/APIchanges
+++ b/doc/APIchanges
@@ -2,6 +2,9 @@ The last version increases of all libraries were on 2025-03-28
API changes, most recent first:
+2025-04-12 - xxxxxxxxxx - lavu 60.02.100 - dict2.h
+ Add AVDictionary2.
+
2025-04-07 - 19e9a203b7 - lavu 60.01.100 - dict.h
Add AV_DICT_DEDUP.
diff --git a/doc/dict2.md b/doc/dict2.md
new file mode 100644
index 0000000000..65147dd4ba
--- /dev/null
+++ b/doc/dict2.md
@@ -0,0 +1,44 @@
+# AVDictionary2 - High Performance Dictionary Implementation
+
+AVDictionary2 is a hash table-based key-value dictionary implementation that provides significant performance improvements over the original AVDictionary implementation.
+
+## Overview
+
+The implementation uses:
+
+- Hash table with chaining for collision resolution
+- Automatic table resizing when load factor exceeds 0.75
+- Optimized key/value storage management
+- Efficient iteration through entries
+
+## Performance
+
+### Time Complexity
+AVDictionary2 offers substantial time complexity improvements:
+
+| Operation | AVDictionary (Linked List) | AVDictionary2 (Hash Table) |
+|-----------|----------------------------|----------------------------|
+| Insert | O(n)* | O(1) avg, O(n) worst |
+| Lookup | O(n) | O(1) avg, O(n) worst |
+| Iteration | O(n) | O(n) |
+
+*Where n is current dictionary size due to duplicate checking
+
+### Memory Characteristics
+
+**Original AVDictionary (dict.c)**
+- 2 allocations per entry (key + value string duplicates)
+- Dynamic array with O(log n) reallocations
+- Total: ~2n + log₂(n) allocations for n entries
+
+**AVDictionary2 (dict2.c)**
+- 3 allocations per entry (struct + key + value duplicates)
+- Hash table with O(log n) bucket table reallocations
+- 2 initial allocations (dict struct + initial table)
+- Total: ~3n + 2 + log₂(n) allocations for n entries
+
+**Key Differences:**
+1. AVDictionary2 has faster O(1) average case operations despite 50% more allocations
+2. Both handle growth with logarithmic reallocations but with different base structures
+3. Real-world benchmarks show dramatic speed improvements outweigh allocation costs
+
--
ffmpeg-codebot
More information about the ffmpeg-devel
mailing list