Answers.Body: <p>For 1st question - Most likely you're looking at not applicable error (the default yuv420p is not usable here - you may also need to get newer ffmpeg) - while using the hwdownload you need to tell explicitly to the NPP scaler the output format of the video frames. For your case the below command should make the trick:</p>
  
  <pre><code>ffmpeg -thread_queue_size 1024 \
      -hwaccel cuvid -c:v mpeg2_cuvid -deint 2 \
      -drop_second_field 1 -vsync 0 \
      -i "udp://226.58.24.4:2000?overrun_nonfatal=1" \
      -i /home/anis/logo/2mbps.png \
      -filter_complex "[0:v]scale_npp=1920:1080,hwdownload,format=nv12 [base]; [base][1:v] overlay=main_w-overlay_w-10:10 [marked]" \
      -map "[marked]" -vcodec h264_nvenc -aspect 16:9 \
      -b:v 1808k -minrate 1808k -maxrate 1808k -bufsize 904k \
      -g 100 -no-scenecut 1 -forced-idr 0 -preset:v medium -vprofile main -level 4.1 \
      -map 0:#0x091d -acodec libfdk_aac -ab 192k -ar 48000 \
      -f flv rtmp://10.150.12.104/virginandtv/abr2k_test
  </code></pre>
  
  <p>If you could please always include full ffmpeg output as this makes debugging always easier.</p>
  
  <p>For 2nd question - I wasn't able to find any way how to mix frames on the GPU using the current NPP library w/ ffmpeg. It certainly should be possible so whenever you find a solution let others know. I personally don't have enough time to read through all the NVIDIA docs and work on implementation but somebody else may get more time :-)</p>
  
Answers.ContentLicense: CC BY-SA 3.0
Answers.CreationDate: 2017-10-09T15:10:49.657Z
Answers.LastActivityDate: 2017-10-09T15:10:49.657Z
Answers.UserDisplayName: Pavel Frkal
Body: <p>I can overlay a picture to the video stream with the following command:</p>
  
  <blockquote>
    <p>ffmpeg -thread_queue_size 1024 -i udp_source -i watermark.png
    -filter_complex "[0:v]scale=1920:1080,yadif=0 [base]; [base][1:v] overlay=main_w-overlay_w-10:10 [marked]" -map "[marked]" -vcodec
    h264_nvenc -acodec libfdk_aac -ab 192k -ar 48000 -f flv rtmp_output</p>
  </blockquote>
  
  <p>But if I made a hardware decoding with deinterlacing and resizing at the GPU with the following command:</p>
  
  <blockquote>
    <p>ffmpeg -thread_queue_size 1024 -hwaccel cuvid -c:v mpeg2_cuvid -deint
    2 -drop_second_field 1 -vsync 0 -i udp_source -i watermark.png
    -filter_complex "[0:v]scale_npp=1920:1080 [base]; [base][1:v] overlay=main_w-overlay_w-10:10 [marked]" -map "[marked]" -vcodec
    h264_nvenc -acodec libfdk_aac -ab 192k -ar 48000 -f flv rtmp_output</p>
  </blockquote>
  
  <p>I got the following error:</p>
  
  <pre><code>Error while decoding stream #0:1: Invalid data found when processing input
  Impossible to convert between the formats supported by the filter 'Parsed_scale_npp_0' and the filter 'auto_scaler_0'
  Error reinitializing filters!
  Failed to inject frame into filter network: Function not implemented
  Error while processing the decoded data for stream #1:0
  </code></pre>
  
  <p>As I understand we can't overlay the picture to the video via NVIDIA. I added the "hwdownload" filter in the command to copy data to CPU:</p>
  
  <blockquote>
    <p>ffmpeg -thread_queue_size 1024 -hwaccel cuvid -c:v mpeg2_cuvid -deint
    2 -drop_second_field 1 -vsync 0 -i
    "udp://226.58.24.4:2000?overrun_nonfatal=1" -i
    /home/anis/logo/2mbps.png -filter_complex
    "[0:v]scale_npp=1920:1080,hwdownload [base]; [base][1:v]
    overlay=main_w-overlay_w-10:10 [marked]" -map "[marked]" -vcodec
    h264_nvenc -aspect 16:9 -b:v 1808k -minrate 1808k -maxrate 1808k
    -bufsize 904k -g 100 -no-scenecut 1 -forced-idr 0 -preset:v medium -vprofile main -level 4.1 -map 0:#0x091d -acodec libfdk_aac -ab 192k -ar 48000 -f flv rtmp://10.150.12.104/virginandtv/abr2k_test</p>
  </blockquote>
  
  <p>After this I got the following error:</p>
  
  <p>[udp @ 0x39abda0] Circular buffer overrun. Surviving due to overrun_nonfatal option</p>
  
  <p>I tried to increase a fifo size up to 1M, but this issue still exists.<br> 
  <strong>Is it possible to overlay a picture directly on NVIDIA card?</strong></p>
  
Tags: <ffmpeg><nvidia>
Title: FFmpeg hardware cuda decoding and overlay picture
UserDisplayName: Ivan Kolesnikov
ThreadText: # FFmpeg hardware cuda decoding and overlay picture
  
  (Asked by: username_0 on 2017-09-12)
  
  I can overlay a picture to the video stream with the following command:
  
  > ffmpeg -thread\_queue\_size 1024 -i udp\_source -i watermark.png
  > -filter\_complex "[0:v]scale=1920:1080,yadif=0 [base]; [base][1:v] overlay=main\_w-overlay\_w-10:10 [marked]" -map "[marked]" -vcodec
  > h264\_nvenc -acodec libfdk\_aac -ab 192k -ar 48000 -f flv rtmp\_output
  
  But if I made a hardware decoding with deinterlacing and resizing at the GPU with the following command:
  
  > ffmpeg -thread\_queue\_size 1024 -hwaccel cuvid -c:v mpeg2\_cuvid -deint
  > 2 -drop\_second\_field 1 -vsync 0 -i udp\_source -i watermark.png
  > -filter\_complex "[0:v]scale\_npp=1920:1080 [base]; [base][1:v] overlay=main\_w-overlay\_w-10:10 [marked]" -map "[marked]" -vcodec
  > h264\_nvenc -acodec libfdk\_aac -ab 192k -ar 48000 -f flv rtmp\_output
  
  I got the following error:
  
  ```
  Error while decoding stream #0:1: Invalid data found when processing input
  Impossible to convert between the formats supported by the filter 'Parsed_scale_npp_0' and the filter 'auto_scaler_0'
  Error reinitializing filters!
  Failed to inject frame into filter network: Function not implemented
  Error while processing the decoded data for stream #1:0
  
  ```
  
  As I understand we can't overlay the picture to the video via NVIDIA. I added the "hwdownload" filter in the command to copy data to CPU:
  
  > ffmpeg -thread\_queue\_size 1024 -hwaccel cuvid -c:v mpeg2\_cuvid -deint
  > 2 -drop\_second\_field 1 -vsync 0 -i
  > "udp://226.58.24.4:2000?overrun\_nonfatal=1" -i
  > /home/anis/logo/2mbps.png -filter\_complex
  > "[0:v]scale\_npp=1920:1080,hwdownload [base]; [base][1:v]
  > overlay=main\_w-overlay\_w-10:10 [marked]" -map "[marked]" -vcodec
  > h264\_nvenc -aspect 16:9 -b:v 1808k -minrate 1808k -maxrate 1808k
  > -bufsize 904k -g 100 -no-scenecut 1 -forced-idr 0 -preset:v medium -vprofile main -level 4.1 -map 0:#0x091d -acodec libfdk\_aac -ab 192k -ar 48000 -f flv rtmp://10.150.12.104/virginandtv/abr2k\_test
  
  After this I got the following error:
  
  [udp @ 0x39abda0] Circular buffer overrun. Surviving due to overrun\_nonfatal option
  
  I tried to increase a fifo size up to 1M, but this issue still exists.  
  **Is it possible to overlay a picture directly on NVIDIA card?**
  
  **Tags:** ffmpeg, nvidia
  
  
  ---
  
  ## 1 answers
  
  ### Answer by username_1 on 2017-10-09. Score: 3
  
  For 1st question - Most likely you're looking at not applicable error (the default yuv420p is not usable here - you may also need to get newer ffmpeg) - while using the hwdownload you need to tell explicitly to the NPP scaler the output format of the video frames. For your case the below command should make the trick:
  
  ```
  ffmpeg -thread_queue_size 1024 \
      -hwaccel cuvid -c:v mpeg2_cuvid -deint 2 \
      -drop_second_field 1 -vsync 0 \
      -i "udp://226.58.24.4:2000?overrun_nonfatal=1" \
      -i /home/anis/logo/2mbps.png \
      -filter_complex "[0:v]scale_npp=1920:1080,hwdownload,format=nv12 [base]; [base][1:v] overlay=main_w-overlay_w-10:10 [marked]" \
      -map "[marked]" -vcodec h264_nvenc -aspect 16:9 \
      -b:v 1808k -minrate 1808k -maxrate 1808k -bufsize 904k \
      -g 100 -no-scenecut 1 -forced-idr 0 -preset:v medium -vprofile main -level 4.1 \
      -map 0:#0x091d -acodec libfdk_aac -ab 192k -ar 48000 \
      -f flv rtmp://10.150.12.104/virginandtv/abr2k_test
  
  ```
  
  If you could please always include full ffmpeg output as this makes debugging always easier.
  
  For 2nd question - I wasn't able to find any way how to mix frames on the GPU using the current NPP library w/ ffmpeg. It certainly should be possible so whenever you find a solution let others know. I personally don't have enough time to read through all the NVIDIA docs and work on implementation but somebody else may get more time :-)
  
  
  ---
  
  