Read aspect ratio from tiff image files.
This commit is contained in:
		
							parent
							
								
									845414bbb1
								
							
						
					
					
						commit
						993a5afaad
					
				@ -58,6 +58,7 @@ typedef struct TiffContext {
 | 
			
		||||
    int fax_opts;
 | 
			
		||||
    int predictor;
 | 
			
		||||
    int fill_order;
 | 
			
		||||
    uint32_t res[4];
 | 
			
		||||
 | 
			
		||||
    int strips, rps, sstype;
 | 
			
		||||
    int sot;
 | 
			
		||||
@ -566,9 +567,19 @@ static int init_image(TiffContext *s, ThreadFrame *frame)
 | 
			
		||||
    return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void set_sar(TiffContext *s, unsigned tag, unsigned num, unsigned den)
 | 
			
		||||
{
 | 
			
		||||
    int offset = tag == TIFF_YRES ? 2 : 0;
 | 
			
		||||
    s->res[offset++] = num;
 | 
			
		||||
    s->res[offset]   = den;
 | 
			
		||||
    if (s->res[0] && s->res[1] && s->res[2] && s->res[3])
 | 
			
		||||
        av_reduce(&s->avctx->sample_aspect_ratio.num, &s->avctx->sample_aspect_ratio.den,
 | 
			
		||||
                  s->res[2] * (uint64_t)s->res[1], s->res[0] * (uint64_t)s->res[3], INT32_MAX);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int tiff_decode_tag(TiffContext *s, AVFrame *frame)
 | 
			
		||||
{
 | 
			
		||||
    unsigned tag, type, count, off, value = 0;
 | 
			
		||||
    unsigned tag, type, count, off, value = 0, value2 = 0;
 | 
			
		||||
    int i, j, k, pos, start;
 | 
			
		||||
    int ret;
 | 
			
		||||
    uint32_t *pal;
 | 
			
		||||
@ -587,6 +598,10 @@ static int tiff_decode_tag(TiffContext *s, AVFrame *frame)
 | 
			
		||||
        case TIFF_LONG:
 | 
			
		||||
            value = ff_tget(&s->gb, type, s->le);
 | 
			
		||||
            break;
 | 
			
		||||
        case TIFF_RATIONAL:
 | 
			
		||||
            value  = ff_tget(&s->gb, TIFF_LONG, s->le);
 | 
			
		||||
            value2 = ff_tget(&s->gb, TIFF_LONG, s->le);
 | 
			
		||||
            break;
 | 
			
		||||
        case TIFF_STRING:
 | 
			
		||||
            if (count <= 4) {
 | 
			
		||||
                break;
 | 
			
		||||
@ -717,6 +732,10 @@ static int tiff_decode_tag(TiffContext *s, AVFrame *frame)
 | 
			
		||||
            return AVERROR_INVALIDDATA;
 | 
			
		||||
        }
 | 
			
		||||
        break;
 | 
			
		||||
    case TIFF_XRES:
 | 
			
		||||
    case TIFF_YRES:
 | 
			
		||||
        set_sar(s, tag, value, value2);
 | 
			
		||||
        break;
 | 
			
		||||
    case TIFF_TILE_BYTE_COUNTS:
 | 
			
		||||
    case TIFF_TILE_LENGTH:
 | 
			
		||||
    case TIFF_TILE_OFFSETS:
 | 
			
		||||
 | 
			
		||||
@ -14,7 +14,7 @@ pkt_size=67604
 | 
			
		||||
width=200
 | 
			
		||||
height=112
 | 
			
		||||
pix_fmt=rgb24
 | 
			
		||||
sample_aspect_ratio=N/A
 | 
			
		||||
sample_aspect_ratio=1:1
 | 
			
		||||
pict_type=?
 | 
			
		||||
coded_picture_number=0
 | 
			
		||||
display_picture_number=0
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user