summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMåns Rullgård <mans@mansr.com>2007-07-15 19:23:55 +0000
committerMåns Rullgård <mans@mansr.com>2007-07-15 19:23:55 +0000
commite0eddd1269cc81a6e3b685adb2080b4208489e7c (patch)
treeabcf1a58de17a20a17549af5b9cf1ea71240e713
parent9a5a05d0b37b7a9345e928290c54af20528ac27f (diff)
hardly anything in PNGContext is shared; split it
Originally committed as revision 9689 to svn://svn.ffmpeg.org/ffmpeg/trunk
-rw-r--r--libavcodec/png.c10
-rw-r--r--libavcodec/png.h36
-rw-r--r--libavcodec/pngdec.c52
-rw-r--r--libavcodec/pngenc.c29
4 files changed, 71 insertions, 56 deletions
diff --git a/libavcodec/png.c b/libavcodec/png.c
index 2af7700630..969c14774f 100644
--- a/libavcodec/png.c
+++ b/libavcodec/png.c
@@ -80,13 +80,3 @@ int ff_png_pass_row_size(int pass, int bits_per_pixel, int width)
pass_width = (width - xmin + (1 << shift) - 1) >> shift;
return (pass_width * bits_per_pixel + 7) >> 3;
}
-
-int ff_png_common_init(AVCodecContext *avctx){
- PNGContext *s = avctx->priv_data;
-
- avcodec_get_frame_defaults((AVFrame*)&s->picture);
- avctx->coded_frame= (AVFrame*)&s->picture;
-// s->avctx= avctx;
-
- return 0;
-}
diff --git a/libavcodec/png.h b/libavcodec/png.h
index fb5ec06122..c407efd802 100644
--- a/libavcodec/png.h
+++ b/libavcodec/png.h
@@ -48,40 +48,6 @@
#define NB_PASSES 7
-#define IOBUF_SIZE 4096
-
-typedef struct PNGContext {
- uint8_t *bytestream;
- uint8_t *bytestream_start;
- uint8_t *bytestream_end;
- AVFrame picture;
-
- int state;
- int width, height;
- int bit_depth;
- int color_type;
- int compression_type;
- int interlace_type;
- int filter_type;
- int channels;
- int bits_per_pixel;
- int bpp;
-
- uint8_t *image_buf;
- int image_linesize;
- uint32_t palette[256];
- uint8_t *crow_buf;
- uint8_t *last_row;
- uint8_t *tmp_row;
- int pass;
- int crow_size; /* compressed row size (include filter type) */
- int row_size; /* decompressed row size */
- int pass_row_size; /* decompress row size of the current pass */
- int y;
- z_stream zstream;
- uint8_t buf[IOBUF_SIZE];
-} PNGContext;
-
extern const uint8_t ff_pngsig[8];
/* Mask to determine which y pixels are valid in a pass */
@@ -106,6 +72,4 @@ extern int ff_png_get_nb_channels(int color_type);
/* compute the row size of an interleaved pass */
extern int ff_png_pass_row_size(int pass, int bits_per_pixel, int width);
-extern int ff_png_common_init(AVCodecContext *avctx);
-
#endif
diff --git a/libavcodec/pngdec.c b/libavcodec/pngdec.c
index a8bf6d07a2..1b7319fe7e 100644
--- a/libavcodec/pngdec.c
+++ b/libavcodec/pngdec.c
@@ -30,6 +30,37 @@
//#define DEBUG
+typedef struct PNGDecContext {
+ uint8_t *bytestream;
+ uint8_t *bytestream_start;
+ uint8_t *bytestream_end;
+ AVFrame picture;
+
+ int state;
+ int width, height;
+ int bit_depth;
+ int color_type;
+ int compression_type;
+ int interlace_type;
+ int filter_type;
+ int channels;
+ int bits_per_pixel;
+ int bpp;
+
+ uint8_t *image_buf;
+ int image_linesize;
+ uint32_t palette[256];
+ uint8_t *crow_buf;
+ uint8_t *last_row;
+ uint8_t *tmp_row;
+ int pass;
+ int crow_size; /* compressed row size (include filter type) */
+ int row_size; /* decompressed row size */
+ int pass_row_size; /* decompress row size of the current pass */
+ int y;
+ z_stream zstream;
+} PNGDecContext;
+
/* Mask to determine which y pixels can be written in a pass */
static const uint8_t png_pass_dsp_ymask[NB_PASSES] = {
0xff, 0xff, 0x0f, 0xcc, 0x33, 0xff, 0x55,
@@ -182,7 +213,7 @@ static void convert_to_rgb32(uint8_t *dst, const uint8_t *src, int width)
}
/* process exactly one decompressed row */
-static void png_handle_row(PNGContext *s)
+static void png_handle_row(PNGDecContext *s)
{
uint8_t *ptr, *last_row;
int got_line;
@@ -252,7 +283,7 @@ static void png_handle_row(PNGContext *s)
}
}
-static int png_decode_idat(PNGContext *s, int length)
+static int png_decode_idat(PNGDecContext *s, int length)
{
int ret;
s->zstream.avail_in = length;
@@ -283,7 +314,7 @@ static int decode_frame(AVCodecContext *avctx,
void *data, int *data_size,
uint8_t *buf, int buf_size)
{
- PNGContext * const s = avctx->priv_data;
+ PNGDecContext * const s = avctx->priv_data;
AVFrame *picture = data;
AVFrame * const p= (AVFrame*)&s->picture;
uint32_t tag, length;
@@ -299,7 +330,7 @@ static int decode_frame(AVCodecContext *avctx,
s->bytestream+= 8;
s->y=
s->state=0;
-// memset(s, 0, sizeof(PNGContext));
+// memset(s, 0, sizeof(PNGDecContext));
/* init the zlib */
s->zstream.zalloc = ff_png_zalloc;
s->zstream.zfree = ff_png_zfree;
@@ -498,12 +529,21 @@ static int decode_frame(AVCodecContext *avctx,
goto the_end;
}
+static int png_dec_init(AVCodecContext *avctx){
+ PNGDecContext *s = avctx->priv_data;
+
+ avcodec_get_frame_defaults((AVFrame*)&s->picture);
+ avctx->coded_frame= (AVFrame*)&s->picture;
+
+ return 0;
+}
+
AVCodec png_decoder = {
"png",
CODEC_TYPE_VIDEO,
CODEC_ID_PNG,
- sizeof(PNGContext),
- ff_png_common_init,
+ sizeof(PNGDecContext),
+ png_dec_init,
NULL,
NULL, //decode_end,
decode_frame,
diff --git a/libavcodec/pngenc.c b/libavcodec/pngenc.c
index d4cd6deae3..22365e9da3 100644
--- a/libavcodec/pngenc.c
+++ b/libavcodec/pngenc.c
@@ -31,6 +31,18 @@
//#define DEBUG
+#define IOBUF_SIZE 4096
+
+typedef struct PNGEncContext {
+ uint8_t *bytestream;
+ uint8_t *bytestream_start;
+ uint8_t *bytestream_end;
+ AVFrame picture;
+
+ z_stream zstream;
+ uint8_t buf[IOBUF_SIZE];
+} PNGEncContext;
+
static void png_get_interlaced_row(uint8_t *dst, int row_size,
int bits_per_pixel, int pass,
const uint8_t *src, int width)
@@ -106,7 +118,7 @@ static void png_write_chunk(uint8_t **f, uint32_t tag,
}
/* XXX: do filtering */
-static int png_write_row(PNGContext *s, const uint8_t *data, int size)
+static int png_write_row(PNGEncContext *s, const uint8_t *data, int size)
{
int ret;
@@ -127,7 +139,7 @@ static int png_write_row(PNGContext *s, const uint8_t *data, int size)
}
static int encode_frame(AVCodecContext *avctx, unsigned char *buf, int buf_size, void *data){
- PNGContext *s = avctx->priv_data;
+ PNGEncContext *s = avctx->priv_data;
AVFrame *pict = data;
AVFrame * const p= (AVFrame*)&s->picture;
int bit_depth, color_type, y, len, row_size, ret, is_progressive;
@@ -297,12 +309,21 @@ static int encode_frame(AVCodecContext *avctx, unsigned char *buf, int buf_size,
goto the_end;
}
+static int png_enc_init(AVCodecContext *avctx){
+ PNGEncContext *s = avctx->priv_data;
+
+ avcodec_get_frame_defaults((AVFrame*)&s->picture);
+ avctx->coded_frame= (AVFrame*)&s->picture;
+
+ return 0;
+}
+
AVCodec png_encoder = {
"png",
CODEC_TYPE_VIDEO,
CODEC_ID_PNG,
- sizeof(PNGContext),
- ff_png_common_init,
+ sizeof(PNGEncContext),
+ png_enc_init,
encode_frame,
NULL, //encode_end,
.pix_fmts= (enum PixelFormat[]){PIX_FMT_RGB24, PIX_FMT_RGB32, PIX_FMT_PAL8, PIX_FMT_GRAY8, PIX_FMT_MONOBLACK, -1},