}
+/**
+ * Copy muxer settings
+ */
+void
+muxer_config_free(muxer_config_t *m_cfg)
+{
+ if (m_cfg->m_type == MC_RAW || m_cfg->m_type == MC_PASS) {
+ free(m_cfg->u.pass.m_cmdline);
+ free(m_cfg->u.pass.m_mime);
+ }
+ memset(m_cfg, 0, sizeof(*m_cfg));
+}
+
+
/**
* Create a new muxer
*/
muxer_t*
-muxer_create(const muxer_config_t *m_cfg)
+muxer_create(muxer_config_t *m_cfg)
{
muxer_t *m;
}
memcpy(&m->m_config, m_cfg, sizeof(muxer_config_t));
+ memset(m_cfg, 0, sizeof(*m_cfg));
return m;
}
const char* muxer_container_suffix(muxer_container_type_t mc, int video);
/* Muxer factory */
-muxer_t *muxer_create(const muxer_config_t *m_cfg);
+muxer_t *muxer_create(muxer_config_t *m_cfg);
void muxer_config_copy(muxer_config_t *dst, const muxer_config_t *src);
+void muxer_config_free(muxer_config_t *m_cfg);
+
/* Wrapper functions */
static inline int muxer_open_file (muxer_t *m, const char *filename)
{ if(m && filename) return m->m_open_file(m, filename); return -1; }
{ if (m) return m->m_close(m); return -1; }
static inline int muxer_destroy (muxer_t *m)
- { if (m) { m->m_destroy(m); return 0; } return -1; }
+ { if (m) { m->m_destroy(m); muxer_config_free(&m->m_config); return 0; } return -1; }
static inline int muxer_write_meta (muxer_t *m, struct epg_broadcast *eb, const char *comment)
{ if (m) return m->m_write_meta(m, eb, comment); return -1; }