Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in / Register
Toggle navigation
F
ffmpeg
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Packages
Packages
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
submodule
ffmpeg
Commits
46ce9ded
Commit
46ce9ded
authored
Jun 01, 2013
by
Diego Biurrun
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
tiff: K&R formatting cosmetics
parent
f849a77e
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
237 additions
and
233 deletions
+237
-233
tiff.c
libavcodec/tiff.c
+59
-55
tiff.h
libavcodec/tiff.h
+24
-24
tiffenc.c
libavcodec/tiffenc.c
+154
-154
No files found.
libavcodec/tiff.c
View file @
46ce9ded
...
...
@@ -25,19 +25,20 @@
* @author Konstantin Shishkov
*/
#include "avcodec.h"
#include "config.h"
#if CONFIG_ZLIB
#include <zlib.h>
#endif
#include "lzw.h"
#include "tiff.h"
#include "faxcompr.h"
#include "internal.h"
#include "mathops.h"
#include "libavutil/attributes.h"
#include "libavutil/intreadwrite.h"
#include "libavutil/imgutils.h"
#include "avcodec.h"
#include "faxcompr.h"
#include "internal.h"
#include "lzw.h"
#include "mathops.h"
#include "tiff.h"
typedef
struct
TiffContext
{
AVCodecContext
*
avctx
;
...
...
@@ -78,10 +79,14 @@ static unsigned tget_long(const uint8_t **p, int le)
static
unsigned
tget
(
const
uint8_t
**
p
,
int
type
,
int
le
)
{
switch
(
type
)
{
case
TIFF_BYTE
:
return
*
(
*
p
)
++
;
case
TIFF_SHORT
:
return
tget_short
(
p
,
le
);
case
TIFF_LONG
:
return
tget_long
(
p
,
le
);
default
:
return
UINT_MAX
;
case
TIFF_BYTE
:
return
*
(
*
p
)
++
;
case
TIFF_SHORT
:
return
tget_short
(
p
,
le
);
case
TIFF_LONG
:
return
tget_long
(
p
,
le
);
default:
return
UINT_MAX
;
}
}
...
...
@@ -92,11 +97,11 @@ static int tiff_uncompress(uint8_t *dst, unsigned long *len, const uint8_t *src,
z_stream
zstream
=
{
0
};
int
zret
;
zstream
.
next_in
=
src
;
zstream
.
avail_in
=
size
;
zstream
.
next_out
=
dst
;
zstream
.
next_in
=
src
;
zstream
.
avail_in
=
size
;
zstream
.
next_out
=
dst
;
zstream
.
avail_out
=
*
len
;
zret
=
inflateInit
(
&
zstream
);
zret
=
inflateInit
(
&
zstream
);
if
(
zret
!=
Z_OK
)
{
av_log
(
NULL
,
AV_LOG_ERROR
,
"Inflate init error: %d
\n
"
,
zret
);
return
zret
;
...
...
@@ -113,7 +118,7 @@ static int tiff_unpack_strip(TiffContext *s, uint8_t *dst, int stride,
{
int
c
,
line
,
pixels
,
code
,
ret
;
const
uint8_t
*
ssrc
=
src
;
int
width
=
((
s
->
width
*
s
->
bpp
)
+
7
)
>>
3
;
int
width
=
((
s
->
width
*
s
->
bpp
)
+
7
)
>>
3
;
if
(
size
<=
0
)
return
AVERROR_INVALIDDATA
;
...
...
@@ -124,7 +129,7 @@ static int tiff_unpack_strip(TiffContext *s, uint8_t *dst, int stride,
unsigned
long
outlen
;
int
ret
;
outlen
=
width
*
lines
;
zbuf
=
av_malloc
(
outlen
);
zbuf
=
av_malloc
(
outlen
);
if
(
!
zbuf
)
return
AVERROR
(
ENOMEM
);
ret
=
tiff_uncompress
(
zbuf
,
&
outlen
,
src
,
size
);
...
...
@@ -151,8 +156,9 @@ static int tiff_unpack_strip(TiffContext *s, uint8_t *dst, int stride,
return
ret
;
}
}
if
(
s
->
compr
==
TIFF_CCITT_RLE
||
s
->
compr
==
TIFF_G3
||
s
->
compr
==
TIFF_G4
)
{
if
(
s
->
compr
==
TIFF_CCITT_RLE
||
s
->
compr
==
TIFF_G3
||
s
->
compr
==
TIFF_G4
)
{
int
i
,
ret
=
0
;
uint8_t
*
src2
=
av_malloc
((
unsigned
)
size
+
FF_INPUT_BUFFER_PADDING_SIZE
);
...
...
@@ -206,7 +212,7 @@ static int tiff_unpack_strip(TiffContext *s, uint8_t *dst, int stride,
break
;
case
TIFF_PACKBITS
:
for
(
pixels
=
0
;
pixels
<
width
;)
{
code
=
(
int8_t
)
*
src
++
;
code
=
(
int8_t
)
*
src
++
;
if
(
code
>=
0
)
{
code
++
;
if
(
pixels
+
code
>
width
)
{
...
...
@@ -215,7 +221,7 @@ static int tiff_unpack_strip(TiffContext *s, uint8_t *dst, int stride,
return
AVERROR_INVALIDDATA
;
}
memcpy
(
dst
+
pixels
,
src
,
code
);
src
+=
code
;
src
+=
code
;
pixels
+=
code
;
}
else
if
(
code
!=
-
128
)
{
// -127..-1
code
=
(
-
code
)
+
1
;
...
...
@@ -306,10 +312,10 @@ static int tiff_decode_tag(TiffContext *s, const uint8_t *start,
if
(
end_buf
-
buf
<
12
)
return
AVERROR_INVALIDDATA
;
tag
=
tget_short
(
&
buf
,
s
->
le
);
type
=
tget_short
(
&
buf
,
s
->
le
);
tag
=
tget_short
(
&
buf
,
s
->
le
);
type
=
tget_short
(
&
buf
,
s
->
le
);
count
=
tget_long
(
&
buf
,
s
->
le
);
off
=
tget_long
(
&
buf
,
s
->
le
);
off
=
tget_long
(
&
buf
,
s
->
le
);
if
(
type
==
0
||
type
>=
FF_ARRAY_ELEMS
(
type_sizes
))
{
av_log
(
s
->
avctx
,
AV_LOG_DEBUG
,
"Unknown tiff type (%u) encountered
\n
"
,
...
...
@@ -321,13 +327,13 @@ static int tiff_decode_tag(TiffContext *s, const uint8_t *start,
switch
(
type
)
{
case
TIFF_BYTE
:
case
TIFF_SHORT
:
buf
-=
4
;
buf
-=
4
;
value
=
tget
(
&
buf
,
type
,
s
->
le
);
buf
=
NULL
;
buf
=
NULL
;
break
;
case
TIFF_LONG
:
value
=
off
;
buf
=
NULL
;
buf
=
NULL
;
break
;
case
TIFF_STRING
:
if
(
count
<=
4
)
{
...
...
@@ -336,14 +342,13 @@ static int tiff_decode_tag(TiffContext *s, const uint8_t *start,
}
default:
value
=
UINT_MAX
;
buf
=
start
+
off
;
buf
=
start
+
off
;
}
}
else
{
if
(
count
<=
4
&&
type_sizes
[
type
]
*
count
<=
4
)
{
if
(
count
<=
4
&&
type_sizes
[
type
]
*
count
<=
4
)
buf
-=
4
;
}
else
{
else
buf
=
start
+
off
;
}
}
if
(
buf
&&
(
buf
<
start
||
buf
>
end_buf
))
{
...
...
@@ -397,7 +402,7 @@ static int tiff_decode_tag(TiffContext *s, const uint8_t *start,
s
->
bppcount
=
value
;
break
;
case
TIFF_COMPR
:
s
->
compr
=
value
;
s
->
compr
=
value
;
s
->
predictor
=
0
;
switch
(
s
->
compr
)
{
case
TIFF_RAW
:
...
...
@@ -441,7 +446,7 @@ static int tiff_decode_tag(TiffContext *s, const uint8_t *start,
case
TIFF_STRIP_OFFS
:
if
(
count
==
1
)
{
s
->
stripdata
=
NULL
;
s
->
stripoff
=
value
;
s
->
stripoff
=
value
;
}
else
s
->
stripdata
=
start
+
off
;
s
->
strips
=
count
;
...
...
@@ -457,8 +462,8 @@ static int tiff_decode_tag(TiffContext *s, const uint8_t *start,
case
TIFF_STRIP_SIZE
:
if
(
count
==
1
)
{
s
->
stripsizes
=
NULL
;
s
->
stripsize
=
value
;
s
->
strips
=
1
;
s
->
stripsize
=
value
;
s
->
strips
=
1
;
}
else
{
s
->
stripsizes
=
start
+
off
;
}
...
...
@@ -503,14 +508,14 @@ static int tiff_decode_tag(TiffContext *s, const uint8_t *start,
off
=
type_sizes
[
type
];
if
(
count
/
3
>
256
||
end_buf
-
buf
<
count
/
3
*
off
*
3
)
return
AVERROR_INVALIDDATA
;
rp
=
buf
;
gp
=
buf
+
count
/
3
*
off
;
bp
=
buf
+
count
/
3
*
off
*
2
;
rp
=
buf
;
gp
=
buf
+
count
/
3
*
off
;
bp
=
buf
+
count
/
3
*
off
*
2
;
off
=
(
type_sizes
[
type
]
-
1
)
<<
3
;
for
(
i
=
0
;
i
<
count
/
3
;
i
++
)
{
j
=
(
tget
(
&
rp
,
type
,
s
->
le
)
>>
off
)
<<
16
;
j
|=
(
tget
(
&
gp
,
type
,
s
->
le
)
>>
off
)
<<
8
;
j
|=
tget
(
&
bp
,
type
,
s
->
le
)
>>
off
;
j
=
(
tget
(
&
rp
,
type
,
s
->
le
)
>>
off
)
<<
16
;
j
|=
(
tget
(
&
gp
,
type
,
s
->
le
)
>>
off
)
<<
8
;
j
|=
tget
(
&
bp
,
type
,
s
->
le
)
>>
off
;
pal
[
i
]
=
j
;
}
s
->
palette_is_set
=
1
;
...
...
@@ -540,21 +545,20 @@ static int decode_frame(AVCodecContext *avctx,
void
*
data
,
int
*
got_frame
,
AVPacket
*
avpkt
)
{
const
uint8_t
*
buf
=
avpkt
->
data
;
int
buf_size
=
avpkt
->
size
;
int
buf_size
=
avpkt
->
size
;
TiffContext
*
const
s
=
avctx
->
priv_data
;
AVFrame
*
const
p
=
data
;
const
uint8_t
*
orig_buf
=
buf
,
*
end_buf
=
buf
+
buf_size
;
unsigned
off
;
int
id
,
le
,
ret
;
int
i
,
j
,
entries
;
int
stride
;
int
i
,
j
,
entries
,
stride
;
unsigned
soff
,
ssize
;
uint8_t
*
dst
;
//parse image header
//
parse image header
if
(
end_buf
-
buf
<
8
)
return
AVERROR_INVALIDDATA
;
id
=
AV_RL16
(
buf
);
id
=
AV_RL16
(
buf
);
buf
+=
2
;
if
(
id
==
0x4949
)
le
=
1
;
...
...
@@ -564,9 +568,9 @@ static int decode_frame(AVCodecContext *avctx,
av_log
(
avctx
,
AV_LOG_ERROR
,
"TIFF header not found
\n
"
);
return
AVERROR_INVALIDDATA
;
}
s
->
le
=
le
;
s
->
invert
=
0
;
s
->
compr
=
TIFF_RAW
;
s
->
le
=
le
;
s
->
invert
=
0
;
s
->
compr
=
TIFF_RAW
;
s
->
fill_order
=
0
;
// As TIFF 6.0 specification puts it "An arbitrary but carefully chosen number
// that further identifies the file as a TIFF file"
...
...
@@ -583,7 +587,7 @@ static int decode_frame(AVCodecContext *avctx,
av_log
(
avctx
,
AV_LOG_ERROR
,
"IFD offset is greater than image size
\n
"
);
return
AVERROR_INVALIDDATA
;
}
buf
=
orig_buf
+
off
;
buf
=
orig_buf
+
off
;
entries
=
tget_short
(
&
buf
,
le
);
for
(
i
=
0
;
i
<
entries
;
i
++
)
{
if
((
ret
=
tiff_decode_tag
(
s
,
orig_buf
,
buf
,
end_buf
))
<
0
)
...
...
@@ -603,7 +607,7 @@ static int decode_frame(AVCodecContext *avctx,
s
->
stripsize
=
buf_size
-
s
->
stripoff
;
}
stride
=
p
->
linesize
[
0
];
dst
=
p
->
data
[
0
];
dst
=
p
->
data
[
0
];
for
(
i
=
0
;
i
<
s
->
height
;
i
+=
s
->
rps
)
{
if
(
s
->
stripsizes
)
{
if
(
s
->
stripsizes
>=
end_buf
)
...
...
@@ -629,8 +633,8 @@ static int decode_frame(AVCodecContext *avctx,
dst
+=
s
->
rps
*
stride
;
}
if
(
s
->
predictor
==
2
)
{
dst
=
p
->
data
[
0
];
soff
=
s
->
bpp
>>
3
;
dst
=
p
->
data
[
0
];
soff
=
s
->
bpp
>>
3
;
ssize
=
s
->
width
*
soff
;
for
(
i
=
0
;
i
<
s
->
height
;
i
++
)
{
for
(
j
=
soff
;
j
<
ssize
;
j
++
)
...
...
@@ -659,9 +663,9 @@ static av_cold int tiff_init(AVCodecContext *avctx)
{
TiffContext
*
s
=
avctx
->
priv_data
;
s
->
width
=
0
;
s
->
width
=
0
;
s
->
height
=
0
;
s
->
avctx
=
avctx
;
s
->
avctx
=
avctx
;
ff_lzw_decode_open
(
&
s
->
lzw
);
ff_ccitt_unpack_init
();
...
...
@@ -678,6 +682,7 @@ static av_cold int tiff_end(AVCodecContext *avctx)
AVCodec
ff_tiff_decoder
=
{
.
name
=
"tiff"
,
.
long_name
=
NULL_IF_CONFIG_SMALL
(
"TIFF image"
),
.
type
=
AVMEDIA_TYPE_VIDEO
,
.
id
=
AV_CODEC_ID_TIFF
,
.
priv_data_size
=
sizeof
(
TiffContext
),
...
...
@@ -685,5 +690,4 @@ AVCodec ff_tiff_decoder = {
.
close
=
tiff_end
,
.
decode
=
decode_frame
,
.
capabilities
=
CODEC_CAP_DR1
,
.
long_name
=
NULL_IF_CONFIG_SMALL
(
"TIFF image"
),
};
libavcodec/tiff.h
View file @
46ce9ded
...
...
@@ -31,37 +31,37 @@
#include <stdint.h>
/** abridged list of TIFF tags */
enum
TiffTags
{
TIFF_SUBFILE
=
0xfe
,
TIFF_WIDTH
=
0x100
,
enum
TiffTags
{
TIFF_SUBFILE
=
0xfe
,
TIFF_WIDTH
=
0x100
,
TIFF_HEIGHT
,
TIFF_BPP
,
TIFF_COMPR
,
TIFF_INVERT
=
0x106
,
TIFF_FILL_ORDER
=
0x10A
,
TIFF_STRIP_OFFS
=
0x111
,
TIFF_SAMPLES_PER_PIXEL
=
0x115
,
TIFF_ROWSPERSTRIP
=
0x116
,
TIFF_INVERT
=
0x106
,
TIFF_FILL_ORDER
=
0x10A
,
TIFF_STRIP_OFFS
=
0x111
,
TIFF_SAMPLES_PER_PIXEL
=
0x115
,
TIFF_ROWSPERSTRIP
=
0x116
,
TIFF_STRIP_SIZE
,
TIFF_XRES
=
0x11A
,
TIFF_YRES
=
0x11B
,
TIFF_PLANAR
=
0x11C
,
TIFF_XPOS
=
0x11E
,
TIFF_YPOS
=
0x11F
,
TIFF_T4OPTIONS
=
0x124
,
TIFF_XRES
=
0x11A
,
TIFF_YRES
=
0x11B
,
TIFF_PLANAR
=
0x11C
,
TIFF_XPOS
=
0x11E
,
TIFF_YPOS
=
0x11F
,
TIFF_T4OPTIONS
=
0x124
,
TIFF_T6OPTIONS
,
TIFF_RES_UNIT
=
0x128
,
TIFF_SOFTWARE_NAME
=
0x131
,
TIFF_PREDICTOR
=
0x13D
,
TIFF_PAL
=
0x140
,
TIFF_RES_UNIT
=
0x128
,
TIFF_SOFTWARE_NAME
=
0x131
,
TIFF_PREDICTOR
=
0x13D
,
TIFF_PAL
=
0x140
,
TIFF_YCBCR_COEFFICIENTS
=
0x211
,
TIFF_YCBCR_SUBSAMPLING
=
0x212
,
TIFF_YCBCR_POSITIONING
=
0x213
,
TIFF_REFERENCE_BW
=
0x214
,
TIFF_YCBCR_SUBSAMPLING
=
0x212
,
TIFF_YCBCR_POSITIONING
=
0x213
,
TIFF_REFERENCE_BW
=
0x214
,
};
/** list of TIFF compression types */
enum
TiffCompr
{
enum
TiffCompr
{
TIFF_RAW
=
1
,
TIFF_CCITT_RLE
,
TIFF_G3
,
...
...
@@ -71,10 +71,10 @@ enum TiffCompr{
TIFF_NEWJPEG
,
TIFF_ADOBE_DEFLATE
,
TIFF_PACKBITS
=
0x8005
,
TIFF_DEFLATE
=
0x80B2
TIFF_DEFLATE
=
0x80B2
};
enum
TiffTypes
{
enum
TiffTypes
{
TIFF_BYTE
=
1
,
TIFF_STRING
,
TIFF_SHORT
,
...
...
libavcodec/tiffenc.c
View file @
46ce9ded
...
...
@@ -25,20 +25,20 @@
* @author Bartlomiej Wolowiec
*/
#include "libavutil/log.h"
#include "libavutil/opt.h"
#include "libavutil/pixdesc.h"
#include "avcodec.h"
#include "config.h"
#if CONFIG_ZLIB
#include <zlib.h>
#endif
#include "libavutil/log.h"
#include "libavutil/opt.h"
#include "libavutil/pixdesc.h"
#include "avcodec.h"
#include "bytestream.h"
#include "tiff.h"
#include "rle.h"
#include "lzw.h"
#include "put_bits.h"
#include "rle.h"
#include "tiff.h"
#define TIFF_MAX_ENTRY 32
...
...
@@ -48,35 +48,34 @@ static const uint8_t type_sizes2[6] = {
};
typedef
struct
TiffEncoderContext
{
AVClass
*
class
;
///< for private options
AVClass
*
class
;
///< for private options
AVCodecContext
*
avctx
;
AVFrame
picture
;
int
width
;
///< picture width
int
height
;
///< picture height
unsigned
int
bpp
;
///< bits per pixel
int
compr
;
///< compression level
int
bpp_tab_size
;
///< bpp_tab size
int
photometric_interpretation
;
///< photometric interpretation
int
strips
;
///< number of strips
int
rps
;
///< row per strip
uint8_t
entries
[
TIFF_MAX_ENTRY
*
12
];
///< entir
es in header
int
num_entries
;
///< number of entir
es
uint8_t
**
buf
;
///< actual position in buffer
uint8_t
*
buf_start
;
///< pointer to first byte in buffer
int
buf_size
;
///< buffer size
uint16_t
subsampling
[
2
];
///< YUV subsampling factors
struct
LZWEncodeState
*
lzws
;
///< LZW E
ncode state
int
width
;
///< picture width
int
height
;
///< picture height
unsigned
int
bpp
;
///< bits per pixel
int
compr
;
///< compression level
int
bpp_tab_size
;
///< bpp_tab size
int
photometric_interpretation
;
///< photometric interpretation
int
strips
;
///< number of strips
int
rps
;
///< row per strip
uint8_t
entries
[
TIFF_MAX_ENTRY
*
12
];
///< entri
es in header
int
num_entries
;
///< number of entri
es
uint8_t
**
buf
;
///< actual position in buffer
uint8_t
*
buf_start
;
///< pointer to first byte in buffer
int
buf_size
;
///< buffer size
uint16_t
subsampling
[
2
];
///< YUV subsampling factors
struct
LZWEncodeState
*
lzws
;
///< LZW e
ncode state
}
TiffEncoderContext
;
/**
* Check free space in buffer
* @param s Tiff context
* @param need Needed bytes
* @return 0 - ok, 1 - no free space
*/
static
inline
int
check_size
(
TiffEncoderContext
*
s
,
uint64_t
need
)
static
inline
int
check_size
(
TiffEncoderContext
*
s
,
uint64_t
need
)
{
if
(
s
->
buf_size
<
*
s
->
buf
-
s
->
buf_start
+
need
)
{
*
s
->
buf
=
s
->
buf_start
+
s
->
buf_size
+
1
;
...
...
@@ -95,12 +94,12 @@ static inline int check_size(TiffEncoderContext * s, uint64_t need)
* @param type Type of values
* @param flip =0 - normal copy, >0 - flip
*/
static
void
tnput
(
uint8_t
**
p
,
int
n
,
const
uint8_t
*
val
,
enum
TiffTypes
type
,
static
void
tnput
(
uint8_t
**
p
,
int
n
,
const
uint8_t
*
val
,
enum
TiffTypes
type
,
int
flip
)
{
int
i
;
#if HAVE_BIGENDIAN
flip
^=
((
int
[])
{
0
,
0
,
0
,
1
,
3
,
3
})[
type
];
flip
^=
((
int
[])
{
0
,
0
,
0
,
1
,
3
,
3
})[
type
];
#endif
for
(
i
=
0
;
i
<
n
*
type_sizes2
[
type
];
i
++
)
*
(
*
p
)
++
=
val
[
i
^
flip
];
...
...
@@ -114,9 +113,8 @@ static void tnput(uint8_t ** p, int n, const uint8_t * val, enum TiffTypes type,
* @param count The number of values
* @param ptr_val Pointer to values
*/
static
void
add_entry
(
TiffEncoderContext
*
s
,
enum
TiffTags
tag
,
enum
TiffTypes
type
,
int
count
,
const
void
*
ptr_val
)
static
void
add_entry
(
TiffEncoderContext
*
s
,
enum
TiffTags
tag
,
enum
TiffTypes
type
,
int
count
,
const
void
*
ptr_val
)
{
uint8_t
*
entries_ptr
=
s
->
entries
+
12
*
s
->
num_entries
;
...
...
@@ -137,10 +135,11 @@ static void add_entry(TiffEncoderContext * s,
s
->
num_entries
++
;
}
static
void
add_entry1
(
TiffEncoderContext
*
s
,
enum
TiffTags
tag
,
enum
TiffTypes
type
,
int
val
){
uint16_t
w
=
val
;
uint32_t
dw
=
val
;
static
void
add_entry1
(
TiffEncoderContext
*
s
,
enum
TiffTags
tag
,
enum
TiffTypes
type
,
int
val
)
{
uint16_t
w
=
val
;
uint32_t
dw
=
val
;
add_entry
(
s
,
tag
,
type
,
1
,
type
==
TIFF_SHORT
?
(
void
*
)
&
w
:
(
void
*
)
&
dw
);
}
...
...
@@ -154,22 +153,21 @@ static void add_entry1(TiffEncoderContext * s,
* @param compr Compression method
* @return Number of output bytes. If an output error is encountered, -1 returned
*/
static
int
encode_strip
(
TiffEncoderContext
*
s
,
const
int8_t
*
src
,
uint8_t
*
dst
,
int
n
,
int
compr
)
static
int
encode_strip
(
TiffEncoderContext
*
s
,
const
int8_t
*
src
,
uint8_t
*
dst
,
int
n
,
int
compr
)
{
switch
(
compr
)
{
#if CONFIG_ZLIB
case
TIFF_DEFLATE
:
case
TIFF_ADOBE_DEFLATE
:
{
unsigned
long
zlen
=
s
->
buf_size
-
(
*
s
->
buf
-
s
->
buf_start
);
if
(
compress
(
dst
,
&
zlen
,
src
,
n
)
!=
Z_OK
)
{
av_log
(
s
->
avctx
,
AV_LOG_ERROR
,
"Compressing failed
\n
"
);
return
-
1
;
}
return
zlen
;
{
unsigned
long
zlen
=
s
->
buf_size
-
(
*
s
->
buf
-
s
->
buf_start
);
if
(
compress
(
dst
,
&
zlen
,
src
,
n
)
!=
Z_OK
)
{
av_log
(
s
->
avctx
,
AV_LOG_ERROR
,
"Compressing failed
\n
"
);
return
-
1
;
}
return
zlen
;
}
#endif
case
TIFF_RAW
:
if
(
check_size
(
s
,
n
))
...
...
@@ -177,7 +175,8 @@ static int encode_strip(TiffEncoderContext * s, const int8_t * src,
memcpy
(
dst
,
src
,
n
);
return
n
;
case
TIFF_PACKBITS
:
return
ff_rle_encode
(
dst
,
s
->
buf_size
-
(
*
s
->
buf
-
s
->
buf_start
),
src
,
1
,
n
,
2
,
0xff
,
-
1
,
0
);
return
ff_rle_encode
(
dst
,
s
->
buf_size
-
(
*
s
->
buf
-
s
->
buf_start
),
src
,
1
,
n
,
2
,
0xff
,
-
1
,
0
);
case
TIFF_LZW
:
return
ff_lzw_encode
(
s
->
lzws
,
src
,
n
);
default:
...
...
@@ -185,14 +184,14 @@ static int encode_strip(TiffEncoderContext * s, const int8_t * src,
}
}
static
void
pack_yuv
(
TiffEncoderContext
*
s
,
uint8_t
*
dst
,
int
lnum
)
static
void
pack_yuv
(
TiffEncoderContext
*
s
,
uint8_t
*
dst
,
int
lnum
)
{
AVFrame
*
p
=
&
s
->
picture
;
int
i
,
j
,
k
;
int
w
=
(
s
->
width
-
1
)
/
s
->
subsampling
[
0
]
+
1
;
int
w
=
(
s
->
width
-
1
)
/
s
->
subsampling
[
0
]
+
1
;
uint8_t
*
pu
=
&
p
->
data
[
1
][
lnum
/
s
->
subsampling
[
1
]
*
p
->
linesize
[
1
]];
uint8_t
*
pv
=
&
p
->
data
[
2
][
lnum
/
s
->
subsampling
[
1
]
*
p
->
linesize
[
2
]];
for
(
i
=
0
;
i
<
w
;
i
++
){
for
(
i
=
0
;
i
<
w
;
i
++
)
{
for
(
j
=
0
;
j
<
s
->
subsampling
[
1
];
j
++
)
for
(
k
=
0
;
k
<
s
->
subsampling
[
0
];
k
++
)
*
dst
++
=
p
->
data
[
0
][(
lnum
+
j
)
*
p
->
linesize
[
0
]
+
...
...
@@ -202,7 +201,7 @@ static void pack_yuv(TiffEncoderContext * s, uint8_t * dst, int lnum)
}
}
static
int
encode_frame
(
AVCodecContext
*
avctx
,
AVPacket
*
pkt
,
static
int
encode_frame
(
AVCodecContext
*
avctx
,
AVPacket
*
pkt
,
const
AVFrame
*
pict
,
int
*
got_packet
)
{
TiffEncoderContext
*
s
=
avctx
->
priv_data
;
...
...
@@ -211,26 +210,26 @@ static int encode_frame(AVCodecContext * avctx, AVPacket *pkt,
uint8_t
*
ptr
;
uint8_t
*
offset
;
uint32_t
strips
;
uint32_t
*
strip_sizes
=
NULL
;
uint32_t
*
strip_sizes
=
NULL
;
uint32_t
*
strip_offsets
=
NULL
;
int
bytes_per_row
;
uint32_t
res
[
2
]
=
{
72
,
1
};
// image resolution (72/1)
uint32_t
res
[
2
]
=
{
72
,
1
};
// image resolution (72/1)
uint16_t
bpp_tab
[]
=
{
8
,
8
,
8
,
8
};
int
ret
;
int
is_yuv
=
0
;
uint8_t
*
yuv_line
=
NULL
;
int
shift_h
,
shift_v
;
const
AVPixFmtDescriptor
*
pfd
;
const
AVPixFmtDescriptor
*
pfd
;
s
->
avctx
=
avctx
;
*
p
=
*
pict
;
p
->
pict_type
=
AV_PICTURE_TYPE_I
;
p
->
key_frame
=
1
;
avctx
->
coded_frame
=
&
s
->
picture
;
*
p
=
*
pict
;
p
->
pict_type
=
AV_PICTURE_TYPE_I
;
p
->
key_frame
=
1
;
avctx
->
coded_frame
=
&
s
->
picture
;
s
->
width
=
avctx
->
width
;
s
->
height
=
avctx
->
height
;
s
->
width
=
avctx
->
width
;
s
->
height
=
avctx
->
height
;
s
->
subsampling
[
0
]
=
1
;
s
->
subsampling
[
1
]
=
1
;
...
...
@@ -240,43 +239,40 @@ static int encode_frame(AVCodecContext * avctx, AVPacket *pkt,
case
AV_PIX_FMT_RGB24
:
case
AV_PIX_FMT_GRAY8
:
case
AV_PIX_FMT_PAL8
:
pfd
=
av_pix_fmt_desc_get
(
avctx
->
pix_fmt
);
pfd
=
av_pix_fmt_desc_get
(
avctx
->
pix_fmt
);
s
->
bpp
=
av_get_bits_per_pixel
(
pfd
);
if
(
pfd
->
flags
&
AV_PIX_FMT_FLAG_PAL
)
{
if
(
pfd
->
flags
&
AV_PIX_FMT_FLAG_PAL
)
s
->
photometric_interpretation
=
3
;
}
else
if
(
pfd
->
flags
&
AV_PIX_FMT_FLAG_RGB
)
{
else
if
(
pfd
->
flags
&
AV_PIX_FMT_FLAG_RGB
)
s
->
photometric_interpretation
=
2
;
}
else
{
else
s
->
photometric_interpretation
=
1
;
}
s
->
bpp_tab_size
=
pfd
->
nb_components
;
for
(
i
=
0
;
i
<
s
->
bpp_tab_size
;
i
++
)
{
for
(
i
=
0
;
i
<
s
->
bpp_tab_size
;
i
++
)
bpp_tab
[
i
]
=
s
->
bpp
/
s
->
bpp_tab_size
;
}
break
;
case
AV_PIX_FMT_MONOBLACK
:
s
->
bpp
=
1
;
s
->
bpp
=
1
;
s
->
photometric_interpretation
=
1
;
s
->
bpp_tab_size
=
0
;
s
->
bpp_tab_size
=
0
;
break
;
case
AV_PIX_FMT_MONOWHITE
:
s
->
bpp
=
1
;
s
->
bpp
=
1
;
s
->
photometric_interpretation
=
0
;
s
->
bpp_tab_size
=
0
;
s
->
bpp_tab_size
=
0
;
break
;
case
AV_PIX_FMT_YUV420P
:
case
AV_PIX_FMT_YUV422P
:
case
AV_PIX_FMT_YUV444P
:
case
AV_PIX_FMT_YUV410P
:
case
AV_PIX_FMT_YUV411P
:
av_pix_fmt_get_chroma_sub_sample
(
avctx
->
pix_fmt
,
&
shift_h
,
&
shift_v
);
s
->
photometric_interpretation
=
6
;
av_pix_fmt_get_chroma_sub_sample
(
avctx
->
pix_fmt
,
&
shift_h
,
&
shift_v
);
s
->
bpp
=
8
+
(
16
>>
(
shift_h
+
shift_v
));
s
->
subsampling
[
0
]
=
1
<<
shift_h
;
s
->
subsampling
[
1
]
=
1
<<
shift_v
;
s
->
bpp_tab_size
=
3
;
is_yuv
=
1
;
s
->
bpp
=
8
+
(
16
>>
(
shift_h
+
shift_v
));
s
->
subsampling
[
0
]
=
1
<<
shift_h
;
s
->
subsampling
[
1
]
=
1
<<
shift_v
;
s
->
bpp_tab_size
=
3
;
is_yuv
=
1
;
break
;
default:
av_log
(
s
->
avctx
,
AV_LOG_ERROR
,
...
...
@@ -284,18 +280,23 @@ static int encode_frame(AVCodecContext * avctx, AVPacket *pkt,
return
-
1
;
}
if
(
s
->
compr
==
TIFF_DEFLATE
||
s
->
compr
==
TIFF_ADOBE_DEFLATE
||
s
->
compr
==
TIFF_LZW
)
//best choose for DEFLATE
if
(
s
->
compr
==
TIFF_DEFLATE
||
s
->
compr
==
TIFF_ADOBE_DEFLATE
||
s
->
compr
==
TIFF_LZW
)
// best choice for DEFLATE
s
->
rps
=
s
->
height
;
else
s
->
rps
=
FFMAX
(
8192
/
(((
s
->
width
*
s
->
bpp
)
>>
3
)
+
1
),
1
);
// suggest size of strip
s
->
rps
=
((
s
->
rps
-
1
)
/
s
->
subsampling
[
1
]
+
1
)
*
s
->
subsampling
[
1
];
// round rps up
// suggest size of strip
s
->
rps
=
FFMAX
(
8192
/
(((
s
->
width
*
s
->
bpp
)
>>
3
)
+
1
),
1
);
// round rps up
s
->
rps
=
((
s
->
rps
-
1
)
/
s
->
subsampling
[
1
]
+
1
)
*
s
->
subsampling
[
1
];
strips
=
(
s
->
height
-
1
)
/
s
->
rps
+
1
;
if
(
!
pkt
->
data
&&
(
ret
=
av_new_packet
(
pkt
,
avctx
->
width
*
avctx
->
height
*
s
->
bpp
*
2
+
avctx
->
height
*
4
+
FF_MIN_BUFFER_SIZE
))
<
0
)
{
(
ret
=
av_new_packet
(
pkt
,
avctx
->
width
*
avctx
->
height
*
s
->
bpp
*
2
+
avctx
->
height
*
4
+
FF_MIN_BUFFER_SIZE
))
<
0
)
{
av_log
(
avctx
,
AV_LOG_ERROR
,
"Error getting output packet.
\n
"
);
return
ret
;
}
...
...
@@ -314,18 +315,18 @@ static int encode_frame(AVCodecContext * avctx, AVPacket *pkt,
offset
=
ptr
;
bytestream_put_le32
(
&
ptr
,
0
);
strip_sizes
=
av_mallocz
(
sizeof
(
*
strip_sizes
)
*
strips
);
strip_sizes
=
av_mallocz
(
sizeof
(
*
strip_sizes
)
*
strips
);
strip_offsets
=
av_mallocz
(
sizeof
(
*
strip_offsets
)
*
strips
);
if
(
!
strip_sizes
||
!
strip_offsets
)
{
ret
=
AVERROR
(
ENOMEM
);
goto
fail
;
}
bytes_per_row
=
(((
s
->
width
-
1
)
/
s
->
subsampling
[
0
]
+
1
)
*
s
->
bpp
*
s
->
subsampling
[
0
]
*
s
->
subsampling
[
1
]
+
7
)
>>
3
;
if
(
is_yuv
){
bytes_per_row
=
(((
s
->
width
-
1
)
/
s
->
subsampling
[
0
]
+
1
)
*
s
->
bpp
*
s
->
subsampling
[
0
]
*
s
->
subsampling
[
1
]
+
7
)
>>
3
;
if
(
is_yuv
)
{
yuv_line
=
av_malloc
(
bytes_per_row
);
if
(
yuv_line
==
NULL
){
if
(
yuv_line
==
NULL
)
{
av_log
(
s
->
avctx
,
AV_LOG_ERROR
,
"Not enough memory
\n
"
);
ret
=
AVERROR
(
ENOMEM
);
goto
fail
;
...
...
@@ -345,14 +346,13 @@ static int encode_frame(AVCodecContext * avctx, AVPacket *pkt,
goto
fail
;
}
strip_offsets
[
0
]
=
ptr
-
pkt
->
data
;
zn
=
0
;
zn
=
0
;
for
(
j
=
0
;
j
<
s
->
rps
;
j
++
)
{
if
(
is_yuv
){
if
(
is_yuv
)
{
pack_yuv
(
s
,
yuv_line
,
j
);
memcpy
(
zbuf
+
zn
,
yuv_line
,
bytes_per_row
);
j
+=
s
->
subsampling
[
1
]
-
1
;
}
else
}
else
memcpy
(
zbuf
+
j
*
bytes_per_row
,
p
->
data
[
0
]
+
j
*
p
->
linesize
[
0
],
bytes_per_row
);
zn
+=
bytes_per_row
;
...
...
@@ -363,93 +363,93 @@ static int encode_frame(AVCodecContext * avctx, AVPacket *pkt,
av_log
(
s
->
avctx
,
AV_LOG_ERROR
,
"Encode strip failed
\n
"
);
goto
fail
;
}
ptr
+=
ret
;
ptr
+=
ret
;
strip_sizes
[
0
]
=
ptr
-
pkt
->
data
-
strip_offsets
[
0
];
}
else
#endif
{
if
(
s
->
compr
==
TIFF_LZW
)
{
s
->
lzws
=
av_malloc
(
ff_lzw_encode_state_size
);
if
(
!
s
->
lzws
)
{
ret
=
AVERROR
(
ENOMEM
);
goto
fail
;
}
if
(
s
->
compr
==
TIFF_LZW
)
{
s
->
lzws
=
av_malloc
(
ff_lzw_encode_state_size
);
if
(
!
s
->
lzws
)
{
ret
=
AVERROR
(
ENOMEM
);
goto
fail
;
}
for
(
i
=
0
;
i
<
s
->
height
;
i
++
)
{
if
(
strip_sizes
[
i
/
s
->
rps
]
==
0
)
{
if
(
s
->
compr
==
TIFF_LZW
){
ff_lzw_encode_init
(
s
->
lzws
,
ptr
,
s
->
buf_size
-
(
*
s
->
buf
-
s
->
buf_start
),
12
,
FF_LZW_TIFF
,
put_bits
);
}
strip_offsets
[
i
/
s
->
rps
]
=
ptr
-
pkt
->
data
;
}
if
(
is_yuv
){
pack_yuv
(
s
,
yuv_line
,
i
);
ret
=
encode_strip
(
s
,
yuv_line
,
ptr
,
bytes_per_row
,
s
->
compr
);
i
+=
s
->
subsampling
[
1
]
-
1
;
}
else
ret
=
encode_strip
(
s
,
p
->
data
[
0
]
+
i
*
p
->
linesize
[
0
],
ptr
,
bytes_per_row
,
s
->
compr
);
if
(
ret
<
0
)
{
av_log
(
s
->
avctx
,
AV_LOG_ERROR
,
"Encode strip failed
\n
"
);
goto
fail
;
}
strip_sizes
[
i
/
s
->
rps
]
+=
ret
;
ptr
+=
ret
;
if
(
s
->
compr
==
TIFF_LZW
&&
(
i
==
s
->
height
-
1
||
i
%
s
->
rps
==
s
->
rps
-
1
)){
ret
=
ff_lzw_encode_flush
(
s
->
lzws
,
flush_put_bits
);
strip_sizes
[(
i
/
s
->
rps
)]
+=
ret
;
ptr
+=
ret
;
}
for
(
i
=
0
;
i
<
s
->
height
;
i
++
)
{
if
(
strip_sizes
[
i
/
s
->
rps
]
==
0
)
{
if
(
s
->
compr
==
TIFF_LZW
)
{
ff_lzw_encode_init
(
s
->
lzws
,
ptr
,
s
->
buf_size
-
(
*
s
->
buf
-
s
->
buf_start
),
12
,
FF_LZW_TIFF
,
put_bits
);
}
strip_offsets
[
i
/
s
->
rps
]
=
ptr
-
pkt
->
data
;
}
if
(
is_yuv
)
{
pack_yuv
(
s
,
yuv_line
,
i
);
ret
=
encode_strip
(
s
,
yuv_line
,
ptr
,
bytes_per_row
,
s
->
compr
);
i
+=
s
->
subsampling
[
1
]
-
1
;
}
else
ret
=
encode_strip
(
s
,
p
->
data
[
0
]
+
i
*
p
->
linesize
[
0
],
ptr
,
bytes_per_row
,
s
->
compr
);
if
(
ret
<
0
)
{
av_log
(
s
->
avctx
,
AV_LOG_ERROR
,
"Encode strip failed
\n
"
);
goto
fail
;
}
strip_sizes
[
i
/
s
->
rps
]
+=
ret
;
ptr
+=
ret
;
if
(
s
->
compr
==
TIFF_LZW
&&
(
i
==
s
->
height
-
1
||
i
%
s
->
rps
==
s
->
rps
-
1
))
{
ret
=
ff_lzw_encode_flush
(
s
->
lzws
,
flush_put_bits
);
strip_sizes
[(
i
/
s
->
rps
)]
+=
ret
;
ptr
+=
ret
;
}
if
(
s
->
compr
==
TIFF_LZW
)
av_free
(
s
->
lzws
);
}
if
(
s
->
compr
==
TIFF_LZW
)
av_free
(
s
->
lzws
);
s
->
num_entries
=
0
;
add_entry1
(
s
,
TIFF_SUBFILE
,
TIFF_LONG
,
0
);
add_entry1
(
s
,
TIFF_WIDTH
,
TIFF_LONG
,
s
->
width
);
add_entry1
(
s
,
TIFF_HEIGHT
,
TIFF_LONG
,
s
->
height
);
add_entry1
(
s
,
TIFF_SUBFILE
,
TIFF_LONG
,
0
);
add_entry1
(
s
,
TIFF_WIDTH
,
TIFF_LONG
,
s
->
width
);
add_entry1
(
s
,
TIFF_HEIGHT
,
TIFF_LONG
,
s
->
height
);
if
(
s
->
bpp_tab_size
)
add_entry
(
s
,
TIFF_BPP
,
TIFF_SHORT
,
s
->
bpp_tab_size
,
bpp_tab
);
add_entry
(
s
,
TIFF_BPP
,
TIFF_SHORT
,
s
->
bpp_tab_size
,
bpp_tab
);
add_entry1
(
s
,
TIFF_COMPR
,
TIFF_SHORT
,
s
->
compr
);
add_entry1
(
s
,
TIFF_INVERT
,
TIFF_SHORT
,
s
->
photometric_interpretation
);
add_entry
(
s
,
TIFF_STRIP_OFFS
,
TIFF_LONG
,
strips
,
strip_offsets
);
add_entry1
(
s
,
TIFF_COMPR
,
TIFF_SHORT
,
s
->
compr
);
add_entry1
(
s
,
TIFF_INVERT
,
TIFF_SHORT
,
s
->
photometric_interpretation
);
add_entry
(
s
,
TIFF_STRIP_OFFS
,
TIFF_LONG
,
strips
,
strip_offsets
);
if
(
s
->
bpp_tab_size
)
add_entry1
(
s
,
TIFF_SAMPLES_PER_PIXEL
,
TIFF_SHORT
,
s
->
bpp_tab_size
);
add_entry1
(
s
,
TIFF_SAMPLES_PER_PIXEL
,
TIFF_SHORT
,
s
->
bpp_tab_size
);
add_entry1
(
s
,
TIFF_ROWSPERSTRIP
,
TIFF_LONG
,
s
->
rps
);
add_entry
(
s
,
TIFF_STRIP_SIZE
,
TIFF_LONG
,
strips
,
strip_sizes
);
add_entry
(
s
,
TIFF_XRES
,
TIFF_RATIONAL
,
1
,
res
);
add_entry
(
s
,
TIFF_YRES
,
TIFF_RATIONAL
,
1
,
res
);
add_entry1
(
s
,
TIFF_RES_UNIT
,
TIFF_SHORT
,
2
);
add_entry1
(
s
,
TIFF_ROWSPERSTRIP
,
TIFF_LONG
,
s
->
rps
);
add_entry
(
s
,
TIFF_STRIP_SIZE
,
TIFF_LONG
,
strips
,
strip_sizes
);
add_entry
(
s
,
TIFF_XRES
,
TIFF_RATIONAL
,
1
,
res
);
add_entry
(
s
,
TIFF_YRES
,
TIFF_RATIONAL
,
1
,
res
);
add_entry1
(
s
,
TIFF_RES_UNIT
,
TIFF_SHORT
,
2
);
if
(
!
(
avctx
->
flags
&
CODEC_FLAG_BITEXACT
))
add_entry
(
s
,
TIFF_SOFTWARE_NAME
,
TIFF_STRING
,
strlen
(
LIBAVCODEC_IDENT
)
+
1
,
LIBAVCODEC_IDENT
);
if
(
!
(
avctx
->
flags
&
CODEC_FLAG_BITEXACT
))
add_entry
(
s
,
TIFF_SOFTWARE_NAME
,
TIFF_STRING
,
strlen
(
LIBAVCODEC_IDENT
)
+
1
,
LIBAVCODEC_IDENT
);
if
(
avctx
->
pix_fmt
==
AV_PIX_FMT_PAL8
)
{
uint16_t
pal
[
256
*
3
];
for
(
i
=
0
;
i
<
256
;
i
++
)
{
uint32_t
rgb
=
*
(
uint32_t
*
)
(
p
->
data
[
1
]
+
i
*
4
);
pal
[
i
]
=
((
rgb
>>
16
)
&
0xff
)
*
257
;
pal
[
i
+
256
]
=
((
rgb
>>
8
)
&
0xff
)
*
257
;
pal
[
i
+
512
]
=
(
rgb
&
0xff
)
*
257
;
pal
[
i
+
256
]
=
((
rgb
>>
8
)
&
0xff
)
*
257
;
pal
[
i
+
512
]
=
(
rgb
&
0xff
)
*
257
;
}
add_entry
(
s
,
TIFF_PAL
,
TIFF_SHORT
,
256
*
3
,
pal
);
}
if
(
is_yuv
){
if
(
is_yuv
)
{
/** according to CCIR Recommendation 601.1 */
uint32_t
refbw
[
12
]
=
{
15
,
1
,
235
,
1
,
128
,
1
,
240
,
1
,
128
,
1
,
240
,
1
};
uint32_t
refbw
[
12
]
=
{
15
,
1
,
235
,
1
,
128
,
1
,
240
,
1
,
128
,
1
,
240
,
1
};
add_entry
(
s
,
TIFF_YCBCR_SUBSAMPLING
,
TIFF_SHORT
,
2
,
s
->
subsampling
);
add_entry
(
s
,
TIFF_REFERENCE_BW
,
TIFF_RATIONAL
,
6
,
refbw
);
}
bytestream_put_le32
(
&
offset
,
ptr
-
pkt
->
data
);
// write offset to dir
// write offset to dir
bytestream_put_le32
(
&
offset
,
ptr
-
pkt
->
data
);
if
(
check_size
(
s
,
6
+
s
->
num_entries
*
12
))
{
ret
=
AVERROR
(
EINVAL
);
...
...
@@ -473,12 +473,12 @@ fail:
#define OFFSET(x) offsetof(TiffEncoderContext, x)
#define VE AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM
static
const
AVOption
options
[]
=
{
{
"compression_algo"
,
NULL
,
OFFSET
(
compr
),
AV_OPT_TYPE_INT
,
{.
i64
=
TIFF_PACKBITS
},
TIFF_RAW
,
TIFF_DEFLATE
,
VE
,
"compression_algo"
},
{
"packbits"
,
NULL
,
0
,
AV_OPT_TYPE_CONST
,
{.
i64
=
TIFF_PACKBITS
},
0
,
0
,
VE
,
"compression_algo"
},
{
"raw"
,
NULL
,
0
,
AV_OPT_TYPE_CONST
,
{.
i64
=
TIFF_RAW
},
0
,
0
,
VE
,
"compression_algo"
},
{
"lzw"
,
NULL
,
0
,
AV_OPT_TYPE_CONST
,
{.
i64
=
TIFF_LZW
},
0
,
0
,
VE
,
"compression_algo"
},
{
"compression_algo"
,
NULL
,
OFFSET
(
compr
),
AV_OPT_TYPE_INT
,
{
.
i64
=
TIFF_PACKBITS
},
TIFF_RAW
,
TIFF_DEFLATE
,
VE
,
"compression_algo"
},
{
"packbits"
,
NULL
,
0
,
AV_OPT_TYPE_CONST
,
{
.
i64
=
TIFF_PACKBITS
},
0
,
0
,
VE
,
"compression_algo"
},
{
"raw"
,
NULL
,
0
,
AV_OPT_TYPE_CONST
,
{
.
i64
=
TIFF_RAW
},
0
,
0
,
VE
,
"compression_algo"
},
{
"lzw"
,
NULL
,
0
,
AV_OPT_TYPE_CONST
,
{
.
i64
=
TIFF_LZW
},
0
,
0
,
VE
,
"compression_algo"
},
#if CONFIG_ZLIB
{
"deflate"
,
NULL
,
0
,
AV_OPT_TYPE_CONST
,
{.
i64
=
TIFF_DEFLATE
},
0
,
0
,
VE
,
"compression_algo"
},
{
"deflate"
,
NULL
,
0
,
AV_OPT_TYPE_CONST
,
{
.
i64
=
TIFF_DEFLATE
},
0
,
0
,
VE
,
"compression_algo"
},
#endif
{
NULL
},
};
...
...
@@ -492,6 +492,7 @@ static const AVClass tiffenc_class = {
AVCodec
ff_tiff_encoder
=
{
.
name
=
"tiff"
,
.
long_name
=
NULL_IF_CONFIG_SMALL
(
"TIFF image"
),
.
type
=
AVMEDIA_TYPE_VIDEO
,
.
id
=
AV_CODEC_ID_TIFF
,
.
priv_data_size
=
sizeof
(
TiffEncoderContext
),
...
...
@@ -504,6 +505,5 @@ AVCodec ff_tiff_encoder = {
AV_PIX_FMT_YUV410P
,
AV_PIX_FMT_YUV411P
,
AV_PIX_FMT_NONE
},
.
long_name
=
NULL_IF_CONFIG_SMALL
(
"TIFF image"
),
.
priv_class
=
&
tiffenc_class
,
};
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment