Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/FFmpeg/FFmpeg.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHaihao Xiang <haihao.xiang@intel.com>2021-08-11 09:44:05 +0300
committerJames Almer <jamrial@gmail.com>2021-08-17 16:10:07 +0300
commit51a80aacce1a7bd20823798dc9e5ec5f23a3b62d (patch)
treee733b9812d13c62fb0a7c4a4053373e38027dc66 /fftools/ffmpeg_hw.c
parent7bba0dd6382e30d646cb406034a66199e071d713 (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.c16
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;