Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(914)

Side by Side Diff: third_party/libwebp/enc/histogram.c

Issue 2584033003: libwebp-0.5.2-rc2 (Closed)
Patch Set: layout tests Created 3 years, 12 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2012 Google Inc. All Rights Reserved. 1 // Copyright 2012 Google Inc. All Rights Reserved.
2 // 2 //
3 // Use of this source code is governed by a BSD-style license 3 // Use of this source code is governed by a BSD-style license
4 // that can be found in the COPYING file in the root of the source 4 // that can be found in the COPYING file in the root of the source
5 // tree. An additional intellectual property rights grant can be found 5 // tree. An additional intellectual property rights grant can be found
6 // in the file PATENTS. All contributing project authors may 6 // in the file PATENTS. All contributing project authors may
7 // be found in the AUTHORS file in the root of the source tree. 7 // be found in the AUTHORS file in the root of the source tree.
8 // ----------------------------------------------------------------------------- 8 // -----------------------------------------------------------------------------
9 // 9 //
10 // Author: Jyrki Alakuijala (jyrki@google.com) 10 // Author: Jyrki Alakuijala (jyrki@google.com)
(...skipping 574 matching lines...) Expand 10 before | Expand all | Expand 10 after
585 // max_index^2 for the queue size is safe. If you look at 585 // max_index^2 for the queue size is safe. If you look at
586 // HistogramCombineGreedy, and imagine that UpdateQueueFront always pushes 586 // HistogramCombineGreedy, and imagine that UpdateQueueFront always pushes
587 // data to the queue, you insert at most: 587 // data to the queue, you insert at most:
588 // - max_index*(max_index-1)/2 (the first two for loops) 588 // - max_index*(max_index-1)/2 (the first two for loops)
589 // - max_index - 1 in the last for loop at the first iteration of the while 589 // - max_index - 1 in the last for loop at the first iteration of the while
590 // loop, max_index - 2 at the second iteration ... therefore 590 // loop, max_index - 2 at the second iteration ... therefore
591 // max_index*(max_index-1)/2 overall too 591 // max_index*(max_index-1)/2 overall too
592 histo_queue->max_size = max_index * max_index; 592 histo_queue->max_size = max_index * max_index;
593 // We allocate max_size + 1 because the last element at index "size" is 593 // We allocate max_size + 1 because the last element at index "size" is
594 // used as temporary data (and it could be up to max_size). 594 // used as temporary data (and it could be up to max_size).
595 histo_queue->queue = WebPSafeMalloc(histo_queue->max_size + 1, 595 histo_queue->queue = (HistogramPair*)WebPSafeMalloc(
596 sizeof(*histo_queue->queue)); 596 histo_queue->max_size + 1, sizeof(*histo_queue->queue));
597 return histo_queue->queue != NULL; 597 return histo_queue->queue != NULL;
598 } 598 }
599 599
600 static void HistoQueueClear(HistoQueue* const histo_queue) { 600 static void HistoQueueClear(HistoQueue* const histo_queue) {
601 assert(histo_queue != NULL); 601 assert(histo_queue != NULL);
602 WebPSafeFree(histo_queue->queue); 602 WebPSafeFree(histo_queue->queue);
603 } 603 }
604 604
605 static void SwapHistogramPairs(HistogramPair *p1, 605 static void SwapHistogramPairs(HistogramPair *p1,
606 HistogramPair *p2) { 606 HistogramPair *p2) {
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
652 } 652 }
653 653
654 // Combines histograms by continuously choosing the one with the highest cost 654 // Combines histograms by continuously choosing the one with the highest cost
655 // reduction. 655 // reduction.
656 static int HistogramCombineGreedy(VP8LHistogramSet* const image_histo) { 656 static int HistogramCombineGreedy(VP8LHistogramSet* const image_histo) {
657 int ok = 0; 657 int ok = 0;
658 int image_histo_size = image_histo->size; 658 int image_histo_size = image_histo->size;
659 int i, j; 659 int i, j;
660 VP8LHistogram** const histograms = image_histo->histograms; 660 VP8LHistogram** const histograms = image_histo->histograms;
661 // Indexes of remaining histograms. 661 // Indexes of remaining histograms.
662 int* const clusters = WebPSafeMalloc(image_histo_size, sizeof(*clusters)); 662 int* const clusters =
663 (int*)WebPSafeMalloc(image_histo_size, sizeof(*clusters));
663 // Priority queue of histogram pairs. 664 // Priority queue of histogram pairs.
664 HistoQueue histo_queue; 665 HistoQueue histo_queue;
665 666
666 if (!HistoQueueInit(&histo_queue, image_histo_size) || clusters == NULL) { 667 if (!HistoQueueInit(&histo_queue, image_histo_size) || clusters == NULL) {
667 goto End; 668 goto End;
668 } 669 }
669 670
670 for (i = 0; i < image_histo_size; ++i) { 671 for (i = 0; i < image_histo_size; ++i) {
671 // Initialize clusters indexes. 672 // Initialize clusters indexes.
672 clusters[i] = i; 673 clusters[i] = i;
(...skipping 255 matching lines...) Expand 10 before | Expand all | Expand 10 after
928 // Find the optimal map from original histograms to the final ones. 929 // Find the optimal map from original histograms to the final ones.
929 HistogramRemap(orig_histo, image_histo, histogram_symbols); 930 HistogramRemap(orig_histo, image_histo, histogram_symbols);
930 931
931 ok = 1; 932 ok = 1;
932 933
933 Error: 934 Error:
934 WebPSafeFree(bin_map); 935 WebPSafeFree(bin_map);
935 VP8LFreeHistogramSet(orig_histo); 936 VP8LFreeHistogramSet(orig_histo);
936 return ok; 937 return ok;
937 } 938 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698