input/csv: move samplerate meta packet to logic data feed submission
Move the communication of the samplerate meta packet to the very spot where logic sample data gets sent. This allows to optionally determine late the samplerate, potentially from input data instead of user specs.
This commit is contained in:
parent
626c388abf
commit
246aca5f54
|
@ -116,6 +116,7 @@ struct context {
|
||||||
|
|
||||||
/* Current selected samplerate. */
|
/* Current selected samplerate. */
|
||||||
uint64_t samplerate;
|
uint64_t samplerate;
|
||||||
|
gboolean samplerate_sent;
|
||||||
|
|
||||||
/* Number of channels. */
|
/* Number of channels. */
|
||||||
size_t num_channels;
|
size_t num_channels;
|
||||||
|
@ -213,6 +214,9 @@ static int flush_logic_samples(const struct sr_input *in)
|
||||||
{
|
{
|
||||||
struct context *inc;
|
struct context *inc;
|
||||||
struct sr_datafeed_packet packet;
|
struct sr_datafeed_packet packet;
|
||||||
|
struct sr_datafeed_meta meta;
|
||||||
|
struct sr_config *src;
|
||||||
|
uint64_t samplerate;
|
||||||
struct sr_datafeed_logic logic;
|
struct sr_datafeed_logic logic;
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
|
@ -220,6 +224,18 @@ static int flush_logic_samples(const struct sr_input *in)
|
||||||
if (!inc->datafeed_buf_fill)
|
if (!inc->datafeed_buf_fill)
|
||||||
return SR_OK;
|
return SR_OK;
|
||||||
|
|
||||||
|
if (inc->samplerate && !inc->samplerate_sent) {
|
||||||
|
packet.type = SR_DF_META;
|
||||||
|
packet.payload = &meta;
|
||||||
|
samplerate = inc->samplerate;
|
||||||
|
src = sr_config_new(SR_CONF_SAMPLERATE, g_variant_new_uint64(samplerate));
|
||||||
|
meta.config = g_slist_append(NULL, src);
|
||||||
|
sr_session_send(in->sdi, &packet);
|
||||||
|
g_slist_free(meta.config);
|
||||||
|
sr_config_free(src);
|
||||||
|
inc->samplerate_sent = TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
memset(&packet, 0, sizeof(packet));
|
memset(&packet, 0, sizeof(packet));
|
||||||
memset(&logic, 0, sizeof(logic));
|
memset(&logic, 0, sizeof(logic));
|
||||||
packet.type = SR_DF_LOGIC;
|
packet.type = SR_DF_LOGIC;
|
||||||
|
@ -814,12 +830,8 @@ static int initial_receive(const struct sr_input *in)
|
||||||
|
|
||||||
static int process_buffer(struct sr_input *in, gboolean is_eof)
|
static int process_buffer(struct sr_input *in, gboolean is_eof)
|
||||||
{
|
{
|
||||||
struct sr_datafeed_packet packet;
|
|
||||||
struct sr_datafeed_meta meta;
|
|
||||||
struct sr_config *src;
|
|
||||||
struct context *inc;
|
struct context *inc;
|
||||||
gsize num_columns;
|
gsize num_columns;
|
||||||
uint64_t samplerate;
|
|
||||||
size_t max_columns, l;
|
size_t max_columns, l;
|
||||||
int ret;
|
int ret;
|
||||||
char *p, **lines, *line, **columns;
|
char *p, **lines, *line, **columns;
|
||||||
|
@ -827,18 +839,6 @@ static int process_buffer(struct sr_input *in, gboolean is_eof)
|
||||||
inc = in->priv;
|
inc = in->priv;
|
||||||
if (!inc->started) {
|
if (!inc->started) {
|
||||||
std_session_send_df_header(in->sdi);
|
std_session_send_df_header(in->sdi);
|
||||||
|
|
||||||
if (inc->samplerate) {
|
|
||||||
packet.type = SR_DF_META;
|
|
||||||
packet.payload = &meta;
|
|
||||||
samplerate = inc->samplerate;
|
|
||||||
src = sr_config_new(SR_CONF_SAMPLERATE, g_variant_new_uint64(samplerate));
|
|
||||||
meta.config = g_slist_append(NULL, src);
|
|
||||||
sr_session_send(in->sdi, &packet);
|
|
||||||
g_slist_free(meta.config);
|
|
||||||
sr_config_free(src);
|
|
||||||
}
|
|
||||||
|
|
||||||
inc->started = TRUE;
|
inc->started = TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue