00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef AVCODEC_PNG_H
00023 #define AVCODEC_PNG_H
00024
00025 #include <stdint.h>
00026 #include <zlib.h>
00027
00028 #include "avcodec.h"
00029 #include "bytestream.h"
00030
00031 #define PNG_COLOR_MASK_PALETTE 1
00032 #define PNG_COLOR_MASK_COLOR 2
00033 #define PNG_COLOR_MASK_ALPHA 4
00034
00035 #define PNG_COLOR_TYPE_GRAY 0
00036 #define PNG_COLOR_TYPE_PALETTE (PNG_COLOR_MASK_COLOR | PNG_COLOR_MASK_PALETTE)
00037 #define PNG_COLOR_TYPE_RGB (PNG_COLOR_MASK_COLOR)
00038 #define PNG_COLOR_TYPE_RGB_ALPHA (PNG_COLOR_MASK_COLOR | PNG_COLOR_MASK_ALPHA)
00039 #define PNG_COLOR_TYPE_GRAY_ALPHA (PNG_COLOR_MASK_ALPHA)
00040
00041 #define PNG_FILTER_TYPE_LOCO 64
00042 #define PNG_FILTER_VALUE_NONE 0
00043 #define PNG_FILTER_VALUE_SUB 1
00044 #define PNG_FILTER_VALUE_UP 2
00045 #define PNG_FILTER_VALUE_AVG 3
00046 #define PNG_FILTER_VALUE_PAETH 4
00047 #define PNG_FILTER_VALUE_MIXED 5
00048
00049 #define PNG_IHDR 0x0001
00050 #define PNG_IDAT 0x0002
00051 #define PNG_ALLIMAGE 0x0004
00052 #define PNG_PLTE 0x0008
00053
00054 #define NB_PASSES 7
00055
00056 extern const uint8_t ff_pngsig[8];
00057 extern const uint8_t ff_mngsig[8];
00058
00059
00060 extern const uint8_t ff_png_pass_ymask[NB_PASSES];
00061
00062
00063 extern const uint8_t ff_png_pass_mask[NB_PASSES];
00064
00065 void *ff_png_zalloc(void *opaque, unsigned int items, unsigned int size);
00066
00067 void ff_png_zfree(void *opaque, void *ptr);
00068
00069 int ff_png_get_nb_channels(int color_type);
00070
00071
00072 int ff_png_pass_row_size(int pass, int bits_per_pixel, int width);
00073
00074 void ff_add_png_paeth_prediction(uint8_t *dst, uint8_t *src, uint8_t *top, int w, int bpp);
00075
00076 typedef struct PNGDecContext {
00077 GetByteContext gb;
00078 AVFrame picture1, picture2;
00079 AVFrame *current_picture, *last_picture;
00080
00081 int state;
00082 int width, height;
00083 int bit_depth;
00084 int color_type;
00085 int compression_type;
00086 int interlace_type;
00087 int filter_type;
00088 int channels;
00089 int bits_per_pixel;
00090 int bpp;
00091
00092 uint8_t *image_buf;
00093 int image_linesize;
00094 uint32_t palette[256];
00095 uint8_t *crow_buf;
00096 uint8_t *last_row;
00097 uint8_t *tmp_row;
00098 int pass;
00099 int crow_size;
00100 int row_size;
00101 int pass_row_size;
00102 int y;
00103 z_stream zstream;
00104
00105 void (*add_bytes_l2)(uint8_t *dst, uint8_t *src1, uint8_t *src2, int w);
00106 void (*add_paeth_prediction)(uint8_t *dst, uint8_t *src, uint8_t *top, int w, int bpp);
00107 } PNGDecContext;
00108
00109 void ff_png_init_mmx(PNGDecContext *s);
00110
00111 #endif