@@ -20,6 +20,9 @@ import sys
2020import warnings
2121from enum import Enum
2222
23+ cdef extern from " limits.h" :
24+ cdef unsigned short USHRT_MAX
25+
2326cdef extern from " Python.h" :
2427 wchar_t* PyUnicode_AsWideCharString(object , Py_ssize_t * )
2528
@@ -61,13 +64,18 @@ cdef extern from "libraw.h":
6164 LIBRAW_IMAGE_JPEG
6265 LIBRAW_IMAGE_BITMAP
6366
67+ ctypedef struct libraw_raw_inset_crop_t:
68+ ushort cleft, ctop
69+ ushort cwidth, cheight
70+
6471 ctypedef struct libraw_image_sizes_t:
6572 ushort raw_height, raw_width
6673 ushort height, width
6774 ushort top_margin, left_margin
6875 ushort iheight, iwidth
6976 double pixel_aspect
7077 int flip
78+ libraw_raw_inset_crop_t[2 ] raw_inset_crops
7179
7280 ctypedef struct libraw_colordata_t:
7381 float cam_mul[4 ]
@@ -249,7 +257,9 @@ ImageSizes = namedtuple('ImageSizes', ['raw_height', 'raw_width',
249257 ' height' , ' width' ,
250258 ' top_margin' , ' left_margin' ,
251259 ' iheight' , ' iwidth' ,
252- ' pixel_aspect' , ' flip' ])
260+ ' pixel_aspect' , ' flip' ,
261+ ' crop_left_margin' , ' crop_top_margin' , ' crop_width' , ' crop_height'
262+ ])
253263
254264class RawType (Enum ):
255265 """
@@ -568,11 +578,19 @@ cdef class RawPy:
568578 def __get__ (self ):
569579 self .ensure_unpack()
570580 cdef libraw_image_sizes_t* s = & self .p.imgdata.sizes
581+
582+ # LibRaw returns 65535 for cleft and ctop in some files - probably those that do not specify them
583+ cdef bint has_cleft = s.raw_inset_crops[0 ].cleft != USHRT_MAX
584+ cdef bint has_ctop = s.raw_inset_crops[0 ].ctop != USHRT_MAX
585+
571586 return ImageSizes(raw_height = s.raw_height, raw_width = s.raw_width,
572587 height = s.height, width = s.width,
573588 top_margin = s.top_margin, left_margin = s.left_margin,
574589 iheight = s.iheight, iwidth = s.iwidth,
575- pixel_aspect = s.pixel_aspect, flip = s.flip)
590+ pixel_aspect = s.pixel_aspect, flip = s.flip,
591+ crop_left_margin = s.raw_inset_crops[0 ].cleft if has_cleft else 0 ,
592+ crop_top_margin = s.raw_inset_crops[0 ].ctop if has_ctop else 0 ,
593+ crop_width = s.raw_inset_crops[0 ].cwidth, crop_height = s.raw_inset_crops[0 ].cheight)
576594
577595 property num_colors :
578596 """
0 commit comments