opencv
1/*
2* Copyright (c) 1988-1997 Sam Leffler
3* Copyright (c) 1991-1997 Silicon Graphics, Inc.
4*
5* Permission to use, copy, modify, distribute, and sell this software and
6* its documentation for any purpose is hereby granted without fee, provided
7* that (i) the above copyright notices and this permission notice appear in
8* all copies of the software and related documentation, and (ii) the names of
9* Sam Leffler and Silicon Graphics may not be used in any advertising or
10* publicity relating to the software without the specific, prior written
11* permission of Sam Leffler and Silicon Graphics.
12*
13* THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND,
14* EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
15* WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
16*
17* IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR
18* ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
19* OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
20* WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF
21* LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
22* OF THIS SOFTWARE.
23*/
24
25/*
26* TIFF Library.
27*
28* "Null" Compression Algorithm Support.
29*/
30#include "tiffiop.h"31
32static int DumpFixupTags(TIFF *tif)33{
34(void)tif;35return (1);36}
37
38/*
39* Encode a hunk of pixels.
40*/
41static int DumpModeEncode(TIFF *tif, uint8_t *pp, tmsize_t cc, uint16_t s)42{
43(void)s;44while (cc > 0)45{46tmsize_t n;47
48n = cc;49if (tif->tif_rawcc + n > tif->tif_rawdatasize)50n = tif->tif_rawdatasize - tif->tif_rawcc;51
52assert(n > 0);53
54/*55* Avoid copy if client has setup raw
56* data buffer to avoid extra copy.
57*/
58if (tif->tif_rawcp != pp)59_TIFFmemcpy(tif->tif_rawcp, pp, n);60tif->tif_rawcp += n;61tif->tif_rawcc += n;62pp += n;63cc -= n;64if (tif->tif_rawcc >= tif->tif_rawdatasize && !TIFFFlushData1(tif))65return (0);66}67return (1);68}
69
70/*
71* Decode a hunk of pixels.
72*/
73static int DumpModeDecode(TIFF *tif, uint8_t *buf, tmsize_t cc, uint16_t s)74{
75static const char module[] = "DumpModeDecode";76(void)s;77if (tif->tif_rawcc < cc)78{79TIFFErrorExtR(tif, module,80"Not enough data for scanline %" PRIu3281", expected a request for at most %" TIFF_SSIZE_FORMAT82" bytes, got a request for %" TIFF_SSIZE_FORMAT " bytes",83tif->tif_row, tif->tif_rawcc, cc);84return (0);85}86/*87* Avoid copy if client has setup raw
88* data buffer to avoid extra copy.
89*/
90if (tif->tif_rawcp != buf)91_TIFFmemcpy(buf, tif->tif_rawcp, cc);92tif->tif_rawcp += cc;93tif->tif_rawcc -= cc;94return (1);95}
96
97/*
98* Seek forwards nrows in the current strip.
99*/
100static int DumpModeSeek(TIFF *tif, uint32_t nrows)101{
102tif->tif_rawcp += nrows * tif->tif_scanlinesize;103tif->tif_rawcc -= nrows * tif->tif_scanlinesize;104return (1);105}
106
107/*
108* Initialize dump mode.
109*/
110int TIFFInitDumpMode(TIFF *tif, int scheme)111{
112(void)scheme;113tif->tif_fixuptags = DumpFixupTags;114tif->tif_decoderow = DumpModeDecode;115tif->tif_decodestrip = DumpModeDecode;116tif->tif_decodetile = DumpModeDecode;117tif->tif_encoderow = DumpModeEncode;118tif->tif_encodestrip = DumpModeEncode;119tif->tif_encodetile = DumpModeEncode;120tif->tif_seek = DumpModeSeek;121return (1);122}
123