X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=src%2Foutput%2Fwav.c;h=f991cbfdc68526d9fea8754ad200565b712076a9;hb=44040ea65e7980765775d76af734c2d5fb0f8822;hp=14ef36df185c3b862529be98767dedb214943cd5;hpb=da3d141f04e9a17bd41c5adfb5c83369fe3759df;p=libsigrok.git diff --git a/src/output/wav.c b/src/output/wav.c index 14ef36df..f991cbfd 100644 --- a/src/output/wav.c +++ b/src/output/wav.c @@ -36,6 +36,7 @@ struct out_context { int chanbuf_size; int *chanbuf_used; uint8_t **chanbuf; + float *fdata; }; static int realloc_chanbufs(const struct sr_output *o, int size) @@ -281,7 +282,9 @@ static int receive(const struct sr_output *o, const struct sr_datafeed_packet *p num_samples = analog->num_samples; channels = analog->meaning->channels; num_channels = g_slist_length(analog->meaning->channels); - data = g_malloc(sizeof(float) * num_samples * num_channels); + if (!(data = g_try_realloc(outc->fdata, sizeof(float) * num_samples * num_channels))) + return SR_ERR_MALLOC; + outc->fdata = data; ret = sr_analog_to_float(analog, data); if (ret != SR_OK) return ret; @@ -312,7 +315,7 @@ static int receive(const struct sr_output *o, const struct sr_datafeed_packet *p for (j = 0; j < num_channels; j++) { idx = chan_idx[j]; buf = outc->chanbuf[idx] + outc->chanbuf_used[idx]++ * 4; - f = analog_old->data[i * num_channels + j]; + f = data[i * num_channels + j]; if (outc->scale != 0.0) f /= outc->scale; float_to_le(buf, f); @@ -363,6 +366,7 @@ static int cleanup(struct sr_output *o) g_free(outc->chanbuf[i]); g_free(outc->chanbuf_used); g_free(outc->chanbuf); + g_free(outc->fdata); g_free(outc); o->priv = NULL;