From 01b7d692f461962c8000145fb7e9f61c118e1057 Mon Sep 17 00:00:00 2001 From: Arnaud de Turckheim Date: Tue, 1 Sep 2020 16:17:28 +0200 Subject: [PATCH] scte104: add getters for time signal support --- scte/104.h | 152 +++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 147 insertions(+), 5 deletions(-) diff --git a/scte/104.h b/scte/104.h index 10b1d9b..69e246a 100644 --- a/scte/104.h +++ b/scte/104.h @@ -171,11 +171,13 @@ static inline void scte104t_set_gpi_edge(uint8_t *p, uint8_t i_gpi_edge) *****************************************************************************/ #define SCTE104_HEADER_SIZE 4 -#define SCTE104_OPID_INJECT_SECTION 0x0100 -#define SCTE104_OPID_SPLICE 0x0101 -#define SCTE104_OPID_SPLICE_NULL 0x0102 -#define SCTE104_OPID_TIME_SIGNAL 0x0104 -#define SCTE104_OPID_MULTIPLE 0xffff +#define SCTE104_OPID_INJECT_SECTION 0x0100 +#define SCTE104_OPID_SPLICE 0x0101 +#define SCTE104_OPID_SPLICE_NULL 0x0102 +#define SCTE104_OPID_TIME_SIGNAL 0x0104 +#define SCTE104_OPID_INSERT_DESCRIPTOR 0x0108 +#define SCTE104_OPID_INSERT_SEGMENTATION_DESCRIPTOR 0x010B +#define SCTE104_OPID_MULTIPLE 0xffff static inline uint16_t scte104_get_opid(const uint8_t *p) { @@ -523,6 +525,146 @@ static inline void scte104srd_set_auto_return(uint8_t *p, uint8_t i_auto_return) p[13] = i_auto_return; } +/***************************************************************************** + * SCTE-104 : time_signal_request_data + *****************************************************************************/ +static inline uint16_t scte104tsrd_get_pre_roll_time(const uint8_t *p) +{ + return ((uint16_t)p[0] << 8) | ((uint16_t)p[1]); +} + +/***************************************************************************** + * SCTE-104 : insert_descriptor_request_data + *****************************************************************************/ +static inline uint8_t scte104idrd_get_count(const uint8_t *p) +{ + return p[0]; +} + +static inline uint8_t *scte104idrd_get_image(const uint8_t *p) +{ + return (uint8_t *)(p + 1); +} + +/***************************************************************************** + * SCTE-104 : insert_segmentation_descriptor_request_data + *****************************************************************************/ +static inline uint32_t scte104isdrd_get_event_id(const uint8_t *p) +{ + return ((uint32_t)p[0] << 24) | ((uint32_t)p[1] << 16) | + ((uint32_t)p[2] << 8) | ((uint32_t)p[3]); +} + +static inline uint8_t scte104isdrd_get_cancel_indicator(const uint8_t *p) +{ + return p[4]; +} + +static inline uint16_t scte104isdrd_get_duration(const uint8_t *p) +{ + return ((uint16_t)p[5] << 8) | ((uint16_t)p[6]); +} + +static inline uint8_t scte104isdrd_get_upid_type(const uint8_t *p) +{ + return p[7]; +} + +static inline uint8_t scte104isdrd_get_upid_length(const uint8_t *p) +{ + return p[8]; +} + +static inline uint8_t *scte104isdrd_get_upid(const uint8_t *p) +{ + return (uint8_t *)p + 9; +} + +static inline uint8_t scte104isdrd_get_type_id(const uint8_t *p) +{ + uint8_t upid_length = scte104isdrd_get_upid_length(p); + p += 9 + upid_length; + return p[0]; +} + +static inline uint8_t scte104isdrd_get_num(const uint8_t *p) +{ + uint8_t upid_length = scte104isdrd_get_upid_length(p); + p += 9 + upid_length; + return p[1]; +} + +static inline uint8_t scte104isdrd_get_expected(const uint8_t *p) +{ + uint8_t upid_length = scte104isdrd_get_upid_length(p); + p += 9 + upid_length; + return p[2]; +} + +static inline uint8_t +scte104isdrd_get_duration_extension_frames(const uint8_t *p) +{ + uint8_t upid_length = scte104isdrd_get_upid_length(p); + p += 9 + upid_length; + return p[3]; +} + +static inline uint8_t scte104isdrd_get_delivery_not_restricted(const uint8_t *p) +{ + uint8_t upid_length = scte104isdrd_get_upid_length(p); + p += 9 + upid_length; + return p[4]; +} + +static inline uint8_t scte104isdrd_get_web_delivery_allowed(const uint8_t *p) +{ + uint8_t upid_length = scte104isdrd_get_upid_length(p); + p += 9 + upid_length; + return p[5]; +} + +static inline uint8_t scte104isdrd_get_no_regional_blackout(const uint8_t *p) +{ + uint8_t upid_length = scte104isdrd_get_upid_length(p); + p += 9 + upid_length; + return p[6]; +} + +static inline uint8_t scte104isdrd_get_archive_allowed(const uint8_t *p) +{ + uint8_t upid_length = scte104isdrd_get_upid_length(p); + p += 9 + upid_length; + return p[7]; +} + +static inline uint8_t scte104isdrd_get_device_restrictions(const uint8_t *p) +{ + uint8_t upid_length = scte104isdrd_get_upid_length(p); + p += 9 + upid_length; + return p[8]; +} + +static inline uint8_t scte104isdrd_get_insert_sub_info(const uint8_t *p) +{ + uint8_t upid_length = scte104isdrd_get_upid_length(p); + p += 9 + upid_length; + return p[9]; +} + +static inline uint8_t scte104isdrd_get_sub_num(const uint8_t *p) +{ + uint8_t upid_length = scte104isdrd_get_upid_length(p); + p += 9 + upid_length; + return p[10]; +} + +static inline uint8_t scte104isdrd_get_sub_expected(const uint8_t *p) +{ + uint8_t upid_length = scte104isdrd_get_upid_length(p); + p += 9 + upid_length; + return p[11]; +} + #ifdef __cplusplus } #endif