*last = -1;
lcg_seek(&ws->dither_state, (uint32_t)ts - (uint32_t)ws->cur_ts);
if (ws->pink_need) {
- int64_t pink_ts_cur = (ws->cur_ts + PINK_UNIT - 1) & ~(PINK_UNIT - 1);
- int64_t pink_ts_next = ts & ~(PINK_UNIT - 1);
+ uint64_t pink_ts_cur = (ws->cur_ts + (uint64_t)PINK_UNIT - 1) & ~(PINK_UNIT - 1);
+ uint64_t pink_ts_next = ts & ~(PINK_UNIT - 1);
int pos = ts & (PINK_UNIT - 1);
- lcg_seek(&ws->pink_state, (pink_ts_next - pink_ts_cur) << 1);
+ lcg_seek(&ws->pink_state, (uint32_t)(pink_ts_next - pink_ts_cur) * 2);
if (pos) {
pink_fill(ws);
ws->pink_pos = pos;
edata_end = edata + avc->extradata_size;
ws->nb_inter = AV_RL32(edata);
edata += 4;
- if (ws->nb_inter < 0)
+ if (ws->nb_inter < 0 || (edata_end - edata) / 24 < ws->nb_inter)
return AVERROR(EINVAL);
ws->inter = av_calloc(ws->nb_inter, sizeof(*ws->inter));
if (!ws->inter)
dphi1 = frac64(f1, (int64_t)avc->sample_rate << 16);
dphi2 = frac64(f2, (int64_t)avc->sample_rate << 16);
in->dphi0 = dphi1;
- in->ddphi = (dphi2 - dphi1) / dt;
+ in->ddphi = (int64_t)(dphi2 - (uint64_t)dphi1) / dt;
if (phi & 0x80000000) {
phi &= ~0x80000000;
if (phi >= i)
default:
return AVERROR(EINVAL);
}
- in->amp0 = (int64_t)a1 << 32;
- in->damp = (((int64_t)a2 << 32) - ((int64_t)a1 << 32)) / dt;
+ in->amp0 = (uint64_t)a1 << 32;
+ in->damp = (int64_t)(((uint64_t)a2 << 32) - ((uint64_t)a1 << 32)) / dt;
}
if (edata != edata_end)
return AVERROR(EINVAL);
static void wavesynth_synth_sample(struct wavesynth_context *ws, int64_t ts,
int32_t *channels)
{
- int32_t amp, val, *cv;
+ int32_t amp, *cv;
+ unsigned val;
struct ws_interval *in;
int i, *last, pink;
uint32_t c, all_ch = 0;
in->dphi += in->ddphi;
break;
case WS_NOISE:
- val = amp * pink;
+ val = amp * (unsigned)pink;
break;
default:
val = 0;
all_ch |= in->channels;
for (c = in->channels, cv = channels; c; c >>= 1, cv++)
if (c & 1)
- *cv += val;
+ *cv += (unsigned)val;
}
val = (int32_t)lcg_next(&ws->dither_state) >> 16;
for (c = all_ch, cv = channels; c; c >>= 1, cv++)