- packet.type = SR_DF_ANALOG;
- packet.payload = &analog;
- analog.channels = in->sdi->channels;
- analog.num_samples = chunk_samples;
- analog.mq = 0;
- analog.unit = 0;
- analog.data = fdata;
- sr_session_send(in->sdi, &packet);
+ }
+ inc = in->priv;
+
+ if (!inc->found_data) {
+ /* Skip past size of 'fmt ' chunk. */
+ i = 20 + RL32(in->buf->str + 16);
+ offset = find_data_chunk(in->buf, i);
+ if (offset < 0) {
+ if (in->buf->len > MAX_DATA_CHUNK_OFFSET) {
+ sr_err("Couldn't find data chunk.");
+ return SR_ERR;
+ }
+ }
+ inc->found_data = TRUE;
+ } else
+ offset = 0;
+
+ /* Round off up to the last channels * unitsize boundary. */
+ chunk_samples = (in->buf->len - offset) / inc->num_channels / inc->unitsize;
+ max_chunk_samples = CHUNK_SIZE / inc->num_channels / inc->unitsize;
+ processed = 0;
+ total_samples = chunk_samples;
+ while (processed < total_samples) {
+ if (chunk_samples > max_chunk_samples)
+ num_samples = max_chunk_samples;
+ else
+ num_samples = chunk_samples;
+ send_chunk(in, offset, num_samples);
+ offset += num_samples * inc->unitsize;
+ chunk_samples -= num_samples;
+ processed += num_samples;