1
0
mirror of https://github.com/FFmpeg/FFmpeg.git synced 2025-08-04 22:03:09 +02:00

avcodec/mjpegenc_huffman: Make ff_mjpegenc_huffman_compute_bits() static

Only used here and in a test tool.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
This commit is contained in:
Andreas Rheinhardt
2025-04-02 12:19:45 +02:00
parent a2136d545c
commit 7ad16a4410
3 changed files with 38 additions and 40 deletions

View File

@ -25,6 +25,32 @@
#include "libavutil/qsort.h" #include "libavutil/qsort.h"
#include "mjpegenc_huffman.h" #include "mjpegenc_huffman.h"
/**
* Used to assign a occurrence count or "probability" to an input value
*/
typedef struct PTable {
int value; ///< input value
int prob; ///< number of occurences of this value in input
} PTable;
/**
* Used to store intermediate lists in the package merge algorithm
*/
typedef struct PackageMergerList {
int nitems; ///< number of items in the list and probability ex. 4
int item_idx[515]; ///< index range for each item in items 0, 2, 5, 9, 13
int probability[514]; ///< probability of each item 3, 8, 18, 46
int items[257 * 16]; ///< chain of all individual values that make up items A, B, A, B, C, A, B, C, D, C, D, D, E
} PackageMergerList;
/**
* Used to store optimal huffman encoding results
*/
typedef struct HuffTable {
int code; ///< code is the input value
int length; ///< length of the encoding
} HuffTable;
/** /**
* Comparison function for two PTables by prob * Comparison function for two PTables by prob
* *
@ -74,7 +100,8 @@ static int compare_by_length(const void *a, const void *b)
* @param size size of the prob_table array * @param size size of the prob_table array
* @param max_length max length of an encoding * @param max_length max length of an encoding
*/ */
void ff_mjpegenc_huffman_compute_bits(PTable *prob_table, HuffTable *distincts, int size, int max_length) static void mjpegenc_huffman_compute_bits(PTable *prob_table, HuffTable *distincts,
int size, int max_length)
{ {
PackageMergerList list_a, list_b, *to = &list_a, *from = &list_b, *temp; PackageMergerList list_a, list_b, *to = &list_a, *from = &list_b, *temp;
@ -178,7 +205,7 @@ void ff_mjpeg_encode_huffman_close(MJpegEncHuffmanContext *s, uint8_t bits[17],
} }
val_counts[j].value = 256; val_counts[j].value = 256;
val_counts[j].prob = 0; val_counts[j].prob = 0;
ff_mjpegenc_huffman_compute_bits(val_counts, distincts, nval + 1, 16); mjpegenc_huffman_compute_bits(val_counts, distincts, nval + 1, 16);
AV_QSORT(distincts, nval, HuffTable, compare_by_length); AV_QSORT(distincts, nval, HuffTable, compare_by_length);
memset(bits, 0, sizeof(bits[0]) * 17); memset(bits, 0, sizeof(bits[0]) * 17);

View File

@ -44,33 +44,4 @@ void ff_mjpeg_encode_huffman_close(MJpegEncHuffmanContext *s,
uint8_t bits[17], uint8_t val[], uint8_t bits[17], uint8_t val[],
int max_nval); int max_nval);
/**
* Used to assign a occurrence count or "probability" to an input value
*/
typedef struct PTable {
int value; ///< input value
int prob; ///< number of occurences of this value in input
} PTable;
/**
* Used to store intermediate lists in the package merge algorithm
*/
typedef struct PackageMergerList {
int nitems; ///< number of items in the list and probability ex. 4
int item_idx[515]; ///< index range for each item in items 0, 2, 5, 9, 13
int probability[514]; ///< probability of each item 3, 8, 18, 46
int items[257 * 16]; ///< chain of all individual values that make up items A, B, A, B, C, A, B, C, D, C, D, D, E
} PackageMergerList;
/**
* Used to store optimal huffman encoding results
*/
typedef struct HuffTable {
int code; ///< code is the input value
int length; ///< length of the encoding
} HuffTable;
void ff_mjpegenc_huffman_compute_bits(PTable *prob_table, HuffTable *distincts,
int size, int max_length);
#endif /* AVCODEC_MJPEGENC_HUFFMAN_H */ #endif /* AVCODEC_MJPEGENC_HUFFMAN_H */

View File

@ -23,12 +23,12 @@
* Optimal Huffman Encoding tests. * Optimal Huffman Encoding tests.
*/ */
#include "libavcodec/avcodec.h" #include <stdio.h>
#include <stdlib.h>
#include "libavcodec/mjpegenc.h" #include "libavutil/avassert.h"
#include "libavcodec/mjpegenc_huffman.h" #include "libavutil/macros.h"
#include "libavcodec/mjpegenc_common.h"
#include "libavcodec/mpegvideo.h" #include "libavcodec/mjpegenc_huffman.c"
// Validate the computed lengths satisfy the JPEG restrictions and is optimal. // Validate the computed lengths satisfy the JPEG restrictions and is optimal.
static int check_lengths(int L, int expected_length, static int check_lengths(int L, int expected_length,
@ -45,7 +45,7 @@ static int check_lengths(int L, int expected_length,
val_counts[i] = (PTable){.value = i, .prob = probs[i]}; val_counts[i] = (PTable){.value = i, .prob = probs[i]};
} }
ff_mjpegenc_huffman_compute_bits(val_counts, lengths, nprobs, L); mjpegenc_huffman_compute_bits(val_counts, lengths, nprobs, L);
for (i = 0; i < nprobs; i++) { for (i = 0; i < nprobs; i++) {
// Find the value's prob and length // Find the value's prob and length
@ -137,8 +137,8 @@ int main(int argc, char **argv)
// Build optimal huffman tree using an internal function, to allow for // Build optimal huffman tree using an internal function, to allow for
// smaller-than-normal test cases. This mutates val_counts by sorting. // smaller-than-normal test cases. This mutates val_counts by sorting.
ff_mjpegenc_huffman_compute_bits(val_counts, distincts, mjpegenc_huffman_compute_bits(val_counts, distincts,
FF_ARRAY_ELEMS(distincts), 3); FF_ARRAY_ELEMS(distincts), 3);
for (i = 0; i < FF_ARRAY_ELEMS(distincts); i++) { for (i = 0; i < FF_ARRAY_ELEMS(distincts); i++) {
if (distincts[i].code != expected[i].code || if (distincts[i].code != expected[i].code ||