| 
				
				
					
				
				
				 | 
			
			 | 
			@@ -45,6 +45,11 @@ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#include "avcodec.h" | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#include "bytestream.h" | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#if HAVE_BIGENDIAN | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#include "bswapdsp.h" | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#endif | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#include "get_bits.h" | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#include "internal.h" | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#include "mathops.h" | 
		
		
	
	
		
			
				| 
				
					
				
				
					
				
				
				 | 
			
			 | 
			@@ -116,6 +121,10 @@ typedef struct EXRContext { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    AVFrame *picture; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    AVCodecContext *avctx; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#if HAVE_BIGENDIAN | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    BswapDSPContext bbdsp; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#endif | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    enum ExrCompr compression; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    enum ExrPixelType pixel_type; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    int channel_offsets[4]; // 0 = red, 1 = green, 2 = blue and 3 = alpha | 
		
		
	
	
		
			
				| 
				
					
				
				
					
				
				
				 | 
			
			 | 
			@@ -751,7 +760,8 @@ static int piz_uncompress(EXRContext *s, const uint8_t *src, int ssize, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    uint16_t maxval, min_non_zero, max_non_zero; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    uint16_t *ptr; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    uint16_t *tmp = (uint16_t *)td->tmp; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    uint8_t *out; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    uint16_t *out; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    uint16_t *in; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    int ret, i, j; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    int pixel_half_size;/* 1 for half, 2 for float and uint32 */ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    EXRChannel *channel; | 
		
		
	
	
		
			
				| 
				
					
				
				
					
				
				
				 | 
			
			 | 
			@@ -803,12 +813,11 @@ static int piz_uncompress(EXRContext *s, const uint8_t *src, int ssize, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    apply_lut(td->lut, tmp, dsize / sizeof(uint16_t)); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    out = td->uncompressed_data; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    out = (uint16_t *)td->uncompressed_data; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    for (i = 0; i < td->ysize; i++) { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        tmp_offset = 0; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        for (j = 0; j < s->nb_channels; j++) { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            uint16_t *in; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            EXRChannel *channel = &s->channels[j]; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            channel = &s->channels[j]; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            if (channel->pixel_type == EXR_HALF) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                pixel_half_size = 1; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            else | 
		
		
	
	
		
			
				| 
				
				
				
					
				
				 | 
			
			 | 
			@@ -816,8 +825,13 @@ static int piz_uncompress(EXRContext *s, const uint8_t *src, int ssize, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            in = tmp + tmp_offset * td->xsize * td->ysize + i * td->xsize * pixel_half_size; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            tmp_offset += pixel_half_size; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#if HAVE_BIGENDIAN | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            s->bbdsp.bswap16_buf(out, in, td->xsize * pixel_half_size); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#else | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            memcpy(out, in, td->xsize * 2 * pixel_half_size); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            out += td->xsize * 2 * pixel_half_size; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#endif | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            out += td->xsize * pixel_half_size; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
	
		
			
				| 
				
					
				
				
					
				
				
				 | 
			
			 | 
			@@ -1793,6 +1807,10 @@ static av_cold int decode_init(AVCodecContext *avctx) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    s->avctx              = avctx; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#if HAVE_BIGENDIAN | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    ff_bswapdsp_init(&s->bbdsp); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#endif | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    trc_func = avpriv_get_trc_function_from_trc(s->apply_trc_type); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    if (trc_func) { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        for (i = 0; i < 65536; ++i) { | 
		
		
	
	
		
			
				| 
				
					
				
				
				
				 | 
			
			 | 
			
  |