ROHC compression/decompression library
Enumerations | Functions
sdvl.c File Reference

Self-Describing Variable-Length (SDVL) encoding. More...

#include "sdvl.h"
#include "rohc_bit_ops.h"
#include <assert.h>
Include dependency graph for sdvl.c:

Enumerations

enum  rohc_sdvl_max_value_t { ROHC_SDVL_MAX_VALUE_IN_1_BYTE = ((1 << ROHC_SDVL_MAX_BITS_IN_1_BYTE) - 1), ROHC_SDVL_MAX_VALUE_IN_2_BYTES = ((1 << ROHC_SDVL_MAX_BITS_IN_2_BYTES) - 1), ROHC_SDVL_MAX_VALUE_IN_3_BYTES = ((1 << ROHC_SDVL_MAX_BITS_IN_3_BYTES) - 1), ROHC_SDVL_MAX_VALUE_IN_4_BYTES = ((1 << ROHC_SDVL_MAX_BITS_IN_4_BYTES) - 1) }

Functions

bool sdvl_can_value_be_encoded (uint32_t value)
 Can the given value be encoded with SDVL?
bool sdvl_can_length_be_encoded (size_t bits_nr)
 Is the given length (in bits) compatible with SDVL?
size_t sdvl_get_min_len (const size_t nr_min_required, const size_t nr_encoded)
 Find out how many SDVL bits are needed to represent a value.
size_t c_bytesSdvl (uint32_t value, size_t length)
 Find out how many bytes are needed to represent the value using Self-Describing Variable-Length (SDVL) encoding.
int c_encodeSdvl (unsigned char *dest, uint32_t value, size_t length)
 Encode a value using Self-Describing Variable-Length (SDVL) encoding.
int d_sdvalue_size (const unsigned char *data)
 Find out a size of the Self-Describing Variable-Length (SDVL) value.
size_t sdvl_decode (const unsigned char *data, const size_t length, uint32_t *const value, size_t *const bits_nr)
 Decode a Self-Describing Variable-Length (SDVL) value.

Detailed Description

Self-Describing Variable-Length (SDVL) encoding.

Author:
Didier Barvaux <didier.barvaux@toulouse.viveris.com>
Didier Barvaux <didier@barvaux.org>
The hackers from ROHC for Linux

Enumeration Type Documentation

The maximum values that can be SDVL-encoded in 1, 2, 3 and 4 bytes

Enumerator:
ROHC_SDVL_MAX_VALUE_IN_1_BYTE 

Maximum value in 1 SDVL-encoded byte

ROHC_SDVL_MAX_VALUE_IN_2_BYTES 

Maximum value in 2 SDVL-encoded byte

ROHC_SDVL_MAX_VALUE_IN_3_BYTES 

Maximum value in 3 SDVL-encoded byte

ROHC_SDVL_MAX_VALUE_IN_4_BYTES 

Maximum value in 4 SDVL-encoded byte


Function Documentation

size_t c_bytesSdvl ( uint32_t  value,
size_t  length 
)

Find out how many bytes are needed to represent the value using Self-Describing Variable-Length (SDVL) encoding.

See 4.5.6 in the RFC 3095 for details about SDVL encoding.

Parameters:
valueThe value to encode
lengthThe length of the value to encode (0 to let the SDVL encoding find the length itself)
Returns:
The size needed to represent the SDVL-encoded value

References ROHC_SDVL_MAX_BITS_IN_1_BYTE, ROHC_SDVL_MAX_BITS_IN_2_BYTES, ROHC_SDVL_MAX_BITS_IN_3_BYTES, ROHC_SDVL_MAX_BITS_IN_4_BYTES, ROHC_SDVL_MAX_VALUE_IN_1_BYTE, ROHC_SDVL_MAX_VALUE_IN_2_BYTES, ROHC_SDVL_MAX_VALUE_IN_3_BYTES, and ROHC_SDVL_MAX_VALUE_IN_4_BYTES.

Referenced by c_encodeSdvl(), code_cid_values(), code_EXT3_packet(), f_append_cid(), and rtp_header_flags_and_fields().

int c_encodeSdvl ( unsigned char *  dest,
uint32_t  value,
size_t  length 
)

Encode a value using Self-Describing Variable-Length (SDVL) encoding.

See 4.5.6 in the RFC 3095 for details about SDVL encoding.

Parameters:
destThe destination to write the SDVL-encoded to
valueThe value to encode
lengthThe length of the value to encode (0 to let the SDVL encoding find the length itself)
Returns:
1 if SDVL encoding is successful, 0 in case of failure (failure may be due to a value greater than 2^29)

References c_bytesSdvl().

Referenced by code_cid_values(), code_EXT3_packet(), f_append_cid(), and rtp_header_flags_and_fields().

int d_sdvalue_size ( const unsigned char *  data)

Find out a size of the Self-Describing Variable-Length (SDVL) value.

See 4.5.6 in the RFC 3095 for details about SDVL encoding.

Parameters:
dataThe SDVL data to analyze
Returns:
The size of the SDVL value (possible values are 1-4)

References GET_BIT_5_7, GET_BIT_6_7, and GET_BIT_7.

bool sdvl_can_length_be_encoded ( size_t  bits_nr)

Is the given length (in bits) compatible with SDVL?

See 4.5.6 in the RFC 3095 for details about SDVL encoding.

Parameters:
bits_nrThe length (in bits) of the value to encode
Returns:
Whether the value can be encoded with SDVL or not

References ROHC_SDVL_MAX_BITS_IN_4_BYTES.

bool sdvl_can_value_be_encoded ( uint32_t  value)

Can the given value be encoded with SDVL?

See 4.5.6 in the RFC 3095 for details about SDVL encoding.

Parameters:
valueThe value to encode
Returns:
Whether the value can be encoded with SDVL or not

References ROHC_SDVL_MAX_VALUE_IN_4_BYTES.

Referenced by c_add_ts().

size_t sdvl_decode ( const unsigned char *  data,
const size_t  length,
uint32_t *const  value,
size_t *const  bits_nr 
)

Decode a Self-Describing Variable-Length (SDVL) value.

See 4.5.6 in the RFC 3095 for details about SDVL encoding.

Parameters:
dataThe SDVL data to decode
lengthThe maximum data length available (in bytes)
valueOUT: The decoded value
bits_nrOUT: The number of useful bits
Returns:
The number of bytes used by the SDVL field

References GET_BIT_0_4, GET_BIT_0_5, GET_BIT_0_6, GET_BIT_0_7, GET_BIT_5_7, GET_BIT_6_7, GET_BIT_7, ROHC_SDVL_MAX_BITS_IN_1_BYTE, ROHC_SDVL_MAX_BITS_IN_2_BYTES, ROHC_SDVL_MAX_BITS_IN_3_BYTES, and ROHC_SDVL_MAX_BITS_IN_4_BYTES.

Referenced by c_deliver_feedback().

size_t sdvl_get_min_len ( const size_t  nr_min_required,
const size_t  nr_encoded 
)

Find out how many SDVL bits are needed to represent a value.

The number of bits already encoded in another field may be specified.

See 4.5.6 in the RFC 3095 for details about SDVL encoding.

Parameters:
nr_min_requiredThe minimum required number of bits to encode
nr_encodedThe number of bits already encoded in another field
Returns:
The number of bits needed to encode the value

References ROHC_SDVL_MAX_BITS_IN_1_BYTE, ROHC_SDVL_MAX_BITS_IN_2_BYTES, ROHC_SDVL_MAX_BITS_IN_3_BYTES, and ROHC_SDVL_MAX_BITS_IN_4_BYTES.

Referenced by code_UOR2_ID_bytes(), code_UOR2_RTP_bytes(), and code_UOR2_TS_bytes().