avformat, ffmpeg: deprecate old rotation API
authorwm4 <nfxjfg@googlemail.com>
Tue, 21 Mar 2017 07:02:58 +0000 (08:02 +0100)
committerwm4 <nfxjfg@googlemail.com>
Mon, 27 Mar 2017 11:20:27 +0000 (13:20 +0200)
commitddef3d902f0e4cbd6be6b3e5df7ec158ce51488b
tree4ad8e58c64b32414728816a322aae878bd6f9c3a
parentb12693facf991f343cdf310690f59f69143b256f
avformat, ffmpeg: deprecate old rotation API

The old "API" that signaled rotation as a metadata value has been
replaced by DISPLAYMATRIX side data quite a while ago.

There is no reason to make muxers/demuxers/API users support both. In
addition, the metadata API is dangerous, as user tags could "leak" into
it, creating unintended features or bugs.

ffmpeg CLI has to be updated to use the new API. In particular, we must
not allow to leak the "rotate" tag into the muxer. Some muxers will
catch this properly (like mov), but others (like mkv) can add it as
generic tag. Note applications, which use libavformat and assume the
old rotate API, will interpret such "rotate" user tags as rotate
metadata (which it is not), and incorrectly rotate the video.

The ffmpeg/ffplay tools drop the use of the old API for muxing and
demuxing, as all muxers/demuxers support the new API. This will mean
that the tools will not mistakenly interpret per-track "rotate" user
tags as rotate metadata. It will _not_ be treated as regression.

Unfortunately, hacks have been added, that allow the user to override
rotation by setting metadata explicitly, e.g. via

  -metadata:s:v:0 rotate=0

See references to trac #4560. fate-filter-meta-4560-rotate0 tests this.
It's easier to adjust the hack for supporting it than arguing for its
removal, so ffmpeg CLI now explicitly catches this case, and essentially
replaces the "rotate" value with a display matrix side data. (It would
be easier for both user and implementation to create an explicit option
for rotation.)

When the code under FF_API_OLD_ROTATE_API is disabled, one FATE
reference file has to be updated (because "rotate" is not exported
anymore).

Tested-by: Michael Niedermayer <michael@niedermayer.cc>
Reviewed-by: Michael Niedermayer <michael@niedermayer.cc>
cmdutils.c
doc/APIchanges
ffmpeg.c
ffmpeg.h
ffmpeg_opt.c
libavformat/mov.c
libavformat/movenc.c
libavformat/version.h