• Philip Langdale's avatar
    nvenc: De-compensate aspect ratio compensation of DVD-like content. · 10545f84
    Philip Langdale authored
    For reasons we are not privy to, nvidia decided that the nvenc encoder
    should apply aspect ratio compensation to 'DVD like' content, assuming that
    the content is not BT.601 compliant, but needs to be BT.601 compliant. In
    this context, that means that they make the following, questionable,
    assumptions:
    
    1) If the input dimensions are 720x480 or 720x576, assume the content has
    an active area of 704x480 or 704x576.
    
    2) Assume that whatever the input sample aspect ratio is, it does not account
    for the difference between 'physical' and 'active' dimensions.
    
    From these assumptions, they then conclude that they can 'help', by adjusting
    the sample aspect ratio by a factor of 45/44. And indeed, if you wanted to
    display only the 704 wide active area with the same aspect ratio as the full
    720 wide image - this would be the correct adjustment factor, but what if you
    don't? And more importantly, what if you're used to lavc not making this kind
    of adjustment at encode time - because none of the other encoders do this!
    
    And, what if you had already accounted for BT.601 and your input had the
    correct attributes? Well, it's going to apply the compensation anyway!
    So, if you take some content, and feed it through nvenc repeatedly, it
    will keep scaling the aspect ratio every time, stretching your video out
    more and more and more.
    
    So, clearly, regardless of whether you want to apply bt.601 aspect ratio
    adjustments or not, this is not the way to do it. With any other lavc
    encoder, you would do it as part of defining your input parameters or do
    the adjustment at playback time, and there's no reason by nvenc should
    be any different.
    
    This change adds some logic to undo the compensation that nvenc would
    otherwise do.
    
    nvidia engineers have told us that they will work to make this
    compensation mechanism optional in a future release of the nvenc
    SDK. At that point, we can adapt accordingly.
    Signed-off-by: 's avatarPhilip Langdale <philipl@overt.org>
    Reviewed-by: 's avatarTimo Rothenpieler <timo@rothenpieler.org>
    Signed-off-by: 's avatarAnton Khirnov <anton@khirnov.net>
    10545f84
Name
Last commit
Last update
compat Loading commit data...
doc Loading commit data...
libavcodec Loading commit data...
libavdevice Loading commit data...
libavfilter Loading commit data...
libavformat Loading commit data...
libavresample Loading commit data...
libavutil Loading commit data...
libswscale Loading commit data...
presets Loading commit data...
tests Loading commit data...
tools Loading commit data...
.gitattributes Loading commit data...
.gitignore Loading commit data...
.travis.yml Loading commit data...
COPYING.GPLv2 Loading commit data...
COPYING.GPLv3 Loading commit data...
COPYING.LGPLv2.1 Loading commit data...
COPYING.LGPLv3 Loading commit data...
CREDITS Loading commit data...
Changelog Loading commit data...
INSTALL Loading commit data...
LICENSE Loading commit data...
Makefile Loading commit data...
README Loading commit data...
README.md Loading commit data...
RELEASE Loading commit data...
arch.mak Loading commit data...
avconv.c Loading commit data...
avconv.h Loading commit data...
avconv_dxva2.c Loading commit data...
avconv_filter.c Loading commit data...
avconv_opt.c Loading commit data...
avconv_qsv.c Loading commit data...
avconv_vaapi.c Loading commit data...
avconv_vda.c Loading commit data...
avconv_vdpau.c Loading commit data...
avplay.c Loading commit data...
avprobe.c Loading commit data...
cmdutils.c Loading commit data...
cmdutils.h Loading commit data...
cmdutils_common_opts.h Loading commit data...
common.mak Loading commit data...
configure Loading commit data...
library.mak Loading commit data...
version.sh Loading commit data...