diff --git a/src/streaming.c b/src/streaming.c index 62c06a87..c5a6f91c 100644 --- a/src/streaming.c +++ b/src/streaming.c @@ -197,10 +197,15 @@ streaming_msg_clone(streaming_message_t *src) void streaming_start_unref(streaming_start_t *ss) { + int i; + if((atomic_add(&ss->ss_refcount, -1)) != 1) return; transport_source_info_free(&ss->ss_si); + for(i = 0; i < ss->ss_num_components; i++) + free(ss->ss_components[i].ssc_global_header); + free(ss); } @@ -243,6 +248,17 @@ streaming_msg_free(streaming_message_t *sm) free(sm); } +/** + * + */ +void +streaming_target_deliver2(streaming_target_t *st, streaming_message_t *sm) +{ + if(st->st_reject_filter & SMT_TO_MASK(sm->sm_type)) + streaming_msg_free(sm); + else + st->st_cb(st->st_opaque, sm); +} /** * diff --git a/src/streaming.h b/src/streaming.h index dcabea4b..f0e2e58c 100644 --- a/src/streaming.h +++ b/src/streaming.h @@ -32,6 +32,10 @@ typedef struct streaming_start_component { uint16_t ssc_ancillary_id; int16_t ssc_width; int16_t ssc_height; + + uint8_t *ssc_global_header; + int ssc_global_header_len; + } streaming_start_component_t; @@ -83,6 +87,8 @@ streaming_message_t *streaming_msg_create_pkt(th_pkt_t *pkt); #define streaming_target_deliver(st, sm) ((st)->st_cb((st)->st_opaque, (sm))) +void streaming_target_deliver2(streaming_target_t *st, streaming_message_t *sm); + void streaming_start_unref(streaming_start_t *ss); int streaming_pad_probe_type(streaming_pad_t *sp,