diff options
Diffstat (limited to 'src/fig')
-rw-r--r-- | src/fig/FIG0.cpp | 52 |
1 files changed, 31 insertions, 21 deletions
diff --git a/src/fig/FIG0.cpp b/src/fig/FIG0.cpp index 612aa20..677bb9a 100644 --- a/src/fig/FIG0.cpp +++ b/src/fig/FIG0.cpp @@ -32,7 +32,6 @@ //=========== FIG 0/0 =========== - size_t FIG0_0::fill(uint8_t *buf, size_t max_size) { if (max_size < 6) { @@ -58,6 +57,7 @@ size_t FIG0_0::fill(uint8_t *buf, size_t max_size) return 6; } + //=========== FIG 0/1 =========== FIG0_1::FIG0_1(FIGRuntimeInformation *rti) : @@ -69,9 +69,13 @@ FIG0_1::FIG0_1(FIGRuntimeInformation *rti) : size_t FIG0_1::fill(uint8_t *buf, size_t max_size) { size_t remaining = max_size; + if (max_size < 6) { return 0; } + + auto ensemble = m_rti->ensemble; + FIGtype0_1 *figtype0_1; figtype0_1 = (FIGtype0_1*)buf; @@ -86,11 +90,11 @@ size_t FIG0_1::fill(uint8_t *buf, size_t max_size) // Rotate through the subchannels until there is no more // space in the FIG0/1 - if (subchannelFIG0_1 == m_rti->ensemble->subchannels.end()) { - subchannelFIG0_1 = m_rti->ensemble->subchannels.begin(); + if (subchannelFIG0_1 == ensemble->subchannels.end()) { + subchannelFIG0_1 = ensemble->subchannels.begin(); } - for (; subchannelFIG0_1 != m_rti->ensemble->subchannels.end(); + for (; subchannelFIG0_1 != ensemble->subchannels.end(); ++subchannelFIG0_1) { dabProtection* protection = &(*subchannelFIG0_1)->protection; @@ -147,6 +151,7 @@ size_t FIG0_1::fill(uint8_t *buf, size_t max_size) return max_size - remaining; } + //=========== FIG 0/2 =========== FIG0_2::FIG0_2(FIGRuntimeInformation *rti) : @@ -161,22 +166,24 @@ size_t FIG0_2::fill(uint8_t *buf, size_t max_size) int cur = 0; ssize_t remaining = max_size; + auto ensemble = m_rti->ensemble; + // Rotate through the subchannels until there is no more // space - if (serviceFIG0_2 == m_rti->ensemble->services.end()) { - serviceFIG0_2 = m_rti->ensemble->services.begin(); + if (serviceFIG0_2 == ensemble->services.end()) { + serviceFIG0_2 = ensemble->services.begin(); } - for (; serviceFIG0_2 != m_rti->ensemble->services.end(); + for (; serviceFIG0_2 != ensemble->services.end(); ++serviceFIG0_2) { // filter out services which have no components - if ((*serviceFIG0_2)->nbComponent(m_rti->ensemble->components) == 0) { + if ((*serviceFIG0_2)->nbComponent(ensemble->components) == 0) { continue; } // Exclude Fidc type services, TODO why ? - auto type = (*serviceFIG0_2)->getType(m_rti->ensemble); + auto type = (*serviceFIG0_2)->getType(ensemble); if (type == Fidc) { continue; } @@ -198,13 +205,13 @@ size_t FIG0_2::fill(uint8_t *buf, size_t max_size) if (type == Audio and remaining < 3 + 2 * - (*serviceFIG0_2)->nbComponent(m_rti->ensemble->components)) { + (*serviceFIG0_2)->nbComponent(ensemble->components)) { break; } if (type != Audio and remaining < 5 + 2 * - (*serviceFIG0_2)->nbComponent(m_rti->ensemble->components)) { + (*serviceFIG0_2)->nbComponent(ensemble->components)) { break; } @@ -215,7 +222,7 @@ size_t FIG0_2::fill(uint8_t *buf, size_t max_size) fig0_2serviceAudio->Local_flag = 0; fig0_2serviceAudio->CAId = 0; fig0_2serviceAudio->NbServiceComp = - (*serviceFIG0_2)->nbComponent(m_rti->ensemble->components); + (*serviceFIG0_2)->nbComponent(ensemble->components); buf += 3; fig0_2->Length += 3; remaining -= 3; @@ -227,7 +234,7 @@ size_t FIG0_2::fill(uint8_t *buf, size_t max_size) fig0_2serviceData->Local_flag = 0; fig0_2serviceData->CAId = 0; fig0_2serviceData->NbServiceComp = - (*serviceFIG0_2)->nbComponent(m_rti->ensemble->components); + (*serviceFIG0_2)->nbComponent(ensemble->components); buf += 5; fig0_2->Length += 5; remaining -= 5; @@ -235,17 +242,17 @@ size_t FIG0_2::fill(uint8_t *buf, size_t max_size) int curCpnt = 0; for (auto component = getComponent( - m_rti->ensemble->components, (*serviceFIG0_2)->id ); - component != m_rti->ensemble->components.end(); + ensemble->components, (*serviceFIG0_2)->id ); + component != ensemble->components.end(); component = getComponent( - m_rti->ensemble->components, + ensemble->components, (*serviceFIG0_2)->id, component ) ) { auto subchannel = getSubchannel( - m_rti->ensemble->subchannels, (*component)->subchId); + ensemble->subchannels, (*component)->subchId); - if (subchannel == m_rti->ensemble->subchannels.end()) { + if (subchannel == ensemble->subchannels.end()) { etiLog.log(error, "Subchannel %i does not exist for component " "of service %i\n", @@ -304,6 +311,7 @@ size_t FIG0_2::fill(uint8_t *buf, size_t max_size) return max_size - remaining; } + //=========== FIG 0/3 =========== FIG0_3::FIG0_3(FIGRuntimeInformation *rti) : @@ -314,15 +322,16 @@ FIG0_3::FIG0_3(FIGRuntimeInformation *rti) : size_t FIG0_3::fill(uint8_t *buf, size_t max_size) { ssize_t remaining = max_size; + auto ensemble = m_rti->ensemble; FIGtype0_3_header *fig0_3_header = NULL; FIGtype0_3_data *fig0_3_data = NULL; - for (auto& component : m_rti->ensemble->components) { - auto subchannel = getSubchannel(m_rti->ensemble->subchannels, + for (auto& component : ensemble->components) { + auto subchannel = getSubchannel(ensemble->subchannels, component->subchId); - if (subchannel == m_rti->ensemble->subchannels.end()) { + if (subchannel == ensemble->subchannels.end()) { etiLog.log(error, "Subchannel %i does not exist for component " "of service %i\n", @@ -384,6 +393,7 @@ size_t FIG0_3::fill(uint8_t *buf, size_t max_size) return max_size - remaining; } + //=========== FIG 0/17 =========== FIG0_17::FIG0_17(FIGRuntimeInformation *rti) : |