/*************************************************************************** * Copyright (c) 2008, Broadcom Corporation * All Rights Reserved * Confidential Property of Broadcom Corporation * * THIS SOFTWARE MAY ONLY BE USED SUBJECT TO AN EXECUTED SOFTWARE LICENSE * AGREEMENT BETWEEN THE USER AND BROADCOM. YOU HAVE NO RIGHT TO USE OR * EXPLOIT THIS MATERIAL EXCEPT SUBJECT TO THE TERMS OF SUCH AN AGREEMENT. * * $brcm_Workfile: $ * $brcm_Revision: $ * $brcm_Date: $ * * Module Description: * * Revision History: * * $brcm_Log: $ * ***************************************************************************/ #ifndef SCTE_127_H__ #define SCTE_127_H__ #include "bos.h" #include "genericlist.h" #define SCTE_127_NUM_DATA_BUF 70 /* for amol and gs, 60 for 1 second of data, plus extra buffer for jittering */ /* Data Service Identifier Extersions defines */ #define SCTE_127_DATA_ID 0x99 /* SCTE 127 data id */ #define SCTE_127_DATA_SERVICE_ID_AMOL 0xFE /* AMOL 48/96 */ #define SCTE_127_DATA_SERVICE_ID_NABTS 0xFC /* North American Basic Teletext Specification */ #define SCTE_127_DATA_SERVICE_ID_TVG2X 0xFB #define SCTE_127_DATA_SERVICE_ID_CP 0xF9 /* copy protection */ #define SCTE_127_DATA_SERVICE_ID_VITC 0xF7 /* Vertical Interval Time Code */ /* Data Unit Identifier defines */ #define SCTE_127_DATA_UNIT_ID_AMOL48 0xD0 /* AMOL 48 */ #define SCTE_127_DATA_UNIT_ID_AMOL96 0xD1 /* AMOL 96 */ #define SCTE_127_DATA_UNIT_ID_NABTS 0xD5 #define SCTE_127_DATA_UNIT_ID_TVG2X 0xD6 #define SCTE_127_DATA_UNIT_ID_CP 0xD7 /* copy protection */ #define SCTE_127_DATA_UNIT_ID_VITC 0xD9 #define SCTE_127_DATA_UNIT_ID_AMOL48_LEN 7 #define SCTE_127_DATA_UNIT_ID_AMOL96_LEN 12 #define SCTE_127_DATA_UNIT_ID_NABTS_LEN 35 #define SCTE_127_DATA_UNIT_ID_TVG2X_LEN 5 #define SCTE_127_DATA_UNIT_ID_CP_LEN 2 #define SCTE_127_DATA_UNIT_ID_VITC_LEN 9 typedef struct { LINKS_T links; unsigned char field_parity; unsigned char line_offset; union { unsigned char amol48[6]; /* 41 bits + 7 bits padding (SOM) */ unsigned char amol96[12]; /* 88 bits + 8 bits SOM */ /* enable it only if we support NABTS, to save space */ #ifdef SCTE_127_NABTS unsigned char nabts[33]; /* 264 bits = 33 bytes */ #endif unsigned int tvg2x; /* 32 bits */ unsigned char vitc[8]; /* 64 bits */ unsigned char cp[1]; /* 2 bits cp_data_block, 6 bits reserved */ } u; int data_unit_type; /* data type, contained in the */ int amol_type; /* AMOL TYPE if data_unit_type = AMOL, */ } scte_127_data, *pscte_127_data; #define SCTE_127_DATA_UNIT_FIELD_PARITY(h) (((h) >> 5) & 0x1) #define SCTE_127_DATA_UNIT_LINE_OFFSET(h) ((h) & 0x1f) #define SCTE_127_DATA_NABTS_FRAMING_CODE 0xE7 #define SCTE_127_MAX_FIELD 2 /* even and odd field */ #define SCTE_127_MAX_AMOL_DATA 2 /* 2 lines */ #define SCTE_127_MAX_GS_DATA 5 /* 5 lines */ void scte_bit_swap(unsigned char *pbuf, int size); int scte_pes_data_field(unsigned char *packet, int size, scte_127_data *data, int *unit_type); typedef struct { b_mutex_t mutex; /* mutex for list handling */ LIST_T amol_list[SCTE_127_MAX_FIELD]; /* amol data list */ LIST_T gs_list[SCTE_127_MAX_FIELD]; /* gs data list */ LIST_T free_list; /* free data buffer list */ int amol_count[SCTE_127_MAX_FIELD]; /* amol data count */ int gs_count[SCTE_127_MAX_FIELD]; /* amol data count */ scte_127_data data[SCTE_127_NUM_DATA_BUF]; /* total data buffers used for SCTE 127 */ } scte_127_handle, *pscte_127_handle; pscte_127_handle scte_127_get_handle(void); pscte_127_handle scte_127_init(void); void scte_127_deinit(pscte_127_handle pscte_127); void scte_127_enable(pscte_127_handle pscte_127, int enable); int scte_127_queue_buffer(pscte_127_handle pscte_127, pscte_127_data pdata); int scte_127_queue_data(pscte_127_handle pscte_127, pscte_127_data data); int scte_127_feed_data_buf(pscte_127_handle pscte_127, int parity); int scte_127_pes_data_field_parser(pscte_127_handle pscte_127, unsigned char *pdata_id, int size); int scte_127_reset(pscte_127_handle pscte_127); int scte_127_has_data(pscte_127_handle pscte_127, int parity); #ifdef HAS_VBI int scte_127_queue_buffer_isr(pscte_127_handle pscte_127, pscte_127_data pdata); pscte_127_data scte_127_get_amol_data_buf_isr(pscte_127_handle pscte_127, int parity); bool scte_127_get_amol_data_buf_isr_ex(pscte_127_handle pscte_127, int parity, int *type, unsigned char *amol_data); int scte_127_get_gs_data_buf_isr(pscte_127_handle pscte_127, int parity, int *line_offset, int *gs_count, uint32_t *gs_data); int scte_127_set_gs_line_mask(pscte_127_handle pscte_127, int parity, unsigned int base, unsigned int line_mask); #endif // HAS_VBI #endif /* SCTE_127_H__ */