diff --git a/src/modules/module-avb/aecp-aem-descriptors.h b/src/modules/module-avb/aecp-aem-descriptors.h index d98f71aa9..293bc6289 100644 --- a/src/modules/module-avb/aecp-aem-descriptors.h +++ b/src/modules/module-avb/aecp-aem-descriptors.h @@ -94,7 +94,12 @@ struct avb_aem_desc_configuration { struct avb_aem_desc_descriptor_count descriptor_counts[0]; } __attribute__ ((__packed__)); -struct avb_aem_desc_sampling_rate { + +union avb_aem_desc_sampling_rate { + struct { + uint32_t frequency:29; + uint32_t pull:3; + }; uint32_t pull_frequency; } __attribute__ ((__packed__)); @@ -134,10 +139,10 @@ struct avb_aem_desc_audio_unit { uint16_t base_transcoder; uint16_t number_of_control_blocks; uint16_t base_control_block; - uint32_t current_sampling_rate; + union avb_aem_desc_sampling_rate current_sampling_rate; uint16_t sampling_rates_offset; uint16_t sampling_rates_count; - struct avb_aem_desc_sampling_rate sampling_rates[0]; + union avb_aem_desc_sampling_rate sampling_rates[0]; } __attribute__ ((__packed__)); /* IEEE 1722.1-2021, Table 7-28 - AUDIO_CLUSTER format values */ diff --git a/src/modules/module-avb/aecp-aem.h b/src/modules/module-avb/aecp-aem.h index 50b0bb3b5..3ebc532dc 100644 --- a/src/modules/module-avb/aecp-aem.h +++ b/src/modules/module-avb/aecp-aem.h @@ -104,10 +104,18 @@ struct avb_packet_aecp_aem_setget_association_id { uint64_t association_id; } __attribute__ ((__packed__)); +union avb_packet_aecp_aem_pull_frequency { + struct { + uint32_t frequency:29; + uint32_t pull:3; + }; + uint32_t pull_frequency; +}__attribute__ ((__packed__)); + struct avb_packet_aecp_aem_setget_sampling_rate { uint16_t descriptor_type; uint16_t descriptor_id; - uint32_t sampling_rate; + union avb_packet_aecp_aem_pull_frequency sampling_rate; } __attribute__ ((__packed__)); struct avb_packet_aecp_aem_setget_clock_source { diff --git a/src/modules/module-avb/descriptors.c b/src/modules/module-avb/descriptors.c index 57d9315b8..9bd80ea45 100644 --- a/src/modules/module-avb/descriptors.c +++ b/src/modules/module-avb/descriptors.c @@ -94,7 +94,7 @@ static void init_descriptor_legacy_avb(struct server *server) struct { struct avb_aem_desc_audio_unit desc; - struct avb_aem_desc_sampling_rate sampling_rates[6]; + union avb_aem_desc_sampling_rate sampling_rates[6]; } __attribute__ ((__packed__)) audio_unit = { { @@ -133,7 +133,7 @@ static void init_descriptor_legacy_avb(struct server *server) .base_transcoder = htons(0), .number_of_control_blocks = htons(0), .base_control_block = htons(0), - .current_sampling_rate = htonl(48000), + .current_sampling_rate.pull_frequency = htonl(48000), .sampling_rates_offset = htons( 4 + sizeof(struct avb_aem_desc_audio_unit)), .sampling_rates_count = htons(6), @@ -541,7 +541,7 @@ static void init_descriptor_milan_v12(struct server *server) struct { struct avb_aem_desc_audio_unit desc; - struct avb_aem_desc_sampling_rate sampling_rates[DSC_AUDIO_UNIT_SUPPORTED_SAMPLING_RATE_COUNT]; + union avb_aem_desc_sampling_rate sampling_rates[DSC_AUDIO_UNIT_SUPPORTED_SAMPLING_RATE_COUNT]; } __attribute__ ((__packed__)) audio_unit = { { @@ -580,7 +580,7 @@ static void init_descriptor_milan_v12(struct server *server) .base_transcoder = htons(DSC_AUDIO_UNIT_BASE_TRANSCODER), .number_of_control_blocks = htons(DSC_AUDIO_UNIT_NUMBER_OF_CONTROL_BLOCKS), .base_control_block = htons(DSC_AUDIO_UNIT_BASE_CONTROL_BLOCK), - .current_sampling_rate = htonl(DSC_AUDIO_UNIT_CURRENT_SAMPLING_RATE_IN_HZ), + .current_sampling_rate.pull_frequency = htonl(DSC_AUDIO_UNIT_CURRENT_SAMPLING_RATE_IN_HZ), .sampling_rates_offset = htons(DSC_AUDIO_UNIT_SAMPLING_RATES_OFFSET), .sampling_rates_count = htons(DSC_AUDIO_UNIT_SUPPORTED_SAMPLING_RATE_COUNT), },