- if (data) {
- memcpy(s->buf[s->bufsel], samples, avctx->frame_size * sizeof(*samples));
- for (i = avctx->frame_size; i < NELLY_SAMPLES; i++) {
- s->buf[s->bufsel][i] = 0;
- }
- s->bufsel = 1 - s->bufsel;
- if (!s->have_saved) {
- s->have_saved = 1;
- return 0;
+ memcpy(s->buf, s->buf + NELLY_SAMPLES, NELLY_BUF_LEN * sizeof(*s->buf));
+ if (frame) {
+ memcpy(s->buf + NELLY_BUF_LEN, frame->data[0],
+ frame->nb_samples * sizeof(*s->buf));
+ if (frame->nb_samples < NELLY_SAMPLES) {
+ memset(s->buf + NELLY_BUF_LEN + frame->nb_samples, 0,
+ (NELLY_SAMPLES - frame->nb_samples) * sizeof(*s->buf));
+ if (frame->nb_samples >= NELLY_BUF_LEN)
+ s->last_frame = 1;