- if (ctx && event_type == SR_DF_END) {
- g_string_free(ctx->header, TRUE);
- g_free(o->internal);
- o->internal = NULL;
+ 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)
+ ctx->samplerate = g_variant_get_uint64(src->data);
+ }
+ break;
+ case SR_DF_LOGIC:
+ logic = packet->payload;
+ if (ctx->num_samples == 0) {
+ /* First logic packet in the feed. */
+ *out = gen_header(sdi, ctx);
+ } else
+ *out = g_string_sized_new(512);
+ for (i = 0; i <= logic->length - logic->unitsize; i += logic->unitsize) {
+ for (j = 0; j < logic->unitsize; j++) {
+ /* The OLS format wants the samples presented MSB first. */
+ c = *((uint8_t *)logic->data + i + logic->unitsize - 1 - j);
+ g_string_append_printf(*out, "%02x", c);
+ }
+ g_string_append_printf(*out, "@%"PRIu64"\n", ctx->num_samples++);
+ }
+ break;