diff --git a/src/streaming.c b/src/streaming.c index c5a6f91c..c3949872 100644 --- a/src/streaming.c +++ b/src/streaming.c @@ -358,3 +358,47 @@ streaming_code2txt(int code) return "Unknown reason"; } } + + +/** + * + */ +streaming_start_t * +streaming_start_copy(const streaming_start_t *src) +{ + int i; + size_t siz = sizeof(streaming_start_t) + + sizeof(streaming_start_component_t) * src->ss_num_components; + + streaming_start_t *dst = malloc(siz); + + memcpy(dst, src, siz); + transport_source_info_copy(&dst->ss_si, &src->ss_si); + + for(i = 0; i < dst->ss_num_components; i++) { + streaming_start_component_t *ssc = &dst->ss_components[i]; + if(ssc->ssc_global_header != NULL) + ssc->ssc_global_header = memcpy(malloc(ssc->ssc_global_header_len), + ssc->ssc_global_header, + ssc->ssc_global_header_len); + } + + dst->ss_refcount = 1; + return dst; +} + + +/** + * + */ +streaming_start_component_t * +streaming_start_component_find_by_index(streaming_start_t *ss, int idx) +{ + int i; + for(i = 0; i < ss->ss_num_components; i++) { + streaming_start_component_t *ssc = &ss->ss_components[i]; + if(ssc->ssc_index == idx) + return ssc; + } + return NULL; +} diff --git a/src/streaming.h b/src/streaming.h index f0e2e58c..acc0c54d 100644 --- a/src/streaming.h +++ b/src/streaming.h @@ -36,6 +36,8 @@ typedef struct streaming_start_component { uint8_t *ssc_global_header; int ssc_global_header_len; + int ssc_frameduration; + } streaming_start_component_t; @@ -91,9 +93,15 @@ void streaming_target_deliver2(streaming_target_t *st, streaming_message_t *sm); void streaming_start_unref(streaming_start_t *ss); +streaming_start_t *streaming_start_copy(const streaming_start_t *src); + int streaming_pad_probe_type(streaming_pad_t *sp, streaming_message_type_t smt); const char *streaming_code2txt(int code); +streaming_start_component_t *streaming_start_component_find_by_index(streaming_start_t *ss, int idx); + + + #endif /* STREAMING_H_ */