TeeSlave *slaves;
int use_fifo;
AVDictionary *fifo_options;
- char *fifo_options_str;
} TeeContext;
static const char *const slave_delim = "|";
static const AVOption options[] = {
{"use_fifo", "Use fifo pseudo-muxer to separate actual muxers from encoder",
OFFSET(use_fifo), AV_OPT_TYPE_BOOL, {.i64 = 0}, 0, 1, AV_OPT_FLAG_ENCODING_PARAM},
- {"fifo_options", "fifo pseudo-muxer options", OFFSET(fifo_options_str),
- AV_OPT_TYPE_STRING, {.str = NULL}, 0, 0, AV_OPT_FLAG_ENCODING_PARAM},
+ {"fifo_options", "fifo pseudo-muxer options", OFFSET(fifo_options),
+ AV_OPT_TYPE_DICT, {.str = NULL}, 0, 0, AV_OPT_FLAG_ENCODING_PARAM},
{NULL}
};
static int open_slave(AVFormatContext *avf, char *slave, TeeSlave *tee_slave)
{
int i, ret;
- AVDictionary *options = NULL;
+ AVDictionary *options = NULL, *bsf_options = NULL;
AVDictionaryEntry *entry;
char *filename;
char *format = NULL, *select = NULL, *on_fail = NULL;
STEAL_OPTION("onfail", on_fail);
STEAL_OPTION("use_fifo", use_fifo);
STEAL_OPTION("fifo_options", fifo_options_str);
+ entry = NULL;
+ while ((entry = av_dict_get(options, "bsfs", entry, AV_DICT_IGNORE_SUFFIX))) {
+ /* trim out strlen("bsfs") characters from key */
+ av_dict_set(&bsf_options, entry->key + 4, entry->value, 0);
+ av_dict_set(&options, entry->key, NULL, 0);
+ }
ret = parse_slave_failure_policy_option(on_fail, tee_slave);
if (ret < 0) {
}
entry = NULL;
- while (entry = av_dict_get(options, "bsfs", NULL, AV_DICT_IGNORE_SUFFIX)) {
- const char *spec = entry->key + strlen("bsfs");
+ while (entry = av_dict_get(bsf_options, "", NULL, AV_DICT_IGNORE_SUFFIX)) {
+ const char *spec = entry->key;
if (*spec) {
if (strspn(spec, slave_bsfs_spec_sep) != 1) {
av_log(avf, AV_LOG_ERROR,
}
}
- av_dict_set(&options, entry->key, NULL, 0);
+ av_dict_set(&bsf_options, entry->key, NULL, 0);
}
for (i = 0; i < avf->nb_streams; i++){
av_free(select);
av_free(on_fail);
av_dict_free(&options);
+ av_dict_free(&bsf_options);
av_freep(&tmp_select);
return ret;
}
filename++;
}
- if (tee->fifo_options_str) {
- ret = av_dict_parse_string(&tee->fifo_options, tee->fifo_options_str, "=", ":", 0);
- if (ret < 0)
- goto fail;
- }
-
if (!(tee->slaves = av_mallocz_array(nb_slaves, sizeof(*tee->slaves)))) {
ret = AVERROR(ENOMEM);
goto fail;