From: Jaroslav Kysela Date: Wed, 15 Nov 2017 18:14:24 +0000 (+0100) Subject: transcode: the recent change for conditional transcoding caused a regression, fixes... X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=7264c5bcd41b6e32a1a8f3f9ee211d15b2a0062a;p=thirdparty%2Ftvheadend.git transcode: the recent change for conditional transcoding caused a regression, fixes #4726 --- diff --git a/src/htsmsg.c b/src/htsmsg.c index a090b52bd..735d191a3 100644 --- a/src/htsmsg.c +++ b/src/htsmsg.c @@ -1303,3 +1303,24 @@ htsmsg_create_key_val(const char *key, const char *val) } return r; } + +/* + * + */ +int +htsmsg_is_string_in_list(htsmsg_t *list, const char *str) +{ + const char *s; + htsmsg_field_t *f; + + if (list == NULL || !list->hm_islist) + return 0; + HTSMSG_FOREACH(f, list) { + s = htsmsg_field_get_str(f); + if (s == NULL) + continue; + if (!strcasecmp(s, str)) + return 1; + } + return 0; +} diff --git a/src/htsmsg.h b/src/htsmsg.h index f9b180ac3..265901c90 100644 --- a/src/htsmsg.h +++ b/src/htsmsg.h @@ -437,6 +437,8 @@ htsmsg_t *htsmsg_csv_2_list(const char *str, char delim); htsmsg_t *htsmsg_create_key_val(const char *key, const char *val); +int htsmsg_is_string_in_list(htsmsg_t *list, const char *str); + /** * */ diff --git a/src/transcoding/transcode/stream.c b/src/transcoding/transcode/stream.c index 92039e6b2..909aef1c8 100644 --- a/src/transcoding/transcode/stream.c +++ b/src/transcoding/transcode/stream.c @@ -29,21 +29,17 @@ tvh_stream_is_copy(TVHCodecProfile *profile, tvh_ssc_t *ssc, const char *src_codecs) { const char *txtname; - char *codecs, *str, *token, *saveptr; + htsmsg_t *list; + int r; /* if the source codec is in the list, do the stream copy only */ if (src_codecs && *src_codecs != '\0' && *src_codecs != '-') { - txtname = streaming_component_type2txt(ssc->ssc_type); - if (txtname == NULL) - goto cont; - codecs = tvh_strdupa(src_codecs); - if (codecs == NULL) - goto cont; - for (str = codecs; ; str = NULL) { - token = strtok_r(str, " ,|;" , &saveptr); - if (token == NULL) - break; - if (!strcasecmp(token, txtname)) + list = htsmsg_csv_2_list(src_codecs, ','); + if (list) { + txtname = streaming_component_type2txt(ssc->ssc_type); + r = htsmsg_is_string_in_list(list, txtname); + htsmsg_destroy(list); + if (r) goto cont; } return 1;