Opened 3 years ago

Last modified 3 years ago

#8506 new defect

H.265 VA-API encoder changes video size on AMD cards

Reported by: tildearrow Owned by:
Priority: normal Component: avcodec
Version: git-master Keywords: amf
Cc: Blocked By:
Blocking: Reproduced by developer: no
Analyzed by developer: no

Description

Description:
The H.265 VA-API encoder on an AMD card rounds the video size to a multiple of 16.
As an example, a 1920x1080 video will be resized to 1920x1088.

While the specs require the internal video size to be a multiple of 16, there is another "visible" video size which can be set arbitrarily (and hence allow for the 1920x1080 size).
However, the AMD VA-API driver seems to be setting the "visible" size to the same value as the internal size. Therefore the size is wrong.

Steps to Reproduce:
1.

sudo env LIBVA_DRIVER_NAME=radeonsi ffmpeg -vaapi_device /dev/dri/card1 -f lavfi -i color=color=black:size=1920x1080 -t 0.04 -vf 'format=nv12,hwupload' -c:v hevc_vaapi -qp 24 -y 1088.ts

This will generate a 1-frame video that apparently has a frame size of 1920x1080.

2.

$ ffprobe -i 1088.ts

This will check that the video really has a frame size of 1920x1080.

-Expected Result-

ffprobe version n4.2.2 Copyright (c) 2007-2019 the FFmpeg developers
  built with gcc 9.2.0 (GCC)
  configuration: --prefix=/usr --disable-debug --disable-static --disable-stripping --enable-fontconfig --enable-gmp --enable-gnutls --enable-gpl --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libdav1d --enable-libdrm --enable-libfreetype --enable-libfribidi --enable-libgsm --enable-libiec61883 --enable-libjack --enable-libmfx --enable-libmodplug --enable-libmp3lame --enable-libopencore_amrnb --enable-libopencore_amrwb --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libv4l2 --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxcb --enable-libxml2 --enable-libxvid --enable-nvdec --enable-nvenc --enable-omx --enable-shared --enable-version3
  libavutil      56. 31.100 / 56. 31.100
  libavcodec     58. 54.100 / 58. 54.100
  libavformat    58. 29.100 / 58. 29.100
  libavdevice    58.  8.100 / 58.  8.100
  libavfilter     7. 57.100 /  7. 57.100
  libswscale      5.  5.100 /  5.  5.100
  libswresample   3.  5.100 /  3.  5.100
  libpostproc    55.  5.100 / 55.  5.100
[mpegts @ 0x55aed1cd4c00] Format mpegts detected only with low score of 2, misdetection possible!
Input #0, mpegts, from '1088.ts':
  Duration: 00:00:00.00, start: 1.400000, bitrate: 957090 kb/s
  Program 1 
    Metadata:
      service_name    : Service01
      service_provider: FFmpeg
    Stream #0:0[0x100]: Video: hevc (Main) (HEVC / 0x43564548), yuv420p(tv), 1920x1080, 90k tbr, 90k tbn, 90k tbc

(look at 1920x1080)

-Actual (Defective) Result-

ffprobe version n4.2.2 Copyright (c) 2007-2019 the FFmpeg developers
  built with gcc 9.2.0 (GCC)
  configuration: --prefix=/usr --disable-debug --disable-static --disable-stripping --enable-fontconfig --enable-gmp --enable-gnutls --enable-gpl --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libdav1d --enable-libdrm --enable-libfreetype --enable-libfribidi --enable-libgsm --enable-libiec61883 --enable-libjack --enable-libmfx --enable-libmodplug --enable-libmp3lame --enable-libopencore_amrnb --enable-libopencore_amrwb --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libv4l2 --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxcb --enable-libxml2 --enable-libxvid --enable-nvdec --enable-nvenc --enable-omx --enable-shared --enable-version3
  libavutil      56. 31.100 / 56. 31.100
  libavcodec     58. 54.100 / 58. 54.100
  libavformat    58. 29.100 / 58. 29.100
  libavdevice    58.  8.100 / 58.  8.100
  libavfilter     7. 57.100 /  7. 57.100
  libswscale      5.  5.100 /  5.  5.100
  libswresample   3.  5.100 /  3.  5.100
  libpostproc    55.  5.100 / 55.  5.100
[mpegts @ 0x55aed1cd4c00] Format mpegts detected only with low score of 2, misdetection possible!
Input #0, mpegts, from '1088.ts':
  Duration: 00:00:00.00, start: 1.400000, bitrate: 957090 kb/s
  Program 1 
    Metadata:
      service_name    : Service01
      service_provider: FFmpeg
    Stream #0:0[0x100]: Video: hevc (Main) (HEVC / 0x43564548), yuv420p(tv), 1920x1088, 90k tbr, 90k tbn, 90k tbc

As you can see, the video has been resize to 1920x1088. This should not happen.

Additional information:
FFmpeg 4.2.2. Arch Linux.
Radeon Vega FE. Mesa 19.3.3.
Linux linux 5.4.10-rt5-1-rt #1 SMP PREEMPT_RT @1578738969 x86_64 GNU/Linux.

Attachments (2)

ffmpeg-20200201-151319.log (11.0 KB ) - added by tildearrow 3 years ago.
Report
ffmpeg-20200201-213631.log (11.0 KB ) - added by tildearrow 3 years ago.
Report with git version

Download all attachments as: .zip

Change History (6)

by tildearrow, 3 years ago

Attachment: ffmpeg-20200201-151319.log added

Report

comment:1 by Carl Eugen Hoyos, 3 years ago

Version: 4.2unspecified

Is this issue reproducible with current FFmpeg git head, the only version supported here?

in reply to:  1 comment:2 by tildearrow, 3 years ago

Version: unspecifiedgit-master

Replying to cehoyos:

Is this issue reproducible with current FFmpeg git head, the only version supported here?

Reproduces on master head too (d85c84eb38e5845495dacfcef82265a433fdd043 as of now).

by tildearrow, 3 years ago

Attachment: ffmpeg-20200201-213631.log added

Report with git version

comment:3 by Carl Eugen Hoyos, 3 years ago

Keywords: amf added

comment:4 by Linjie.Fu, 3 years ago

Cannot be reproduced with iHD driver.

Since pic_width_in_luma_samples and pic_height_in_luma_samples are set in FFmpeg level, I tried with iHD driver, however it could not be reproduced. Doubt whether conformance_window_flag and conf_win_bottom_offset are set correctly in your case.

Note: See TracTickets for help on using tickets.