summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libavcodec/adpcm.c16
1 files changed, 4 insertions, 12 deletions
diff --git a/libavcodec/adpcm.c b/libavcodec/adpcm.c
index bdcd985949..60adebe8d0 100644
--- a/libavcodec/adpcm.c
+++ b/libavcodec/adpcm.c
@@ -387,18 +387,10 @@ static void adpcm_compress_trellis(AVCodecContext *avctx, const short *samples,
if (heap_pos < frontier) {\
pos = heap_pos++;\
} else {\
- /* Find the largest node in the heap, which is one \
- * of the leaf nodes. */\
- int maxpos = 0;\
- uint32_t max_ssd = 0;\
- for (k = frontier >> 1; k < frontier; k++) {\
- if (nodes_next[k]->ssd > max_ssd) {\
- maxpos = k;\
- max_ssd = nodes_next[k]->ssd;\
- }\
- }\
- pos = maxpos;\
- if (ssd > max_ssd)\
+ /* Try to replace one of the leaf nodes with the new \
+ * one, but try a different slot each time. */\
+ pos = (frontier >> 1) + (heap_pos++ & ((frontier >> 1) - 1));\
+ if (ssd > nodes_next[pos]->ssd)\
goto next_##NAME;\
}\
u = nodes_next[pos];\