mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-04-24 17:12:34 +02:00
avcodec/bsf: support shorthand options for av_bsf_list_parse_str
Signed-off-by: Marton Balint <cus@passwd.hu>
This commit is contained in:
parent
c96904f525
commit
425e08d571
@ -431,7 +431,7 @@ int av_bsf_list_append(AVBSFList *lst, AVBSFContext *bsf)
|
|||||||
return av_dynarray_add_nofree(&lst->bsfs, &lst->nb_bsfs, bsf);
|
return av_dynarray_add_nofree(&lst->bsfs, &lst->nb_bsfs, bsf);
|
||||||
}
|
}
|
||||||
|
|
||||||
int av_bsf_list_append2(AVBSFList *lst, const char *bsf_name, AVDictionary ** options)
|
static int bsf_list_append_internal(AVBSFList *lst, const char *bsf_name, const char *options, AVDictionary ** options_dict)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
const AVBitStreamFilter *filter;
|
const AVBitStreamFilter *filter;
|
||||||
@ -445,8 +445,20 @@ int av_bsf_list_append2(AVBSFList *lst, const char *bsf_name, AVDictionary ** op
|
|||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
if (options) {
|
if (options && filter->priv_class) {
|
||||||
ret = av_opt_set_dict2(bsf, options, AV_OPT_SEARCH_CHILDREN);
|
const AVOption *opt = av_opt_next(bsf->priv_data, NULL);
|
||||||
|
const char * shorthand[2] = {NULL};
|
||||||
|
|
||||||
|
if (opt)
|
||||||
|
shorthand[0] = opt->name;
|
||||||
|
|
||||||
|
ret = av_opt_set_from_string(bsf->priv_data, options, shorthand, "=", ":");
|
||||||
|
if (ret < 0)
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (options_dict) {
|
||||||
|
ret = av_opt_set_dict2(bsf, options_dict, AV_OPT_SEARCH_CHILDREN);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
@ -460,6 +472,11 @@ end:
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int av_bsf_list_append2(AVBSFList *lst, const char *bsf_name, AVDictionary ** options)
|
||||||
|
{
|
||||||
|
return bsf_list_append_internal(lst, bsf_name, NULL, options);
|
||||||
|
}
|
||||||
|
|
||||||
int av_bsf_list_finalize(AVBSFList **lst, AVBSFContext **bsf)
|
int av_bsf_list_finalize(AVBSFList **lst, AVBSFContext **bsf)
|
||||||
{
|
{
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
@ -486,33 +503,15 @@ end:
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int bsf_parse_single(const char *str, AVBSFList *bsf_lst)
|
static int bsf_parse_single(char *str, AVBSFList *bsf_lst)
|
||||||
{
|
{
|
||||||
char *bsf_name, *bsf_options_str, *buf;
|
char *bsf_name, *bsf_options_str;
|
||||||
AVDictionary *bsf_options = NULL;
|
|
||||||
int ret = 0;
|
|
||||||
|
|
||||||
if (!(buf = av_strdup(str)))
|
bsf_name = av_strtok(str, "=", &bsf_options_str);
|
||||||
return AVERROR(ENOMEM);
|
if (!bsf_name)
|
||||||
|
return AVERROR(EINVAL);
|
||||||
|
|
||||||
bsf_name = av_strtok(buf, "=", &bsf_options_str);
|
return bsf_list_append_internal(bsf_lst, bsf_name, bsf_options_str, NULL);
|
||||||
if (!bsf_name) {
|
|
||||||
ret = AVERROR(EINVAL);
|
|
||||||
goto end;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (bsf_options_str) {
|
|
||||||
ret = av_dict_parse_string(&bsf_options, bsf_options_str, "=", ":", 0);
|
|
||||||
if (ret < 0)
|
|
||||||
goto end;
|
|
||||||
}
|
|
||||||
|
|
||||||
ret = av_bsf_list_append2(bsf_lst, bsf_name, &bsf_options);
|
|
||||||
|
|
||||||
end:
|
|
||||||
av_dict_free(&bsf_options);
|
|
||||||
av_free(buf);
|
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int av_bsf_list_parse_str(const char *str, AVBSFContext **bsf_lst)
|
int av_bsf_list_parse_str(const char *str, AVBSFContext **bsf_lst)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user