From: "Kacper Michajłow" <kasper93@gmail.com> To: ffmpeg-devel@ffmpeg.org Cc: "Kacper Michajłow" <kasper93@gmail.com> Subject: [FFmpeg-devel] [PATCH 3/5] avcodec/sonic: move code closer to use to avoid unused warnings Date: Thu, 17 Jul 2025 01:57:04 +0200 Message-ID: <20250716235707.66547-3-kasper93@gmail.com> (raw) In-Reply-To: <20250716235707.66547-1-kasper93@gmail.com> Put decoding and encoding code into thier respective #if blocks. Signed-off-by: Kacper Michajłow <kasper93@gmail.com> --- libavcodec/sonic.c | 257 +++++++++++++++++++++++---------------------- 1 file changed, 129 insertions(+), 128 deletions(-) diff --git a/libavcodec/sonic.c b/libavcodec/sonic.c index acefbbdbfb..08549aacfe 100644 --- a/libavcodec/sonic.c +++ b/libavcodec/sonic.c @@ -96,134 +96,6 @@ static inline int shift_down(int a,int b) return (a>>b)+(a<0); } -static av_always_inline av_flatten void put_symbol(RangeCoder *c, uint8_t *state, int v, int is_signed, uint64_t rc_stat[256][2], uint64_t rc_stat2[32][2]){ - int i; - -#define put_rac(C,S,B) \ -do{\ - if(rc_stat){\ - rc_stat[*(S)][B]++;\ - rc_stat2[(S)-state][B]++;\ - }\ - put_rac(C,S,B);\ -}while(0) - - if(v){ - const int a= FFABS(v); - const int e= av_log2(a); - put_rac(c, state+0, 0); - if(e<=9){ - for(i=0; i<e; i++){ - put_rac(c, state+1+i, 1); //1..10 - } - put_rac(c, state+1+i, 0); - - for(i=e-1; i>=0; i--){ - put_rac(c, state+22+i, (a>>i)&1); //22..31 - } - - if(is_signed) - put_rac(c, state+11 + e, v < 0); //11..21 - }else{ - for(i=0; i<e; i++){ - put_rac(c, state+1+FFMIN(i,9), 1); //1..10 - } - put_rac(c, state+1+9, 0); - - for(i=e-1; i>=0; i--){ - put_rac(c, state+22+FFMIN(i,9), (a>>i)&1); //22..31 - } - - if(is_signed) - put_rac(c, state+11 + 10, v < 0); //11..21 - } - }else{ - put_rac(c, state+0, 1); - } -#undef put_rac -} - -static inline av_flatten int get_symbol(RangeCoder *c, uint8_t *state, int is_signed){ - if(get_rac(c, state+0)) - return 0; - else{ - int i, e; - unsigned a; - e= 0; - while(get_rac(c, state+1 + FFMIN(e,9))){ //1..10 - e++; - if (e > 31) - return AVERROR_INVALIDDATA; - } - - a= 1; - for(i=e-1; i>=0; i--){ - a += a + get_rac(c, state+22 + FFMIN(i,9)); //22..31 - } - - e= -(is_signed && get_rac(c, state+11 + FFMIN(e, 10))); //11..21 - return (a^e)-e; - } -} - -static inline int intlist_write(RangeCoder *c, uint8_t *state, int *buf, int entries, int base_2_part) -{ - int i; - - for (i = 0; i < entries; i++) - put_symbol(c, state, buf[i], 1, NULL, NULL); - - return 1; -} - -static inline int intlist_read(RangeCoder *c, uint8_t *state, int *buf, int entries, int base_2_part) -{ - int i; - - for (i = 0; i < entries; i++) - buf[i] = get_symbol(c, state, 1); - - return 1; -} - -static void predictor_init_state(int *k, int *state, int order) -{ - int i; - - for (i = order-2; i >= 0; i--) - { - int j, p, x = state[i]; - - for (j = 0, p = i+1; p < order; j++,p++) - { - int tmp = x + shift_down(k[j] * (unsigned)state[p], LATTICE_SHIFT); - state[p] += shift_down(k[j]* (unsigned)x, LATTICE_SHIFT); - x = tmp; - } - } -} - -static int predictor_calc_error(int *k, int *state, int order, int error) -{ - int i, x = error - (unsigned)shift_down(k[order-1] * (unsigned)state[order-1], LATTICE_SHIFT); - - int *k_ptr = &(k[order-2]), - *state_ptr = &(state[order-2]); - for (i = order-2; i >= 0; i--, k_ptr--, state_ptr--) - { - int k_value = *k_ptr, state_value = *state_ptr; - x -= (unsigned)shift_down(k_value * (unsigned)state_value, LATTICE_SHIFT); - state_ptr[1] = state_value + shift_down(k_value * (unsigned)x, LATTICE_SHIFT); - } - - // don't drift too far, to avoid overflows - if (x > (SAMPLE_FACTOR<<16)) x = (SAMPLE_FACTOR<<16); - if (x < -(SAMPLE_FACTOR<<16)) x = -(SAMPLE_FACTOR<<16); - - state[0] = x; - - return x; -} #if CONFIG_SONIC_ENCODER || CONFIG_SONIC_LS_ENCODER // Heavily modified Levinson-Durbin algorithm which @@ -419,6 +291,63 @@ static av_cold int sonic_encode_close(AVCodecContext *avctx) return 0; } +static av_always_inline av_flatten void put_symbol(RangeCoder *c, uint8_t *state, int v, int is_signed, uint64_t rc_stat[256][2], uint64_t rc_stat2[32][2]){ + int i; + +#define put_rac(C,S,B) \ +do{\ + if(rc_stat){\ + rc_stat[*(S)][B]++;\ + rc_stat2[(S)-state][B]++;\ + }\ + put_rac(C,S,B);\ +}while(0) + + if(v){ + const int a= FFABS(v); + const int e= av_log2(a); + put_rac(c, state+0, 0); + if(e<=9){ + for(i=0; i<e; i++){ + put_rac(c, state+1+i, 1); //1..10 + } + put_rac(c, state+1+i, 0); + + for(i=e-1; i>=0; i--){ + put_rac(c, state+22+i, (a>>i)&1); //22..31 + } + + if(is_signed) + put_rac(c, state+11 + e, v < 0); //11..21 + }else{ + for(i=0; i<e; i++){ + put_rac(c, state+1+FFMIN(i,9), 1); //1..10 + } + put_rac(c, state+1+9, 0); + + for(i=e-1; i>=0; i--){ + put_rac(c, state+22+FFMIN(i,9), (a>>i)&1); //22..31 + } + + if(is_signed) + put_rac(c, state+11 + 10, v < 0); //11..21 + } + }else{ + put_rac(c, state+0, 1); + } +#undef put_rac +} + +static inline int intlist_write(RangeCoder *c, uint8_t *state, int *buf, int entries, int base_2_part) +{ + int i; + + for (i = 0; i < entries; i++) + put_symbol(c, state, buf[i], 1, NULL, NULL); + + return 1; +} + static int sonic_encode_frame(AVCodecContext *avctx, AVPacket *avpkt, const AVFrame *frame, int *got_packet_ptr) { @@ -685,6 +614,78 @@ static av_cold int sonic_decode_close(AVCodecContext *avctx) return 0; } +static inline av_flatten int get_symbol(RangeCoder *c, uint8_t *state, int is_signed){ + if(get_rac(c, state+0)) + return 0; + else{ + int i, e; + unsigned a; + e= 0; + while(get_rac(c, state+1 + FFMIN(e,9))){ //1..10 + e++; + if (e > 31) + return AVERROR_INVALIDDATA; + } + + a= 1; + for(i=e-1; i>=0; i--){ + a += a + get_rac(c, state+22 + FFMIN(i,9)); //22..31 + } + + e= -(is_signed && get_rac(c, state+11 + FFMIN(e, 10))); //11..21 + return (a^e)-e; + } +} + +static inline int intlist_read(RangeCoder *c, uint8_t *state, int *buf, int entries, int base_2_part) +{ + int i; + + for (i = 0; i < entries; i++) + buf[i] = get_symbol(c, state, 1); + + return 1; +} + +static void predictor_init_state(int *k, int *state, int order) +{ + int i; + + for (i = order-2; i >= 0; i--) + { + int j, p, x = state[i]; + + for (j = 0, p = i+1; p < order; j++,p++) + { + int tmp = x + shift_down(k[j] * (unsigned)state[p], LATTICE_SHIFT); + state[p] += shift_down(k[j]* (unsigned)x, LATTICE_SHIFT); + x = tmp; + } + } +} + +static int predictor_calc_error(int *k, int *state, int order, int error) +{ + int i, x = error - (unsigned)shift_down(k[order-1] * (unsigned)state[order-1], LATTICE_SHIFT); + + int *k_ptr = &(k[order-2]), + *state_ptr = &(state[order-2]); + for (i = order-2; i >= 0; i--, k_ptr--, state_ptr--) + { + int k_value = *k_ptr, state_value = *state_ptr; + x -= (unsigned)shift_down(k_value * (unsigned)state_value, LATTICE_SHIFT); + state_ptr[1] = state_value + shift_down(k_value * (unsigned)x, LATTICE_SHIFT); + } + + // don't drift too far, to avoid overflows + if (x > (SAMPLE_FACTOR<<16)) x = (SAMPLE_FACTOR<<16); + if (x < -(SAMPLE_FACTOR<<16)) x = -(SAMPLE_FACTOR<<16); + + state[0] = x; + + return x; +} + static int sonic_decode_frame(AVCodecContext *avctx, AVFrame *frame, int *got_frame_ptr, AVPacket *avpkt) { -- 2.50.1 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
next prev parent reply other threads:[~2025-07-16 23:59 UTC|newest] Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top 2025-07-16 23:57 [FFmpeg-devel] [PATCH 1/5] avformat/udp: avoid warning about always false comparision Kacper Michajłow 2025-07-16 23:57 ` [FFmpeg-devel] [PATCH 2/5] avcodec/sonic: remove dead code Kacper Michajłow 2025-07-16 23:57 ` Kacper Michajłow [this message] 2025-07-16 23:57 ` [FFmpeg-devel] [PATCH 4/5] swscale/lut3d: remove unused function Kacper Michajłow 2025-07-16 23:57 ` [FFmpeg-devel] [PATCH 5/5] avfilter/vaf_spectrumsynth: don't use uninitialized variable as scale Kacper Michajłow
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20250716235707.66547-3-kasper93@gmail.com \ --to=kasper93@gmail.com \ --cc=ffmpeg-devel@ffmpeg.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel This inbox may be cloned and mirrored by anyone: git clone --mirror https://master.gitmailbox.com/ffmpegdev/0 ffmpegdev/git/0.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 ffmpegdev ffmpegdev/ https://master.gitmailbox.com/ffmpegdev \ ffmpegdev@gitmailbox.com public-inbox-index ffmpegdev Example config snippet for mirrors. AGPL code for this site: git clone https://public-inbox.org/public-inbox.git