changeset 5339:a8c48a070cff libavcodec

hardly anything in PNGContext is shared; split it
author mru
date Sun, 15 Jul 2007 19:23:55 +0000
parents 5c1695f0f3e4
children 6dc4826a38da
files png.c png.h pngdec.c pngenc.c
diffstat 4 files changed, 71 insertions(+), 56 deletions(-) [+]
line wrap: on
line diff
--- a/png.c	Sun Jul 15 19:03:12 2007 +0000
+++ b/png.c	Sun Jul 15 19:23:55 2007 +0000
@@ -80,13 +80,3 @@
     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;
-}
--- a/png.h	Sun Jul 15 19:03:12 2007 +0000
+++ b/png.h	Sun Jul 15 19:23:55 2007 +0000
@@ -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 @@
 /* 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
--- a/pngdec.c	Sun Jul 15 19:03:12 2007 +0000
+++ b/pngdec.c	Sun Jul 15 19:23:55 2007 +0000
@@ -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 @@
 }
 
 /* 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 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 @@
                         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 @@
     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 @@
     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,
--- a/pngenc.c	Sun Jul 15 19:03:12 2007 +0000
+++ b/pngenc.c	Sun Jul 15 19:23:55 2007 +0000
@@ -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 @@
 }
 
 /* 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 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 @@
     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},