From 1c30198bc7d5c026e381ecac8fb4c821e1bd639b Mon Sep 17 00:00:00 2001 From: Christophe Massiot Date: Sun, 9 Feb 2014 16:19:51 +0100 Subject: [PATCH] more ATSC A/52 support --- atsc/a52.h | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/atsc/a52.h b/atsc/a52.h index 17d78d8..be8179b 100644 --- a/atsc/a52.h +++ b/atsc/a52.h @@ -49,6 +49,7 @@ extern "C" #define A52_FSCOD_441KHZ 1 #define A52_FSCOD_32KHZ 2 #define A52_FSCOD_RESERVED 3 +#define A52_FRAME_SAMPLES 1536 /***************************************************************************** * A/52 syncinfo (A/52:2012 Table 5.1) @@ -57,6 +58,7 @@ extern "C" * - fscod 2 * - frmsizecod 6 *****************************************************************************/ +#define A52_SYNCINFO_SIZE 5 /* A/52 Frame Size Code Table (A/52:2012 Table 5.18) */ static const uint16_t a52_frame_size_code_tab[38][3] = { @@ -176,6 +178,12 @@ static inline uint16_t a52_get_frame_size(uint8_t i_fscod, uint8_t i_frmsizecod) return a52_frame_size_code_tab[i_frmsizecod][i_fscod] * 2; } +static inline bool a52_sync_compare_formats(const uint8_t *p_a521, const uint8_t *p_a522) +{ + return p_a521[0] == p_a522[0] && p_a521[1] == p_a522[1] && + p_a521[4] == p_a522[1]; +} + /***************************************************************************** * A/52 bsi (Bit Stream Information) *****************************************************************************/ @@ -227,6 +235,11 @@ static inline void a52_set_cmixlev(uint8_t *p_a52, uint8_t i_cmixlev) /***************************************************************************** * A/52 Annex E *****************************************************************************/ +#define A52E_FSCOD2_24KHZ 0 +#define A52E_FSCOD2_2205KHZ 1 +#define A52E_FSCOD2_16KHZ 2 +#define A52E_FSCOD2_RESERVED 3 + static inline uint8_t a52e_get_strmtyp(const uint8_t *p_a52) { return (p_a52[2] & 0xc0) >> 5; @@ -277,6 +290,22 @@ static inline void a52e_set_fscod(uint8_t *p_a52, uint8_t i_fscod) p_a52[4] |= (i_fscod & 0x3) << 6; } +static inline uint8_t a52e_get_fscod2(const uint8_t *p_a52) +{ + return (p_a52[4] & 0x30) >> 4; +} + +static inline void a52e_set_fscod2(uint8_t *p_a52, uint8_t i_fscod) +{ + p_a52[4] &= ~0x30; + p_a52[4] |= (i_fscod & 0x3) << 4; +} + +static inline bool a52e_sync_compare_formats(const uint8_t *p_a521, const uint8_t *p_a522) +{ + return !memcmp(p_a521, p_a522, A52_SYNCINFO_SIZE); +} + #ifdef __cplusplus } #endif