X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavcodec%2Fwavpackenc.c;h=b856f56e3b4c81f3a5b2b63bd9166cfffa2fdce0;hb=a247ac640df3da573cd661065bf53f37863e2b46;hp=979b92165b2f30617e1d4daf6b80f66769a66c98;hpb=94346ab593f3fc0822f11d3e3f378f9944ad2d40;p=ffmpeg diff --git a/libavcodec/wavpackenc.c b/libavcodec/wavpackenc.c index 979b92165b2..b856f56e3b4 100644 --- a/libavcodec/wavpackenc.c +++ b/libavcodec/wavpackenc.c @@ -529,9 +529,9 @@ static int8_t store_weight(int weight) static int restore_weight(int8_t weight) { - int result; + int result = 8 * weight; - if ((result = (int) weight << 3) > 0) + if (result > 0) result += (result + 64) >> 7; return result; @@ -637,22 +637,16 @@ static void reverse_mono_decorr(struct Decorr *dpp) } } +#define count_bits(av) ((av) ? 32 - ff_clz(av) : 0) + static uint32_t log2sample(uint32_t v, int limit, uint32_t *result) { - uint32_t dbits; + uint32_t dbits = count_bits(v); if ((v += v >> 9) < (1 << 8)) { - dbits = nbits_table[v]; - *result += (dbits << 8) + wp_log2_table[(v << (9 - dbits)) & 0xff]; + *result += (dbits << 8) + ff_wp_log2_table[(v << (9 - dbits)) & 0xff]; } else { - if (v < (1 << 16)) - dbits = nbits_table[v >> 8] + 8; - else if (v < (1 << 24)) - dbits = nbits_table[v >> 16] + 16; - else - dbits = nbits_table[v >> 24] + 24; - - *result += dbits = (dbits << 8) + wp_log2_table[(v >> (dbits - 9)) & 0xff]; + *result += dbits = (dbits << 8) + ff_wp_log2_table[(v >> (dbits - 9)) & 0xff]; if (limit && dbits >= limit) return 1; @@ -1969,14 +1963,6 @@ static int wv_stereo(WavPackEncodeContext *s, return 0; } -#define count_bits(av) ( \ - (av) < (1 << 8) ? nbits_table[av] : \ - ( \ - (av) < (1 << 16) ? nbits_table[(av) >> 8] + 8 : \ - ((av) < (1 << 24) ? nbits_table[(av) >> 16] + 16 : nbits_table[(av) >> 24] + 24) \ - ) \ -) - static void encode_flush(WavPackEncodeContext *s) { WavPackWords *w = &s->w; @@ -2571,7 +2557,7 @@ static int wavpack_encode_block(WavPackEncodeContext *s, ret = wv_mono(s, samples_l, !s->num_terms, 1); } else { for (i = 0; i < nb_samples; i++) - crc += (crc << 3) + (samples_l[i] << 1) + samples_l[i] + samples_r[i]; + crc += (crc << 3) + ((uint32_t)samples_l[i] << 1) + samples_l[i] + samples_r[i]; if (s->num_passes) ret = wv_stereo(s, samples_l, samples_r, !s->num_terms, 1); @@ -2791,7 +2777,7 @@ static int wavpack_encode_block(WavPackEncodeContext *s, } encode_flush(s); flush_put_bits(&s->pb); - data_size = put_bits_count(&s->pb) >> 3; + data_size = put_bytes_output(&s->pb); bytestream2_put_le24(&pb, (data_size + 1) >> 1); bytestream2_skip_p(&pb, data_size); if (data_size & 1) @@ -2805,7 +2791,7 @@ static int wavpack_encode_block(WavPackEncodeContext *s, else pack_int32(s, s->orig_l, s->orig_r, nb_samples); flush_put_bits(&s->pb); - data_size = put_bits_count(&s->pb) >> 3; + data_size = put_bytes_output(&s->pb); bytestream2_put_le24(&pb, (data_size + 5) >> 1); bytestream2_put_le32(&pb, s->crc_x); bytestream2_skip_p(&pb, data_size); @@ -2971,7 +2957,7 @@ static const AVClass wavpack_encoder_class = { .version = LIBAVUTIL_VERSION_INT, }; -AVCodec ff_wavpack_encoder = { +const AVCodec ff_wavpack_encoder = { .name = "wavpack", .long_name = NULL_IF_CONFIG_SMALL("WavPack"), .type = AVMEDIA_TYPE_AUDIO,