[FFmpeg-trac] #6945(undetermined:new): ffmpeg fails at jpeg EXIF orientation (test included)

FFmpeg trac at avcodec.org
Thu Jan 4 18:38:51 EET 2018


#6945: ffmpeg fails at jpeg EXIF orientation (test included)
-------------------------------------+-------------------------------------
             Reporter:  JohnnyX      |                     Type:  defect
               Status:  new          |                 Priority:  important
            Component:               |                  Version:
  undetermined                       |  unspecified
             Keywords:               |               Blocked By:
  exif,jpg,jpeg,orientation          |  Reproduced by developer:  0
             Blocking:               |
Analyzed by developer:  0            |
-------------------------------------+-------------------------------------
 Summary of the bug:

 If you try viewing these test images in any other image viewer, they'll
 all display them correctly (all in the same orientation). Ffmpeg on the
 other hand fails to display them correctly.

 This is a major issue when using ffmpeg-based players as an image viewer,
 because most images these days (from digital cameras and phones) use EXIF
 orientation to tell the viewer how to display the image.

 Trying to use ffmpeg as an image viewer currently leads to a sad
 experience where images are rotated and flipped into crazy angles, rather
 than being displayed correctly. ;-)

 How to reproduce:

 - Download EXIF orientation test images from this repository (it covers
 all available JPG orientations): https://github.com/recurser/exif-
 orientation-examples

 - Try viewing/converting the JPEG with ffmpeg:

 {{{
 ffmpeg -i Landscape_2.jpg test.png
 }}}

 - The result will be badly flipped/rotated.

 - All images are supposed to look identical (as they will in a correct
 viewer).

 What needs fixing:

 - 4 years ago (2014), ffmpeg added EXIF metadata reading:
 http://git.videolan.org/?p=ffmpeg.git;a=commitdiff;h=bb4e1b4cf910af0de2bc884c75544603c40010cc

 - 3 years ago (2015), ffmpeg added video autorotation:
 http://git.videolan.org/?p=ffmpeg.git;a=commitdiff;h=f5b26fbc2f564831b337f1de9faaaf6753a03871

 - According to discussions (https://trac.ffmpeg.org/ticket/4149 and
 https://trac.ffmpeg.org/ticket/515), ffmpeg's stance is that it should
 always autorotate/autoflip the input by default to respect display-
 orientation flags. So ffmpeg missing the "orientation fix" for JPEG is
 just an oversight.

 - So the fix would be: "If input format == jpeg/exif with `orientation`
 flag, apply the orientation filters to the output".

 There are 8 JPEG EXIF orientations. They represent various combinations of
 rotate + vflip + hflip. And all of the code for rotate/flip filters is
 already available in ffmpeg. Just look at the video autorotate code above.
 It seems to be very easy to add this JPEG fix by just looking at that
 commit and the EXIF commit.

 I don't know this codebase at all and would just screw it up if I attempt
 this fix. Hopefully someone here wants to fix ffmpeg's broken JPEG
 support. It's important these days, since most camera sensors capture
 pixels in a single orientation and then add an EXIF `orientation` tag to
 assign the display-orientation. By lacking that feature, ffmpeg currently
 fails badly at almost all JPEG input.

--
Ticket URL: <https://trac.ffmpeg.org/ticket/6945>
FFmpeg <https://ffmpeg.org>
FFmpeg issue tracker


More information about the FFmpeg-trac mailing list