Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
4349 Serge 1
/*
2
 * TIFF Common Routines
3
 * Copyright (c) 2013 Thilo Borgmann 
4
 *
5
 * This file is part of FFmpeg.
6
 *
7
 * FFmpeg is free software; you can redistribute it and/or
8
 * modify it under the terms of the GNU Lesser General Public
9
 * License as published by the Free Software Foundation; either
10
 * version 2.1 of the License, or (at your option) any later version.
11
 *
12
 * FFmpeg is distributed in the hope that it will be useful,
13
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15
 * Lesser General Public License for more details.
16
 *
17
 * You should have received a copy of the GNU Lesser General Public
18
 * License along with FFmpeg; if not, write to the Free Software
19
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20
 */
21
 
22
/**
23
 * @file
24
 * TIFF Common Routines
25
 * @author Thilo Borgmann 
26
 */
27
 
28
#ifndef AVCODEC_TIFF_COMMON_H
29
#define AVCODEC_TIFF_COMMON_H
30
 
31
#include "avcodec.h"
32
#include "tiff.h"
33
#include "bytestream.h"
34
#include "libavutil/bprint.h"
35
 
36
/** data type identifiers for TIFF tags */
37
enum TiffTypes {
38
    TIFF_BYTE = 1,
39
    TIFF_STRING,
40
    TIFF_SHORT,
41
    TIFF_LONG,
42
    TIFF_RATIONAL,
43
    TIFF_SBYTE,
44
    TIFF_UNDEFINED,
45
    TIFF_SSHORT,
46
    TIFF_SLONG,
47
    TIFF_SRATIONAL,
48
    TIFF_FLOAT,
49
    TIFF_DOUBLE,
50
    TIFF_IFD
51
};
52
 
53
/** sizes of various TIFF field types (string size = 100)*/
54
static const uint8_t type_sizes[14] = {
55
    0, 1, 100, 2, 4, 8, 1, 1, 2, 4, 8, 4, 8, 4
56
};
57
 
58
static const uint16_t ifd_tags[] = {
59
    0x8769, // EXIF IFD
60
    0x8825, // GPS IFD
61
    0xA005  // Interoperability IFD
62
};
63
 
64
 
65
/** Returns a value > 0 if the tag is a known IFD-tag.
66
 *  The return value is the array index + 1 within ifd_tags[].
67
 */
68
int ff_tis_ifd(unsigned tag);
69
 
70
/** Reads a short from the bytestream using given endianess. */
71
unsigned ff_tget_short(GetByteContext *gb, int le);
72
 
73
/** Reads a long from the bytestream using given endianess. */
74
unsigned ff_tget_long(GetByteContext *gb, int le);
75
 
76
/** Reads a double from the bytestream using given endianess. */
77
double   ff_tget_double(GetByteContext *gb, int le);
78
 
79
/** Reads a byte from the bytestream using given endianess. */
80
unsigned ff_tget(GetByteContext *gb, int type, int le);
81
 
82
/** Returns an allocated string containing count
83
 *  rational values using the given separator.
84
 */
85
char *ff_trationals2str(int *rp, int count, const char *sep);
86
 
87
/** Returns an allocated string containing count
88
 *  long values using the given separator.
89
 */
90
char *ff_tlongs2str(int32_t *lp, int count, const char *sep);
91
 
92
/** Returns an allocated string containing count
93
 *  double values using the given separator.
94
 */
95
char *ff_tdoubles2str(double *dp, int count, const char *sep);
96
 
97
/** Returns an allocated string containing count
98
 *  short values using the given separator.
99
 */
100
char *ff_tshorts2str(int16_t *sp, int count, const char *sep);
101
 
102
/** Adds count rationals converted to a string
103
 *  into the metadata dictionary.
104
 */
105
int ff_tadd_rational_metadata(int count, const char *name, const char *sep,
106
                              GetByteContext *gb, int le, AVDictionary **metadata);
107
 
108
/** Adds count longs converted to a string
109
 *  into the metadata dictionary.
110
 */
111
int ff_tadd_long_metadata(int count, const char *name, const char *sep,
112
                          GetByteContext *gb, int le, AVDictionary **metadata);
113
 
114
/** Adds count doubles converted to a string
115
 *  into the metadata dictionary.
116
 */
117
int ff_tadd_doubles_metadata(int count, const char *name, const char *sep,
118
                             GetByteContext *gb, int le, AVDictionary **metadata);
119
 
120
/** Adds count shorts converted to a string
121
 *  into the metadata dictionary.
122
 */
123
int ff_tadd_shorts_metadata(int count, const char *name, const char *sep,
124
                            GetByteContext *gb, int le, AVDictionary **metadata);
125
 
126
/** Adds count bytes converted to a string
127
 *  into the metadata dictionary.
128
 */
129
int ff_tadd_bytes_metadata(int count, const char *name, const char *sep,
130
                           GetByteContext *gb, int le, AVDictionary **metadata);
131
 
132
/** Adds a string of count characters
133
 *  into the metadata dictionary.
134
 */
135
int ff_tadd_string_metadata(int count, const char *name,
136
                            GetByteContext *gb, int le, AVDictionary **metadata);
137
 
138
/** Decodes a TIFF header from the input bytestream
139
 *  and sets the endianess in *le and the offset to
140
 *  the first IFD in *ifd_offset accordingly.
141
 */
142
int ff_tdecode_header(GetByteContext *gb, int *le, int *ifd_offset);
143
 
144
/** Reads the first 3 fields of a TIFF tag, which are
145
 *  the tag id, the tag type and the count of values for that tag.
146
 *  Afterwards the bytestream is located at the first value to read and
147
 *  *next holds the bytestream offset of the following tag.
148
 */
149
int ff_tread_tag(GetByteContext *gb, int le, unsigned *tag, unsigned *type,
150
                 unsigned *count, int *next);
151
 
152
#endif /* AVCODEC_TIFF_COMMON_H */