Skip to content
Snippets Groups Projects
  1. Oct 14, 2018
  2. Oct 09, 2018
  3. Oct 07, 2018
  4. Sep 30, 2018
  5. Sep 17, 2018
  6. Sep 05, 2018
  7. Sep 01, 2018
  8. Aug 28, 2018
  9. Aug 07, 2018
  10. Jul 28, 2018
  11. Jul 13, 2018
  12. Jul 02, 2018
  13. Jun 28, 2018
  14. Jun 26, 2018
  15. Jun 22, 2018
  16. Jun 20, 2018
  17. Jun 17, 2018
  18. Jun 14, 2018
  19. Jun 09, 2018
  20. Jun 08, 2018
  21. Jun 04, 2018
  22. May 29, 2018
  23. May 28, 2018
  24. May 09, 2018
  25. May 02, 2018
  26. Apr 30, 2018
  27. Apr 28, 2018
  28. Apr 25, 2018
  29. Apr 18, 2018
  30. Apr 17, 2018
  31. Apr 04, 2018
  32. Apr 03, 2018
    • wm4's avatar
      avutil/pixdesc: deprecate AV_PIX_FMT_FLAG_PSEUDOPAL · d6fc031c
      wm4 authored
      PSEUDOPAL pixel formats are not paletted, but carried a palette with the
      intention of allowing code to treat unpaletted formats as paletted. The
      palette simply mapped the byte values to the resulting RGB values,
      making it some sort of LUT for RGB conversion.
      
      It was used for 1 byte formats only: RGB4_BYTE, BGR4_BYTE, RGB8, BGR8,
      GRAY8. The first 4 are awfully obscure, used only by some ancient bitmap
      formats. The last one, GRAY8, is more common, but its treatment is
      grossly incorrect. It considers full range GRAY8 only, so GRAY8 coming
      from typical Y video planes was not mapped to the correct RGB values.
      This cannot be fixed, because AVFrame.color_range can be freely changed
      at runtime, and there is nothing to ensure the pseudo palette is
      updated.
      
      Also, nothing actually used the PSEUDOPAL palette data, except xwdenc
      (trivially changed in the previous commit). All other code had to treat
      it as a special case, just to ignore or to propagate palette data.
      
      In conclusion, this was just a very strange old mechnaism that has no
      real justification to exist anymore (although it may have been nice and
      useful in the past). Now it's an artifact that makes the API harder to
      use: API users who allocate their own pixel data have to be aware that
      they need to allocate the palette, or FFmpeg will crash on them in
      _some_ situations. On top of this, there was no API to allocate the
      pseuo palette outside of av_frame_get_buffer().
      
      This patch not only deprecates AV_PIX_FMT_FLAG_PSEUDOPAL, but also makes
      the pseudo palette optional. Nothing accesses it anymore, though if it's
      set, it's propagated. It's still allocated and initialized for
      compatibility with API users that rely on this feature. But new API
      users do not need to allocate it. This was an explicit goal of this
      patch.
      
      Most changes replace AV_PIX_FMT_FLAG_PSEUDOPAL with FF_PSEUDOPAL. I
      first tried #ifdefing all code, but it was a mess. The FF_PSEUDOPAL
      macro reduces the mess, and still allows defining FF_API_PSEUDOPAL to 0.
      
      Passes FATE with FF_API_PSEUDOPAL enabled and disabled. In addition,
      FATE passes with FF_API_PSEUDOPAL set to 1, but with allocation
      functions manually changed to not allocating a palette.
      d6fc031c
Loading