1
0
mirror of https://github.com/FFmpeg/FFmpeg.git synced 2025-01-13 21:28:01 +02:00
Go to file
Claudio Freire ca203e9985 AAC encoder: improve SF range utilization
This patch does 4 things, all of which interact and thus it
woudln't be possible to commit them separately without causing
either quality regressions or assertion failures.

Fate comparison targets don't all reflect improvements in
quality, yet listening tests show substantially improved quality
and stability.

1. Increase SF range utilization.

The spec requires SF delta values to be constrained within the
range -60..60. The previous code was applying that range to
the whole SF array and not only the deltas of consecutive values,
because doing so requires smarter code: zeroing or otherwise
skipping a band may invalidate lots of SF choices.

This patch implements that logic to allow the coders to utilize
the full dynamic range of scalefactors, increasing quality quite
considerably, and fixing delta-SF-related assertion failures,
since now the limitation is enforced rather than asserted.

2. PNS tweaks

The previous modification makes big improvements in twoloop's
efficiency, and every time that happens PNS logic needs to be
tweaked accordingly to avoid it from stepping all over twoloop's
decisions. This patch includes modifications of the sort.

3. Account for lowpass cutoff during PSY analysis

The closer PSY's allocation is to final allocation the better
the quality is, and given these modifications, twoloop is now
very efficient at avoiding holes. Thus, to compute accurate
thresholds, PSY needs to account for the lowpass applied
implicitly during twoloop (by zeroing high bands).

This patch makes twoloop set the cutoff in psymodel's context
the first time it runs, and makes PSY account for it during
threshold computation, making PE and threshold computations
closer to the final allocation and thus achieving better
subjective quality.

4. Tweaks to RC lambda tracking loop in relation to PNS

Without this tweak some corner cases cause quality regressions.
Basically, lambda needs to react faster to overall bitrate
efficiency changes since now PNS can be quite successful in
enforcing maximum bitrates, when PSY allocates too many bits
to the lower bands, suppressing the signals RC logic uses to
lower lambda in those cases and causing aggressive PNS.

This tweak makes PNS much less aggressive, though it can still
use some further tweaks.

Also update MIPS specializations and adjust fuzz

Also in lavc/mips/aacpsy_mips.h: remove trailing whitespace
2015-12-02 07:47:37 -03:00
compat os2threads: Add pthread_once() 2015-11-12 22:31:46 +01:00
doc doc/filters/drawtext: fix centering example 2015-12-01 15:25:17 -09:00
libavcodec AAC encoder: improve SF range utilization 2015-12-02 07:47:37 -03:00
libavdevice avdevice/dshow_enummediatypes: check return of av_malloc 2015-11-06 09:36:57 -05:00
libavfilter avfilter/af_volumedetect: use log10 instead of hardcoded constant 2015-12-01 19:31:58 -05:00
libavformat avformat/matroskadec: Fix sample_aspect_ratio for stereo matroska content 2015-12-02 11:09:07 +01:00
libavresample Merge commit 'e2854e731f843906d9a9a5b882bed872341999fd' 2015-11-10 18:07:41 +01:00
libavutil avutil/tablegen: add tablegen libm compatibility shims 2015-12-01 19:05:19 -05:00
libpostproc
libswresample swresample/resample: remove redundant L for floating literal 2015-11-15 10:26:43 -05:00
libswscale swscale/arm: add ff_nv{12,21}_to_{argb,rgba,abgr,bgra}_neon 2015-11-23 14:47:12 +01:00
presets
tests AAC encoder: improve SF range utilization 2015-12-02 07:47:37 -03:00
tools patcheck: Fix false detection of 'mergeable calls' when line is removed 2015-11-23 00:34:14 +01:00
.gitattributes
.gitignore
.travis.yml Merge commit 'eda183287489b2c705843aa373a19c4e46fb2fec' 2015-11-22 17:12:24 +00:00
arch.mak
Changelog Merge commit '4a0918cae6394e503b17c71f8f171b4a795eb849' 2015-11-29 15:49:31 +01:00
cmdutils_common_opts.h
cmdutils_opencl.c all: use FFDIFFSIGN to resolve possible undefined behavior in comparators 2015-11-03 16:28:30 -05:00
cmdutils.c all: use FFDIFFSIGN to resolve possible undefined behavior in comparators 2015-11-03 16:28:30 -05:00
cmdutils.h
common.mak
configure avcodec/libdcadec: require first public release 2015-11-29 12:53:14 -03:00
COPYING.GPLv2
COPYING.GPLv3
COPYING.LGPLv2.1
COPYING.LGPLv3
CREDITS
ffmpeg_dxva2.c
ffmpeg_filter.c ffmpeg_filter: remove redundant null ptr check 2015-11-11 01:51:52 +01:00
ffmpeg_opt.c
ffmpeg_qsv.c
ffmpeg_vdpau.c
ffmpeg_videotoolbox.c
ffmpeg.c ffmpeg: fix -copy_prior_start 0 with -copyts and input -ss 2015-11-20 19:20:30 +01:00
ffmpeg.h ffmpeg: Fixing typos and adding comments to fps code 2015-11-16 01:53:47 +01:00
ffplay.c
ffprobe.c ffprobe: add support for printing packet strings metadata as packet tags 2015-10-30 20:47:43 +01:00
ffserver_config.c
ffserver_config.h
ffserver.c ffserver: Clear avio context after closing it in rtp_new_av_stream() 2015-11-30 23:31:12 +01:00
INSTALL.md
library.mak
LICENSE.md
MAINTAINERS lavfi: remove astreamsync. 2015-11-07 16:43:36 +01:00
Makefile
README.md
RELEASE
version.sh

FFmpeg README

FFmpeg is a collection of libraries and tools to process multimedia content such as audio, video, subtitles and related metadata.

Libraries

  • libavcodec provides implementation of a wider range of codecs.
  • libavformat implements streaming protocols, container formats and basic I/O access.
  • libavutil includes hashers, decompressors and miscellaneous utility functions.
  • libavfilter provides a mean to alter decoded Audio and Video through chain of filters.
  • libavdevice provides an abstraction to access capture and playback devices.
  • libswresample implements audio mixing and resampling routines.
  • libswscale implements color conversion and scaling routines.

Tools

  • ffmpeg is a command line toolbox to manipulate, convert and stream multimedia content.
  • ffplay is a minimalistic multimedia player.
  • ffprobe is a simple analysis tool to inspect multimedia content.
  • ffserver is a multimedia streaming server for live broadcasts.
  • Additional small tools such as aviocat, ismindex and qt-faststart.

Documentation

The offline documentation is available in the doc/ directory.

The online documentation is available in the main website and in the wiki.

Examples

Coding examples are available in the doc/examples directory.

License

FFmpeg codebase is mainly LGPL-licensed with optional components licensed under GPL. Please refer to the LICENSE file for detailed information.

Contributing

Patches should be submitted to the ffmpeg-devel mailing list using git format-patch or git send-email. Github pull requests should be avoided because they are not part of our review process. Few developers follow pull requests so they will likely be ignored.