FFmpeg's WMA doesn't properly skip encoder delay (as big as 4096 samples), and is missing last frame samples after EOF, so final output is off.
This can be tested comparing the output of any player or program using Microsoft's codec API (Windows Media Foundation) vs ffmpeg.exe. With skip+last frame output is correct compared to those.
Noticeable in old videogames using WMA, that need gapless to loop properly (ex.- Castlevania: Symphony of the Night Xbox).
Skip value in WMA seems fixed, I don't think it's specified in the container (ASF/XWMA) or the bitstream.
I'll provide a patch and leave some samples here that show FFmpeg vs Microsoft decoding.
How to reproduce:
$ ffmpeg.exe -i wma_2ch_44100_48khz.wma wma_2ch_44100_48khz_ffmpeg.wav
ffmpeg version N-92112-g03123e4053 Copyright (c) 2000-2018 the FFmpeg developers
built with gcc 8.2.1 (GCC) 20180813
configuration: --enable-gpl --enable-version3 --enable-sdl2 --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libtheora --enable-libtwolame --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libzimg --enable-lzma --enable-zlib --enable-gmp --enable-libvidstab --enable-libvorbis --enable-libvo-amrwbenc --enable-libmysofa --enable-libspeex --enable-libxvid --enable-libaom --enable-libmfx --enable-amf --enable-ffnvcodec --enable-cuvid --enable-d3d11va --enable-nvenc --enable-nvdec --enable-dxva2 --enable-avisynth
libavutil 56. 19.101 / 56. 19.101
libavcodec 58. 32.100 / 58. 32.100
libavformat 58. 18.104 / 58. 18.104
libavdevice 58. 4.105 / 58. 4.105
libavfilter 7. 33.100 / 7. 33.100
libswscale 5. 2.100 / 5. 2.100
libswresample 3. 2.100 / 3. 2.100
libpostproc 55. 2.100 / 55. 2.100
Guessed Channel Layout for Input Stream #0.0 : stereo
Input #0, asf, from 'wma_2ch_44100_48khz.wma':
Metadata:
WMFSDKNeeded : 0.0.0.0000
DeviceConformanceTemplate: L2
WMFSDKVersion : 12.0.7601.17514
IsVBR : 0
Duration: 00:00:02.04, start: 0.000000, bitrate: 72 kb/s
Stream #0:0(spa): Audio: wmav2 (a[1][0][0] / 0x0161), 44100 Hz, stereo, fltp, 48 kb/s
Stream mapping:
Stream #0:0 -> #0:0 (wmav2 (native) -> pcm_s16le (native))
Press [q] to stop, [?] for help
Output #0, wav, to 'wma_2ch_44100_48khz_ffmpeg.wav':
Metadata:
WMFSDKNeeded : 0.0.0.0000
DeviceConformanceTemplate: L2
WMFSDKVersion : 12.0.7601.17514
IsVBR : 0
ISFT : Lavf58.18.104
Stream #0:0(spa): Audio: pcm_s16le ([1][0][0][0] / 0x0001), 44100 Hz, stereo, s16, 1411 kb/s
Metadata:
encoder : Lavc58.32.100 pcm_s16le
size= 360kB time=00:00:02.04 bitrate=1443.7kbits/s speed= 511x
video:0kB audio:360kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.021159%
I think this ticket can be closed as the requested changes seem to be implemented by commit 19802d170a304f5853d92e01d0513b9e06897d61.