[FFmpeg-trac] #7507(avfilter:new): hwupload: missing device platform

FFmpeg trac at avcodec.org
Wed Nov 7 18:55:25 EET 2018


#7507: hwupload: missing device platform
-------------------------------------+-------------------------------------
             Reporter:  msiders      |                    Owner:
                 Type:  enhancement  |                   Status:  new
             Priority:  normal       |                Component:  avfilter
              Version:  git-master   |               Resolution:
             Keywords:  hwupload,    |               Blocked By:
  hwaccel                            |  Reproduced by developer:  0
             Blocking:               |
Analyzed by developer:  0            |
-------------------------------------+-------------------------------------

Comment (by msiders):

 Replying to [comment:8 jkqxz]:
 > Looks like format autonegotiation didn't manage to match the formats
 correctly through the split filter?  Try putting a `format=cuda` instance
 between `split` and `hwdownload`.
 >
 > This is incorrect.  `hwdownload` uses the device connected to whatever
 frames it gets on its input; it doesn't touch
 `AVFilterContext.hw_device_ctx` at all.

 Hi,

 At time, using only 2 different hw_accelerators (qsv and cuda) I have
 success with spliting in first GPU, and downloading/uploading to the
 second GPU. The "hack" basis is to use as `-hwaccel` the first platform,
 then add the `-filter_hw_device` with the second platform before the
 `-filter_complex`. Then the `hwdownload` reads from the first GPU, and the
 `hwupload` writes in the second one.

 However, I need to do a test with 3 different platforms. I don't know how
 multiple `hwupload` in a `-filter_complex` can distinguish between
 different platforms... as just only one `-filter_hw_device` can be
 interposed.

 For example, how to resolve?


 {{{
 ffmpeg \
  -init_hw_device qsv=qsv -init_hw_device cuda=cuda -init_hw_device
 opencl=opencl \
  -hwaccel cuda -hwaccel_device cuda \
  -c:v h264_cuvid -i input.ts \
  -filter_hw_device opencl -filter_complex
 "[v:0]split=1[out1];[out1]hwdownload,format=nv12[out2];[out2]hwupload,unsharp_opencl[out3];[out3]hwdownload,format=nv12[out4];[out4]hwupload,deinterlace_qsv[target]"
 \
  -map [target] \
  -c:v:0 h264_qsv \
  -f mpegts output.ts
 }}}

 In this case the path is:
 `CUDA(decode)-->RAM-->OPENCL(unsharp)-->RAM-->QSV(deinterlace)-->QSV(encode)`

 So, how the ''second'' hwupload identifies the QSV target?
 Any idea?

--
Ticket URL: <https://trac.ffmpeg.org/ticket/7507#comment:9>
FFmpeg <https://ffmpeg.org>
FFmpeg issue tracker


More information about the FFmpeg-trac mailing list