Statistics
| Branch: | Revision:

ffmpeg / libavcodec / png.h @ 6d4c49a2

History | View | Annotate | Download (3.35 KB)

1
/*
2
 * PNG image format
3
 * Copyright (c) 2003 Fabrice Bellard
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
#ifndef AVCODEC_PNG_H
23
#define AVCODEC_PNG_H
24

    
25
#include <stdint.h>
26
#include <zlib.h>
27

    
28
#include "avcodec.h"
29

    
30
#define PNG_COLOR_MASK_PALETTE    1
31
#define PNG_COLOR_MASK_COLOR      2
32
#define PNG_COLOR_MASK_ALPHA      4
33

    
34
#define PNG_COLOR_TYPE_GRAY 0
35
#define PNG_COLOR_TYPE_PALETTE  (PNG_COLOR_MASK_COLOR | PNG_COLOR_MASK_PALETTE)
36
#define PNG_COLOR_TYPE_RGB        (PNG_COLOR_MASK_COLOR)
37
#define PNG_COLOR_TYPE_RGB_ALPHA  (PNG_COLOR_MASK_COLOR | PNG_COLOR_MASK_ALPHA)
38
#define PNG_COLOR_TYPE_GRAY_ALPHA (PNG_COLOR_MASK_ALPHA)
39

    
40
#define PNG_FILTER_TYPE_LOCO   64
41
#define PNG_FILTER_VALUE_NONE  0
42
#define PNG_FILTER_VALUE_SUB   1
43
#define PNG_FILTER_VALUE_UP    2
44
#define PNG_FILTER_VALUE_AVG   3
45
#define PNG_FILTER_VALUE_PAETH 4
46
#define PNG_FILTER_VALUE_MIXED 5
47

    
48
#define PNG_IHDR      0x0001
49
#define PNG_IDAT      0x0002
50
#define PNG_ALLIMAGE  0x0004
51
#define PNG_PLTE      0x0008
52

    
53
#define NB_PASSES 7
54

    
55
extern const uint8_t ff_pngsig[8];
56
extern const uint8_t ff_mngsig[8];
57

    
58
/* Mask to determine which y pixels are valid in a pass */
59
extern const uint8_t ff_png_pass_ymask[NB_PASSES];
60

    
61
/* Mask to determine which pixels are valid in a pass */
62
extern const uint8_t ff_png_pass_mask[NB_PASSES];
63

    
64
void *ff_png_zalloc(void *opaque, unsigned int items, unsigned int size);
65

    
66
void ff_png_zfree(void *opaque, void *ptr);
67

    
68
int ff_png_get_nb_channels(int color_type);
69

    
70
/* compute the row size of an interleaved pass */
71
int ff_png_pass_row_size(int pass, int bits_per_pixel, int width);
72

    
73
void ff_add_png_paeth_prediction(uint8_t *dst, uint8_t *src, uint8_t *top, int w, int bpp);
74

    
75
typedef struct PNGDecContext {
76
    const uint8_t *bytestream;
77
    const uint8_t *bytestream_start;
78
    const uint8_t *bytestream_end;
79
    AVFrame picture1, picture2;
80
    AVFrame *current_picture, *last_picture;
81

    
82
    int state;
83
    int width, height;
84
    int bit_depth;
85
    int color_type;
86
    int compression_type;
87
    int interlace_type;
88
    int filter_type;
89
    int channels;
90
    int bits_per_pixel;
91
    int bpp;
92

    
93
    uint8_t *image_buf;
94
    int image_linesize;
95
    uint32_t palette[256];
96
    uint8_t *crow_buf;
97
    uint8_t *last_row;
98
    uint8_t *tmp_row;
99
    int pass;
100
    int crow_size; /* compressed row size (include filter type) */
101
    int row_size; /* decompressed row size */
102
    int pass_row_size; /* decompress row size of the current pass */
103
    int y;
104
    z_stream zstream;
105

    
106
    void (*add_bytes_l2)(uint8_t *dst, uint8_t *src1, uint8_t *src2, int w);
107
    void (*add_paeth_prediction)(uint8_t *dst, uint8_t *src, uint8_t *top, int w, int bpp);
108
} PNGDecContext;
109

    
110
void ff_png_init_mmx(PNGDecContext *s);
111

    
112
#endif /* AVCODEC_PNG_H */