- if (packet->type == SR_DF_END) {
- *out = g_string_new("$dumpoff\n$end\n");
- return SR_OK;
- } else if (packet->type != SR_DF_LOGIC)
- return SR_OK;
-
- if (ctx->header) {
- /* The header is still here, this must be the first packet. */
- *out = ctx->header;
- ctx->header = NULL;
- ctx->samplecount = 0;
- } else {
- *out = g_string_sized_new(512);
- }
+ switch (packet->type) {
+ case SR_DF_META:
+ meta = packet->payload;
+ for (l = meta->config; l; l = l->next) {
+ src = l->data;
+ if (src->key != SR_CONF_SAMPLERATE)
+ continue;
+ ctx->samplerate = g_variant_get_uint64(src->data);
+ }
+ break;
+ case SR_DF_LOGIC:
+ logic = packet->payload;
+
+ if (!ctx->header_done) {
+ *out = gen_header(o);
+ ctx->header_done = TRUE;
+ } else {
+ *out = g_string_sized_new(512);
+ }
+
+ if (!ctx->prevsample) {
+ /* Can't allocate this until we know the stream's unitsize. */
+ ctx->prevsample = g_malloc0(logic->unitsize);
+ }