diff --git a/src/muxer.c b/src/muxer.c index 763219f4..b0c9d99f 100644 --- a/src/muxer.c +++ b/src/muxer.c @@ -89,7 +89,7 @@ static struct strtab container_video_file_suffix[] = { * Get the mime type for a container */ const char* -muxer_container_mimetype(muxer_container_type_t mc, int video) +muxer_container_type2mime(muxer_container_type_t mc, int video) { const char *str; @@ -141,7 +141,7 @@ muxer_container_type2txt(muxer_container_type_t mc) /** - * Convert a string to a container type + * Convert a container name to a container type */ muxer_container_type_t muxer_container_txt2type(const char *str) @@ -159,6 +159,28 @@ muxer_container_txt2type(const char *str) } +/** + * Convert a mime-string to a container type + */ +muxer_container_type_t +muxer_container_mime2type(const char *str) +{ + muxer_container_type_t mc; + + if(!str) + return MC_UNKNOWN; + + mc = str2val(str, container_video_mime); + if(mc == -1) + mc = str2val(str, container_audio_mime); + + if(mc == -1) + return MC_UNKNOWN; + + return mc; +} + + /** * Create a new muxer */ @@ -200,6 +222,7 @@ const char* muxer_suffix(muxer_t *m, const struct streaming_start *ss) { const char *mime; + muxer_container_type_t mc; int video; if(!m || !ss) @@ -207,8 +230,9 @@ muxer_suffix(muxer_t *m, const struct streaming_start *ss) mime = m->m_mime(m, ss); video = memcmp("audio", mime, 5); + mc = muxer_container_mime2type(mime); - return muxer_container_suffix(m->m_container, video); + return muxer_container_suffix(mc, video); } diff --git a/src/muxer.h b/src/muxer.h index 77767f3e..766c5dd4 100644 --- a/src/muxer.h +++ b/src/muxer.h @@ -56,11 +56,14 @@ typedef struct muxer { } muxer_t; -// type <==> txt converters -const char * muxer_container_type2txt(muxer_container_type_t mc); -muxer_container_type_t muxer_container_txt2type(const char *str); -const char* muxer_container_mimetype(muxer_container_type_t mc, int video); -const char* muxer_container_suffix (muxer_container_type_t mc, int video); +// type <==> string converters +const char * muxer_container_type2txt (muxer_container_type_t mc); +const char* muxer_container_type2mime (muxer_container_type_t mc, int video); + +muxer_container_type_t muxer_container_txt2type (const char *str); +muxer_container_type_t muxer_container_mime2type (const char *str); + +const char* muxer_container_suffix(muxer_container_type_t mc, int video); // Muxer factory muxer_t *muxer_create(muxer_container_type_t mc); diff --git a/src/muxer_pass.c b/src/muxer_pass.c index 20a986a7..965f130c 100644 --- a/src/muxer_pass.c +++ b/src/muxer_pass.c @@ -90,11 +90,11 @@ pass_muxer_mime(muxer_t* m, const struct streaming_start *ss) mc = MC_UNKNOWN; if(has_video) - return muxer_container_mimetype(mc, 1); + return muxer_container_type2mime(mc, 1); else if(has_audio) - return muxer_container_mimetype(mc, 0); + return muxer_container_type2mime(mc, 0); else - return muxer_container_mimetype(MC_UNKNOWN, 0); + return muxer_container_type2mime(MC_UNKNOWN, 0); } diff --git a/src/muxer_tvh.c b/src/muxer_tvh.c index dd335145..8555ba91 100644 --- a/src/muxer_tvh.c +++ b/src/muxer_tvh.c @@ -56,11 +56,11 @@ tvh_muxer_mime(muxer_t* m, const struct streaming_start *ss) } if(has_video) - return muxer_container_mimetype(m->m_container, 1); + return muxer_container_type2mime(m->m_container, 1); else if(has_audio) - return muxer_container_mimetype(m->m_container, 0); + return muxer_container_type2mime(m->m_container, 0); else - return muxer_container_mimetype(MC_UNKNOWN, 0); + return muxer_container_type2mime(MC_UNKNOWN, 0); } diff --git a/src/webui/webui.c b/src/webui/webui.c index 35ffce49..6e5ab39c 100644 --- a/src/webui/webui.c +++ b/src/webui/webui.c @@ -805,7 +805,7 @@ page_dvrfile(http_connection_t *hc, const char *remain, void *opaque) } fname = strdup(de->de_filename); - content = muxer_container_mimetype(de->de_mc, 1); + content = muxer_container_type2mime(de->de_mc, 1); postfix = muxer_container_suffix(de->de_mc, 1); pthread_mutex_unlock(&global_lock);