Commit 75abfab6 authored by Thomas Kühnel's avatar Thomas Kühnel Committed by Stefano Sabatini

lavc/tiff: add GeoTIFF support to the TIFF decoder

Work done for SOCIS 2011.

See thread:
Subject: [libav-devel] [PATCH 2/3] tiff: Add GeoTIFF support to the TIFF decoder
Date: Tue,  4 Oct 2011 00:19:52 +0200
Signed-off-by: 's avatarStefano Sabatini <stefasab@gmail.com>
parent fb571806
......@@ -444,8 +444,8 @@ OBJS-$(CONFIG_TARGA_ENCODER) += targaenc.o rle.o
OBJS-$(CONFIG_THEORA_DECODER) += xiph.o
OBJS-$(CONFIG_THP_DECODER) += mjpegdec.o mjpeg.o
OBJS-$(CONFIG_TIERTEXSEQVIDEO_DECODER) += tiertexseqv.o
OBJS-$(CONFIG_TIFF_DECODER) += tiff.o lzw.o faxcompr.o
OBJS-$(CONFIG_TIFF_ENCODER) += tiffenc.o rle.o lzwenc.o
OBJS-$(CONFIG_TIFF_DECODER) += tiff.o lzw.o faxcompr.o tiff_data.o
OBJS-$(CONFIG_TIFF_ENCODER) += tiffenc.o rle.o lzwenc.o tiff_data.o
OBJS-$(CONFIG_TMV_DECODER) += tmv.o cga_data.o
OBJS-$(CONFIG_TRUEHD_DECODER) += mlpdec.o mlpdsp.o
OBJS-$(CONFIG_TRUEMOTION1_DECODER) += truemotion1.o
......
This diff is collapsed.
......@@ -64,6 +64,12 @@ enum TiffTags{
TIFF_YCBCR_SUBSAMPLING = 0x212,
TIFF_YCBCR_POSITIONING = 0x213,
TIFF_REFERENCE_BW = 0x214,
TIFF_MODEL_TIEPOINT = 0x8482,
TIFF_MODEL_PIXEL_SCALE = 0x830E,
TIFF_MODEL_TRANSFORMATION = 0x8480,
TIFF_GEO_KEY_DIRECTORY = 0x87AF,
TIFF_GEO_DOUBLE_PARAMS = 0x87B0,
TIFF_GEO_ASCII_PARAMS = 0x87B1
};
/** list of TIFF compression types */
......@@ -86,11 +92,91 @@ enum TiffTypes{
TIFF_SHORT,
TIFF_LONG,
TIFF_RATIONAL,
TIFF_SBYTE,
TIFF_UNDEFINED,
TIFF_SSHORT,
TIFF_SLONG,
TIFF_SRATIONAL,
TIFF_FLOAT,
TIFF_DOUBLE,
TIFF_IFD
};
enum TiffGeoTagKey {
TIFF_GT_MODEL_TYPE_GEOKEY = 1024,
TIFF_GT_RASTER_TYPE_GEOKEY = 1025,
TIFF_GT_CITATION_GEOKEY = 1026,
TIFF_GEOGRAPHIC_TYPE_GEOKEY = 2048,
TIFF_GEOG_CITATION_GEOKEY = 2049,
TIFF_GEOG_GEODETIC_DATUM_GEOKEY = 2050,
TIFF_GEOG_PRIME_MERIDIAN_GEOKEY = 2051,
TIFF_GEOG_LINEAR_UNITS_GEOKEY = 2052,
TIFF_GEOG_LINEAR_UNIT_SIZE_GEOKEY = 2053,
TIFF_GEOG_ANGULAR_UNITS_GEOKEY = 2054,
TIFF_GEOG_ANGULAR_UNIT_SIZE_GEOKEY = 2055,
TIFF_GEOG_ELLIPSOID_GEOKEY = 2056,
TIFF_GEOG_SEMI_MAJOR_AXIS_GEOKEY = 2057,
TIFF_GEOG_SEMI_MINOR_AXIS_GEOKEY = 2058,
TIFF_GEOG_INV_FLATTENING_GEOKEY = 2059,
TIFF_GEOG_AZIMUTH_UNITS_GEOKEY = 2060,
TIFF_GEOG_PRIME_MERIDIAN_LONG_GEOKEY = 2061,
TIFF_PROJECTED_CS_TYPE_GEOKEY = 3072,
TIFF_PCS_CITATION_GEOKEY = 3073,
TIFF_PROJECTION_GEOKEY = 3074,
TIFF_PROJ_COORD_TRANS_GEOKEY = 3075,
TIFF_PROJ_LINEAR_UNITS_GEOKEY = 3076,
TIFF_PROJ_LINEAR_UNIT_SIZE_GEOKEY = 3077,
TIFF_PROJ_STD_PARALLEL1_GEOKEY = 3078,
TIFF_PROJ_STD_PARALLEL2_GEOKEY = 3079,
TIFF_PROJ_NAT_ORIGIN_LONG_GEOKEY = 3080,
TIFF_PROJ_NAT_ORIGIN_LAT_GEOKEY = 3081,
TIFF_PROJ_FALSE_EASTING_GEOKEY = 3082,
TIFF_PROJ_FALSE_NORTHING_GEOKEY = 3083,
TIFF_PROJ_FALSE_ORIGIN_LONG_GEOKEY = 3084,
TIFF_PROJ_FALSE_ORIGIN_LAT_GEOKEY = 3085,
TIFF_PROJ_FALSE_ORIGIN_EASTING_GEOKEY = 3086,
TIFF_PROJ_FALSE_ORIGIN_NORTHING_GEOKEY = 3087,
TIFF_PROJ_CENTER_LONG_GEOKEY = 3088,
TIFF_PROJ_CENTER_LAT_GEOKEY = 3089,
TIFF_PROJ_CENTER_EASTING_GEOKEY = 3090,
TIFF_PROJ_CENTER_NORTHING_GEOKEY = 3091,
TIFF_PROJ_SCALE_AT_NAT_ORIGIN_GEOKEY = 3092,
TIFF_PROJ_SCALE_AT_CENTER_GEOKEY = 3093,
TIFF_PROJ_AZIMUTH_ANGLE_GEOKEY = 3094,
TIFF_PROJ_STRAIGHT_VERT_POLE_LONG_GEOKEY = 3095,
TIFF_VERTICAL_CS_TYPE_GEOKEY = 4096,
TIFF_VERTICAL_CITATION_GEOKEY = 4097,
TIFF_VERTICAL_DATUM_GEOKEY = 4098,
TIFF_VERTICAL_UNITS_GEOKEY = 4099
};
enum TiffGeoTagType {
GEOTIFF_SHORT = 0,
GEOTIFF_DOUBLE = 34736,
GEOTIFF_STRING = 34737
};
/** sizes of various TIFF field types (string size = 100)*/
static const uint8_t type_sizes[6] = {
0, 1, 100, 2, 4, 8
static const uint8_t type_sizes[14] = {
0, 1, 100, 2, 4, 8, 1, 1, 2, 4, 8, 4, 8, 4
};
typedef struct TiffGeoTag {
enum TiffGeoTagKey key;
enum TiffTags type;
int count;
int offset;
char *val;
} TiffGeoTag;
typedef struct TiffGeoTagKeyName {
const enum TiffGeoTagKey key;
const char *const name;
} TiffGeoTagKeyName;
typedef struct TiffGeoTagNameType {
const char *const name;
const enum TiffGeoTagType type;
} TiffGeoTagNameType;
#endif /* AVCODEC_TIFF_H */
This diff is collapsed.
/*
* TIFF data tables
* Copyright (c) 2011 Thomas Kuehnel
*
* This file is part of Libav.
*
* Libav is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* Libav is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with Libav; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
/**
* @file
* TIFF data tables
* @author Thomas Kuehnel
* @see GeoTIFF specification at
* http://www.remotesensing.org/geotiff/spec/geotiffhome.html
*/
#ifndef AVCODEC_TIFF_DATA_H
#define AVCODEC_TIFF_DATA_H
#include "tiff.h"
#define TIFF_CONF_KEY_ID_OFFSET 1024
extern const TiffGeoTagNameType ff_tiff_conf_name_type_map[3];
#define TIFF_GEOG_KEY_ID_OFFSET 2048
extern const TiffGeoTagNameType ff_tiff_geog_name_type_map[14];
#define TIFF_PROJ_KEY_ID_OFFSET 3072
extern const TiffGeoTagNameType ff_tiff_proj_name_type_map[24];
#define TIFF_VERT_KEY_ID_OFFSET 4096
extern const TiffGeoTagNameType ff_tiff_vert_name_type_map[4];
#define TIFF_GEO_KEY_UNDEFINED 0
#define TIFF_GEO_KEY_USER_DEFINED 32767
#define TIFF_GT_MODEL_TYPE_OFFSET 1
extern const char *const ff_tiff_gt_model_type_codes[3];
#define TIFF_GT_RASTER_TYPE_OFFSET 1
extern const char *const ff_tiff_gt_raster_type_codes[2];
#define TIFF_LINEAR_UNIT_OFFSET 9001
extern const char *const ff_tiff_linear_unit_codes[15];
#define TIFF_ANGULAR_UNIT_OFFSET 9101
extern const char *const ff_tiff_angular_unit_codes[8];
#define TIFF_GCS_TYPE_OFFSET 4201
extern const char *const ff_tiff_gcs_type_codes[133];
#define TIFF_GCSE_TYPE_OFFSET 4001
extern const char *const ff_tiff_gcse_type_codes[35];
#define TIFF_GEODETIC_DATUM_OFFSET 6201
extern const char *const ff_tiff_geodetic_datum_codes[120];
#define TIFF_GEODETIC_DATUM_E_OFFSET 6001
extern const char *const ff_tiff_geodetic_datum_e_codes[35];
#define TIFF_ELLIPSOID_OFFSET 7001
extern const char *const ff_tiff_ellipsoid_codes[35];
#define TIFF_PRIME_MERIDIAN_OFFSET 8901
extern const char *const ff_tiff_prime_meridian_codes[11];
extern const TiffGeoTagKeyName ff_tiff_proj_cs_type_codes[978];
extern const TiffGeoTagKeyName ff_tiff_projection_codes[298];
#define TIFF_COORD_TRANS_OFFSET 1
extern const char *const ff_tiff_coord_trans_codes[27];
#define TIFF_VERT_CS_OFFSET 5001
extern const char *const ff_tiff_vert_cs_codes[32];
#define TIFF_ORTHO_VERT_CS_OFFSET 5101
extern const char *const ff_tiff_ortho_vert_cs_codes[6];
#endif
......@@ -44,8 +44,8 @@
#define TIFF_MAX_ENTRY 32
/** sizes of various TIFF field types (string size = 1)*/
static const uint8_t type_sizes2[6] = {
0, 1, 1, 2, 4, 8
static const uint8_t type_sizes2[14] = {
0, 1, 1, 2, 4, 8, 1, 1, 2, 4, 8, 4, 8, 4
};
typedef struct TiffEncoderContext {
......
......@@ -28,7 +28,7 @@
#define LIBAVCODEC_VERSION_MAJOR 54
#define LIBAVCODEC_VERSION_MINOR 38
#define LIBAVCODEC_VERSION_MICRO 100
#define LIBAVCODEC_VERSION_MICRO 101
#define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \
LIBAVCODEC_VERSION_MINOR, \
......
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