ffmpeg | branch: master | Nick Renieris <[email protected]> | Thu Aug 29 
16:10:47 2019 +0300| [c510ed2ee8b3d5ec373d9d8a7e5a25c132ca620e] | committer: 
Paul B Mahol

lavc/tiff: Force DNG pixel data endianness on an edge case

This fixes "X7 RAW" and "X7 CinemaDNG" samples here:
- https://www.dji.com/gr/zenmuse-x7/info#downloads

Signed-off-by: Nick Renieris <[email protected]>

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=c510ed2ee8b3d5ec373d9d8a7e5a25c132ca620e
---

 libavcodec/tiff.c | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/libavcodec/tiff.c b/libavcodec/tiff.c
index b4015178f2..8cbcbdf7a5 100644
--- a/libavcodec/tiff.c
+++ b/libavcodec/tiff.c
@@ -1038,6 +1038,18 @@ static int init_image(TiffContext *s, ThreadFrame *frame)
                    AV_RL32(s->pattern));
             return AVERROR_PATCHWELCOME;
         }
+        /* Force endianness as mentioned in 'DNG Specification: Chapter 3: 
BitsPerSample'
+           NOTE: The spec actually specifies big-endian, not sure why we need 
little-endian, but
+                 such images don't work otherwise. Examples are images 
produced by Zenmuse X7. */
+        if ((s->tiff_type == TIFF_TYPE_DNG || s->tiff_type == 
TIFF_TYPE_CINEMADNG)
+            && (s->bpp != 8 && s->bpp != 16 && s->bpp != 32)) {
+            switch (s->avctx->pix_fmt) {
+            case AV_PIX_FMT_BAYER_RGGB16BE: s->avctx->pix_fmt = 
AV_PIX_FMT_BAYER_RGGB16LE; break;
+            case AV_PIX_FMT_BAYER_BGGR16BE: s->avctx->pix_fmt = 
AV_PIX_FMT_BAYER_BGGR16LE; break;
+            case AV_PIX_FMT_BAYER_GBRG16BE: s->avctx->pix_fmt = 
AV_PIX_FMT_BAYER_GBRG16LE; break;
+            case AV_PIX_FMT_BAYER_GRBG16BE: s->avctx->pix_fmt = 
AV_PIX_FMT_BAYER_GRBG16LE; break;
+            }
+        }
         break;
     case 10161:
         switch (AV_RL32(s->pattern)) {

_______________________________________________
ffmpeg-cvslog mailing list
[email protected]
https://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog

To unsubscribe, visit link above, or email
[email protected] with subject "unsubscribe".

Reply via email to