diff options
author | Haihao Xiang <haihao.xiang@intel.com> | 2021-06-29 09:45:38 +0800 |
---|---|---|
committer | James Almer <jamrial@gmail.com> | 2021-09-12 13:33:50 -0300 |
commit | 6803d8b4403ecea18fc288475b4d7cdedd0fb744 (patch) | |
tree | d53c4c0e60a455c6c54821b7f690bcd7f0193786 /fftools | |
parent | cd4e6e404b4afdb4facffc85450c1dcd9abdfc5a (diff) | |
download | ffmpeg-6803d8b4403ecea18fc288475b4d7cdedd0fb744.tar.gz |
ffmpeg_hw: make hardware selection for filters more user friendly
When a device is derived from a source device, there are at least 2
devices, and usually the derived device is the expected device, so let's
pick the last device if user doesn't specify the filter device with
filter_hw_device option
After applying this patch, the command below can work:
$> ffmpeg -init_hw_device vaapi=va:/dev/dri/renderD128 -init_hw_device
qsv=hw@va -f lavfi -i yuvtestsrc -vf
format=nv12,hwupload=extra_hw_frames=64 -c:v h264_qsv -y out.h264
Reviewed-by: Soft Works <softworkz@hotmail.com>
Signed-off-by: James Almer <jamrial@gmail.com>
Diffstat (limited to 'fftools')
-rw-r--r-- | fftools/ffmpeg_hw.c | 20 |
1 files changed, 13 insertions, 7 deletions
diff --git a/fftools/ffmpeg_hw.c b/fftools/ffmpeg_hw.c index 41aaf776d7..14e702bd92 100644 --- a/fftools/ffmpeg_hw.c +++ b/fftools/ffmpeg_hw.c @@ -553,15 +553,21 @@ int hw_device_setup_for_filter(FilterGraph *fg) HWDevice *dev; int i; - // If the user has supplied exactly one hardware device then just - // give it straight to every filter for convenience. If more than - // one device is available then the user needs to pick one explcitly - // with the filter_hw_device option. + // Pick the last hardware device if the user doesn't pick the device for + // filters explicitly with the filter_hw_device option. if (filter_hw_device) dev = filter_hw_device; - else if (nb_hw_devices == 1) - dev = hw_devices[0]; - else + else if (nb_hw_devices > 0) { + dev = hw_devices[nb_hw_devices - 1]; + + if (nb_hw_devices > 1) + av_log(NULL, AV_LOG_WARNING, "There are %d hardware devices. device " + "%s of type %s is picked for filters by default. Set hardware " + "device explicitly with the filter_hw_device option if device " + "%s is not usable for filters.\n", + nb_hw_devices, dev->name, + av_hwdevice_get_type_name(dev->type), dev->name); + } else dev = NULL; if (dev) { |