diff options
author | Haihao Xiang <haihao.xiang@intel.com> | 2021-08-11 14:44:05 +0800 |
---|---|---|
committer | James Almer <jamrial@gmail.com> | 2021-08-17 10:10:07 -0300 |
commit | 51a80aacce1a7bd20823798dc9e5ec5f23a3b62d (patch) | |
tree | e733b9812d13c62fb0a7c4a4053373e38027dc66 /fftools/ffmpeg_hw.c | |
parent | 7bba0dd6382e30d646cb406034a66199e071d713 (diff) |
ffmpeg_hw: Don't ignore key parameters when initializing a hw device
Currently user may use '-init_hw_device type=name' to initialize a hw
device, however the key parameter is ignored when use '-init_hw_device
type=name,key=value'. After applying this patch, user may set key
parameter if needed.
Reviewed-by: Soft Works <softworkz@hotmail.com>
Signed-off-by: James Almer <jamrial@gmail.com>
Diffstat (limited to 'fftools/ffmpeg_hw.c')
-rw-r--r-- | fftools/ffmpeg_hw.c | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/fftools/ffmpeg_hw.c b/fftools/ffmpeg_hw.c index 6923c4c5a1..41aaf776d7 100644 --- a/fftools/ffmpeg_hw.c +++ b/fftools/ffmpeg_hw.c @@ -93,6 +93,8 @@ static char *hw_device_default_name(enum AVHWDeviceType type) int hw_device_init_from_string(const char *arg, HWDevice **dev_out) { + // "type=name" + // "type=name,key=value,key2=value2" // "type=name:device,key=value,key2=value2" // "type:device,key=value,key2=value2" // -> av_hwdevice_ctx_create() @@ -124,7 +126,7 @@ int hw_device_init_from_string(const char *arg, HWDevice **dev_out) } if (*p == '=') { - k = strcspn(p + 1, ":@"); + k = strcspn(p + 1, ":@,"); name = av_strndup(p + 1, k); if (!name) { @@ -190,6 +192,18 @@ int hw_device_init_from_string(const char *arg, HWDevice **dev_out) src->device_ref, 0); if (err < 0) goto fail; + } else if (*p == ',') { + err = av_dict_parse_string(&options, p + 1, "=", ",", 0); + + if (err < 0) { + errmsg = "failed to parse options"; + goto invalid; + } + + err = av_hwdevice_ctx_create(&device_ref, type, + NULL, options, 0); + if (err < 0) + goto fail; } else { errmsg = "parse error"; goto invalid; |