FFmpeg
|
#include "libavutil/avassert.h"
#include "libavutil/internal.h"
#include "libavutil/opt.h"
#include "libavutil/qsort.h"
#include "libavutil/intreadwrite.h"
#include "avfilter.h"
#include "internal.h"
Go to the source code of this file.
Data Structures | |
struct | color_ref |
struct | range_box |
struct | hist_node |
struct | PaletteGenContext |
Macros | |
#define | NBITS 5 |
#define | HIST_SIZE (1<<(4*NBITS)) |
#define | OFFSET(x) offsetof(PaletteGenContext, x) |
#define | FLAGS AV_OPT_FLAG_FILTERING_PARAM|AV_OPT_FLAG_VIDEO_PARAM |
#define | DECLARE_CMP_FUNC(name, pos) |
Typedefs | |
typedef int(* | cmp_func) (const void *, const void *) |
Enumerations | |
enum | { STATS_MODE_ALL_FRAMES, STATS_MODE_DIFF_FRAMES, STATS_MODE_SINGLE_FRAMES, NB_STATS_MODE } |
Functions | |
AVFILTER_DEFINE_CLASS (palettegen) | |
static int | query_formats (AVFilterContext *ctx) |
static int | cmp_color (const void *a, const void *b) |
Simple color comparison for sorting the final palette. More... | |
static av_always_inline int | diff (const uint32_t a, const uint32_t b) |
static av_always_inline int | diff_alpha (const uint32_t a, const uint32_t b) |
static int | get_next_box_id_to_split (PaletteGenContext *s) |
Find the next box to split: pick the one with the highest variance. More... | |
static uint32_t | get_avg_color (struct color_ref *const *refs, const struct range_box *box, int use_alpha) |
Get the 32-bit average color for the range of RGB colors enclosed in the specified box. More... | |
static void | split_box (PaletteGenContext *s, struct range_box *box, int n) |
Split given box in two at position n. More... | |
static void | write_palette (AVFilterContext *ctx, AVFrame *out) |
Write the palette into the output frame. More... | |
static struct color_ref ** | load_color_refs (const struct hist_node *hist, int nb_refs) |
Crawl the histogram to get all the defined colors, and create a linear list of them (each color reference entry is a pointer to the value in the histogram/hash table). More... | |
static double | set_colorquant_ratio_meta (AVFrame *out, int nb_out, int nb_in) |
static AVFrame * | get_palette_frame (AVFilterContext *ctx) |
Main function implementing the Median Cut Algorithm defined by Paul Heckbert in Color Image Quantization for Frame Buffer Display (1982) More... | |
static unsigned | color_hash (uint32_t color, int use_alpha) |
Hashing function for the color. More... | |
static int | color_inc (struct hist_node *hist, uint32_t color, int use_alpha) |
Locate the color in the hash table and increment its counter. More... | |
static int | update_histogram_diff (struct hist_node *hist, const AVFrame *f1, const AVFrame *f2, int use_alpha) |
Update histogram when pixels differ from previous frame. More... | |
static int | update_histogram_frame (struct hist_node *hist, const AVFrame *f, int use_alpha) |
Simple histogram of the frame. More... | |
static int | filter_frame (AVFilterLink *inlink, AVFrame *in) |
Update the histogram for each passing frame. More... | |
static int | request_frame (AVFilterLink *outlink) |
Returns only one frame at the end containing the full palette. More... | |
static int | config_output (AVFilterLink *outlink) |
The output is one simple 16x16 squared-pixels palette. More... | |
static int | init (AVFilterContext *ctx) |
static av_cold void | uninit (AVFilterContext *ctx) |
Variables | |
static const AVOption | palettegen_options [] |
static const cmp_func | cmp_funcs [] = {cmp_a, cmp_r, cmp_g, cmp_b} |
static const AVFilterPad | palettegen_inputs [] |
static const AVFilterPad | palettegen_outputs [] |
const AVFilter | ff_vf_palettegen |
Generate one palette for a whole video stream.
Definition in file vf_palettegen.c.
#define NBITS 5 |
Definition at line 61 of file vf_palettegen.c.
#define HIST_SIZE (1<<(4*NBITS)) |
Definition at line 62 of file vf_palettegen.c.
#define OFFSET | ( | x | ) | offsetof(PaletteGenContext, x) |
Definition at line 82 of file vf_palettegen.c.
#define FLAGS AV_OPT_FLAG_FILTERING_PARAM|AV_OPT_FLAG_VIDEO_PARAM |
Definition at line 83 of file vf_palettegen.c.
Definition at line 113 of file vf_palettegen.c.
typedef int(* cmp_func) (const void *, const void *) |
Definition at line 111 of file vf_palettegen.c.
anonymous enum |
Enumerator | |
---|---|
STATS_MODE_ALL_FRAMES | |
STATS_MODE_DIFF_FRAMES | |
STATS_MODE_SINGLE_FRAMES | |
NB_STATS_MODE |
Definition at line 54 of file vf_palettegen.c.
AVFILTER_DEFINE_CLASS | ( | palettegen | ) |
|
static |
Definition at line 98 of file vf_palettegen.c.
|
static |
Simple color comparison for sorting the final palette.
Definition at line 132 of file vf_palettegen.c.
Referenced by get_palette_frame().
|
static |
Definition at line 139 of file vf_palettegen.c.
Referenced by abs_sub_q(), activate(), add_hfyu_median_pred_int16_c(), add_lag_median_prediction(), add_median_pred_c(), add_median_prediction(), adpcm_ct_expand_nibble(), adpcm_decode_frame(), adpcm_ima_alp_compress_sample(), adpcm_ima_alp_expand_nibble(), adpcm_ima_expand_nibble(), adpcm_ima_oki_expand_nibble(), adpcm_ima_qt_compress_sample(), adpcm_ima_qt_expand_nibble(), adpcm_ima_wav_expand_nibble(), adpcm_sbpro_expand_nibble(), aptx_encode_channel(), arith2_get_consumed_bytes(), asf_read_frame_header(), block_angle(), blur(), build_diff_map(), calc_slice_sizes(), cbs_av1_get_relative_dist(), celt_decode_tf_changes(), celt_enc_tf(), celt_quant_fine(), check_add_median_pred(), codebook_sanity_check_for_rate_quarter(), comp_harmonic_coeff(), compare_blocks(), compute_target_delay(), config_filter(), copy_region_enc(), deband_16_c(), deband_8_c(), decode_channel_sf_idx(), decode_channel_wordlen(), decode_dc(), decode_frame(), decode_line_TMPL(), decode_residual(), decode_tones_amplitude(), dering_TMPL(), detect_scene_change(), diff_c(), dnxhd_calc_bits_thread(), dnxhd_encode_dc(), do_chromahold16_slice(), do_chromahold_slice(), do_chromakey_pixel(), do_chromakey_pixel16(), do_colorkey_pixel(), do_hsvkey_pixel(), dpcm_decode_frame(), dpcm_predict(), draw_spatial(), dts_probe(), encode_block(), encode_dc(), encode_high(), encode_line_TMPL(), encode_low(), encode_residual_ch(), encode_scale_factors(), enqueue_packet(), est_alpha_diff(), estimate_pitch(), eval_sse(), exp_quant_coarse(), fbdev_write_packet(), ff_dcaadpcm_subband_analysis(), ff_libwebp_get_frame(), ff_mpeg1_decode_block_intra(), ff_mpeg4_encode_mb(), ff_rate_estimate_qscale(), filter_frame(), find_block_motion(), find_missing_packets(), find_timestamp_in_playlist(), fixed_gain_smooth(), fold(), get_closest_codebook(), get_next_box_id_to_split(), get_pts(), get_relative_dist(), get_scene_score(), get_video_frame(), glyph_cmp(), h263_decode_block(), index_mb(), init_quantized_coeffs_elem0(), inv_predict_11(), IsAlmostEqual(), limitdiff16(), limitdiff8(), ljpeg_encode_bgr(), lsf2lsp(), lsf_decode(), magicyuv_median_pred16(), main(), make_noises(), max_component_diff(), mdec_decode_block_intra(), mf_enca_output_score(), motion_search(), movie_push_frame(), mpeg2_decode_block_intra(), mpeg2_fast_decode_block_intra(), mvi_predict(), no_codebook_bits(), parse_playlist(), parse_tonal(), perform_dc_correction(), pixel_color7_slow(), process_subpacket_9(), put_alpha_diff(), pxr24_uncompress(), rgb2yuv_fsb(), rtp_parse_one_packet(), rv30_weak_loop_filter(), rv40_weak_loop_filter(), sad_hv_bilinear_filter_16width_msa(), sad_hv_bilinear_filter_8width_msa(), select_from_pts_buffer(), silk_stabilize_lsf(), speedhq_init_static_data(), sqrdiff(), svq1_decode_motion_vector(), swap_samplerates_on_filter(), synchronize_audio(), tm2_null_res_block(), truemotion2rt_decode_frame(), update_qscale(), validate_options(), vp8_handle_packet(), wavpack_encode_block(), and wmv2_pred_motion().
|
static |
Definition at line 149 of file vf_palettegen.c.
Referenced by get_next_box_id_to_split().
|
static |
Find the next box to split: pick the one with the highest variance.
Definition at line 163 of file vf_palettegen.c.
Referenced by get_palette_frame().
|
static |
Get the 32-bit average color for the range of RGB colors enclosed in the specified box.
Takes into account the weight of each color.
Definition at line 203 of file vf_palettegen.c.
Referenced by get_palette_frame(), and split_box().
|
static |
Split given box in two at position n.
The original box becomes the left part of the split, and the new index box is the right part.
Definition at line 236 of file vf_palettegen.c.
Referenced by get_palette_frame().
|
static |
Write the palette into the output frame.
Definition at line 256 of file vf_palettegen.c.
Referenced by get_palette_frame().
Crawl the histogram to get all the defined colors, and create a linear list of them (each color reference entry is a pointer to the value in the histogram/hash table).
Definition at line 289 of file vf_palettegen.c.
Referenced by get_palette_frame().
Definition at line 307 of file vf_palettegen.c.
Referenced by get_palette_frame().
|
static |
Main function implementing the Median Cut Algorithm defined by Paul Heckbert in Color Image Quantization for Frame Buffer Display (1982)
Definition at line 320 of file vf_palettegen.c.
Referenced by filter_frame(), and request_frame().
|
inlinestatic |
Hashing function for the color.
It keeps the NBITS least significant bit of each component to make it "random" even if the scene doesn't have much different colors.
Definition at line 430 of file vf_palettegen.c.
Referenced by color_inc().
Locate the color in the hash table and increment its counter.
Definition at line 447 of file vf_palettegen.c.
Referenced by update_histogram_diff(), and update_histogram_frame().
|
static |
Update histogram when pixels differ from previous frame.
Definition at line 474 of file vf_palettegen.c.
Referenced by filter_frame().
|
static |
Simple histogram of the frame.
Definition at line 498 of file vf_palettegen.c.
Referenced by filter_frame().
|
static |
Update the histogram for each passing frame.
No frame will be pushed here.
Definition at line 518 of file vf_palettegen.c.
|
static |
Returns only one frame at the end containing the full palette.
Definition at line 556 of file vf_palettegen.c.
|
static |
The output is one simple 16x16 squared-pixels palette.
Definition at line 575 of file vf_palettegen.c.
|
static |
Definition at line 582 of file vf_palettegen.c.
|
static |
Definition at line 592 of file vf_palettegen.c.
|
static |
Definition at line 84 of file vf_palettegen.c.
|
static |
Definition at line 127 of file vf_palettegen.c.
Referenced by get_palette_frame().
|
static |
Definition at line 603 of file vf_palettegen.c.
|
static |
Definition at line 611 of file vf_palettegen.c.
const AVFilter ff_vf_palettegen |
Definition at line 620 of file vf_palettegen.c.