Commit 993a5afa authored by Carl Eugen Hoyos's avatar Carl Eugen Hoyos

Read aspect ratio from tiff image files.

parent 845414bb
......@@ -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
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment