1. 27 Mar, 2017 1 commit
    • wm4's avatar
      avformat, ffmpeg: deprecate old rotation API · ddef3d90
      wm4 authored
      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: 's avatarMichael Niedermayer <michael@niedermayer.cc>
      Reviewed-by: 's avatarMichael Niedermayer <michael@niedermayer.cc>
      ddef3d90
  2. 23 Mar, 2017 2 commits
    • wm4's avatar
      lavc: vdpau: Add support for new hw_frames_ctx and hw_device_ctx API · 7e4ba776
      wm4 authored
      This supports retrieving the device from a provided hw_frames_ctx, and
      automatically creating a hw_frames_ctx if hw_device_ctx is set.
      
      The old API is not deprecated yet. The user can still use
      av_vdpau_bind_context() (with or without setting hw_frames_ctx), or use
      the API before that by allocating and setting hwaccel_context manually.
      
      Cherry-picked from Libav commit 1a7ddba5.
      (Adds missing APIchanges entry to the Libav version.)
      Reviewed-by: 's avatarMark Thompson <sw@jkqxz.net>
      7e4ba776
    • wm4's avatar
      lavc: Add hwaccel_flags field to AVCodecContext · 156bd827
      wm4 authored
      This "reuses" the flags introduced for the av_vdpau_bind_context() API
      function, and makes them available to all hwaccels. This does not affect
      the current vdpau API, as av_vdpau_bind_context() should obviously
      override the AVCodecContext.hwaccel_flags flags for the sake of
      compatibility.
      
      Cherry-picked from Libav commit 16a163b5.
      Reviewed-by: 's avatarMark Thompson <sw@jkqxz.net>
      156bd827
  3. 21 Mar, 2017 1 commit
    • wm4's avatar
      avcodec, avformat: deprecate anything related to side data merging · d682ae70
      wm4 authored
      This patch deprecates anything that has to do with merging/splitting
      side data. Automatic side data merging (and splitting), as well as all
      API symbols involved in it, are removed completely.
      
      Two FF_API_ defines are dedicated to deprecating API symbols related to
      this: FF_API_MERGE_SD_API removes av_packet_split/merge_side_data in
      libavcodec, and FF_API_LAVF_KEEPSIDE_FLAG deprecates
      AVFMT_FLAG_KEEP_SIDE_DATA in libavformat.
      
      Since it was claimed that changing the default from merging side data to
      not doing it is an ABI change, there are two additional FF_API_ defines,
      which stop using the side data merging/splitting by default (and remove
      any code in avformat/avcodec doing this): FF_API_MERGE_SD in libavcodec,
      and FF_API_LAVF_MERGE_SD in libavformat.
      
      It is very much intended that FF_API_MERGE_SD and FF_API_LAVF_MERGE_SD
      are quickly defined to 0 in the next ABI bump, while the API symbols are
      retained for a longer time for the sake of compatibility.
      AVFMT_FLAG_KEEP_SIDE_DATA will (very much intentionally) do nothing for
      most of the time it will still be defined. Keep in mind that no code
      exists that actually tries to unset this flag for any reason, nor does
      such code need to exist. Code setting this flag explicitly will work as
      before. Thus it's ok for AVFMT_FLAG_KEEP_SIDE_DATA to do nothing once
      side data merging has been removed from libavformat.
      
      In order to avoid that anyone in the future does this incorrectly, here
      is a small guide how to update the internal code on bumps:
      
      - next ABI bump (probably soon):
        - define FF_API_LAVF_MERGE_SD to 0, and remove all code covered by it
        - define FF_API_MERGE_SD to 0, and remove all code covered by it
      - next API bump (typically two years in the future or so):
        - define FF_API_LAVF_KEEPSIDE_FLAG to 0, and remove all code covered
          by it
        - define FF_API_MERGE_SD_API to 0, and remove all code covered by it
      
      This forces anyone who actually wants packet side data to temporarily
      use deprecated API to get it all. If you ask me, this is batshit fucked
      up crazy, but it's how we roll. Making AVFMT_FLAG_KEEP_SIDE_DATA to be
      set by default was rejected as an ABI change, so I'm going all the way
      to get rid of this once and for all.
      Reviewed-by: 's avatarJames Almer <jamrial@gmail.com>
      Reviewed-by: 's avatarRostislav Pehlivanov <atomnuker@gmail.com>
      Reviewed-by: 's avatarMichael Niedermayer <michael@niedermayer.cc>
      d682ae70
  4. 20 Mar, 2017 2 commits
  5. 18 Mar, 2017 1 commit
  6. 07 Mar, 2017 1 commit
  7. 02 Mar, 2017 2 commits
    • wm4's avatar
      avcodec/videotoolbox: allow not setting the kCVPixelBufferPixelFormatTypeKey · ade7c1a2
      wm4 authored
      If AVVideotoolboxContext.cv_pix_fmt_type is set to 0, don't set the
      kCVPixelBufferPixelFormatTypeKey value on the VT decoder.
      
      This makes VT output its native format, which can be much faster on
      some hardware iterations (if the native format does not match with
      the requested format, it will be converted, which is slow).
      
      The default is still forcing nv12.
      ade7c1a2
    • wm4's avatar
      avcodec, avutil, avformat: remove AVOption requirement for some fields · 554bc4ee
      wm4 authored
      Allow all struct fields to be accessed directly, as long as they're
      public.
      
      Before this change, many fields were "public", but could be accessed via
      AVOption only. This meant they were effectively not public, but were
      present for documentation purposes, which was incredibly confusing at
      best.
      554bc4ee
  8. 13 Feb, 2017 2 commits
    • Mark Thompson's avatar
      lavc: Add device context field to AVCodecContext · c1a5fca0
      Mark Thompson authored
      For use by codec implementations which can allocate frames internally.
      c1a5fca0
    • wm4's avatar
      AVFrame: add an opaque_ref field · e3af49b1
      wm4 authored
      This is an extended version of the AVFrame.opaque field, which can be
      used to attach arbitrary user information to an AVFrame.
      
      The usefulness of the opaque field is rather limited, because it can
      store only up to 32 bits of information (or 64 bit on 64 bit systems).
      It's not possible to set this field to a memory allocation, because
      there is no way to deallocate it correctly.
      
      The opaque_ref field circumvents this by letting the user set an
      AVBuffer, which makes the user data refcounted.
      Signed-off-by: 's avatarAnton Khirnov <anton@khirnov.net>
      
      Merges Libav commit 04f3bd34.
      e3af49b1
  9. 24 Jan, 2017 1 commit
    • Marton Balint's avatar
      avutil/channel_layout: add av_get_extended_channel_layout · c4618f84
      Marton Balint authored
      Return a channel layout and the number of channels based on the specified name.
      
      This function is similar to av_get_channel_layout(), but can also parse unknown
      channel layout specifications.
      
      Unknown channel layout specifications are a decimal number and a capital 'C'
      suffix, in order to not break compatibility with the lowercase 'c' suffix,
      which is used for a guessed channel layout with the specified number of
      channels.
      Signed-off-by: 's avatarMarton Balint <cus@passwd.hu>
      c4618f84
  10. 22 Jan, 2017 1 commit
  11. 17 Jan, 2017 1 commit
  12. 12 Jan, 2017 1 commit
  13. 07 Jan, 2017 1 commit
  14. 10 Dec, 2016 1 commit
  15. 07 Dec, 2016 2 commits
  16. 19 Nov, 2016 1 commit
  17. 13 Nov, 2016 2 commits
  18. 09 Nov, 2016 1 commit
  19. 26 Oct, 2016 2 commits
  20. 24 Oct, 2016 2 commits
  21. 22 Oct, 2016 1 commit
  22. 12 Oct, 2016 3 commits
  23. 02 Oct, 2016 1 commit
  24. 30 Sep, 2016 1 commit
  25. 28 Sep, 2016 1 commit
  26. 27 Sep, 2016 3 commits
  27. 23 Sep, 2016 1 commit
  28. 19 Sep, 2016 1 commit