diff options
| -rw-r--r-- | include/osmocom/core/conv.h | 6 | ||||
| -rw-r--r-- | src/conv.c | 34 | 
2 files changed, 40 insertions, 0 deletions
| diff --git a/include/osmocom/core/conv.h b/include/osmocom/core/conv.h index 159a055b..e76a5c61 100644 --- a/include/osmocom/core/conv.h +++ b/include/osmocom/core/conv.h @@ -71,6 +71,12 @@ struct osmo_conv_code {  }; +/* Common */ + +int osmo_conv_get_input_length(const struct osmo_conv_code *code, int len); +int osmo_conv_get_output_length(const struct osmo_conv_code *code, int len); + +  /* Encoding */  	/* Low level API */ @@ -42,6 +42,40 @@  /* ------------------------------------------------------------------------ */ +/* Common                                                                   */ +/* ------------------------------------------------------------------------ */ + +int +osmo_conv_get_input_length(const struct osmo_conv_code *code, int len) +{ +	return len <= 0 ? code->len : len; +} + +int +osmo_conv_get_output_length(const struct osmo_conv_code *code, int len) +{ +	int pbits, in_len, out_len; + +	/* Input length */ +	in_len = osmo_conv_get_input_length(code, len); + +	/* Output length */ +	out_len = in_len * code->N; + +	if (code->term == CONV_TERM_FLUSH) +		out_len += code->N * (code->K - 1); + +	/* Count punctured bits */ +	if (code->puncture) { +		for (pbits=0; code->puncture[pbits] >= 0; pbits++); +		out_len -= pbits; +	} + +	return out_len; +} + + +/* ------------------------------------------------------------------------ */  /* Encoding                                                                 */  /* ------------------------------------------------------------------------ */ | 
