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-06-29 04:45:38 +0300
committerJames Almer <jamrial@gmail.com>2021-09-12 19:33:50 +0300
commit6803d8b4403ecea18fc288475b4d7cdedd0fb744 (patch)
treed53c4c0e60a455c6c54821b7f690bcd7f0193786 /fftools/ffmpeg_hw.c
parentcd4e6e404b4afdb4facffc85450c1dcd9abdfc5a (diff)
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/ffmpeg_hw.c')
-rw-r--r--fftools/ffmpeg_hw.c20
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) {