goto fail;
tag32 = bytestream_get_be32(&s->bytestream);
tag = bswap_32(tag32);
-#ifdef DEBUG
- av_log(avctx, AV_LOG_DEBUG, "png: tag=%c%c%c%c length=%u\n",
- (tag & 0xff),
- ((tag >> 8) & 0xff),
- ((tag >> 16) & 0xff),
- ((tag >> 24) & 0xff), length);
-#endif
+ dprintf(avctx, "png: tag=%c%c%c%c length=%u\n",
+ (tag & 0xff),
+ ((tag >> 8) & 0xff),
+ ((tag >> 16) & 0xff),
+ ((tag >> 24) & 0xff), length);
switch(tag) {
case MKTAG('I', 'H', 'D', 'R'):
if (length != 13)
s->interlace_type = *s->bytestream++;
crc = bytestream_get_be32(&s->bytestream);
s->state |= PNG_IHDR;
-#ifdef DEBUG
- av_log(avctx, AV_LOG_DEBUG, "width=%d height=%d depth=%d color_type=%d compression_type=%d filter_type=%d interlace_type=%d\n",
- s->width, s->height, s->bit_depth, s->color_type,
- s->compression_type, s->filter_type, s->interlace_type);
-#endif
+ dprintf(avctx, "width=%d height=%d depth=%d color_type=%d compression_type=%d filter_type=%d interlace_type=%d\n",
+ s->width, s->height, s->bit_depth, s->color_type,
+ s->compression_type, s->filter_type, s->interlace_type);
break;
case MKTAG('I', 'D', 'A', 'T'):
if (!(s->state & PNG_IHDR))
s->width);
s->crow_size = s->pass_row_size + 1;
}
-#ifdef DEBUG
- av_log(avctx, AV_LOG_DEBUG, "row_size=%d crow_size =%d\n",
- s->row_size, s->crow_size);
-#endif
+ dprintf(avctx, "row_size=%d crow_size =%d\n",
+ s->row_size, s->crow_size);
s->image_buf = p->data[0];
s->image_linesize = p->linesize[0];
/* copy the palette if needed */
return 0;
}
+static av_cold int png_dec_end(AVCodecContext *avctx)
+{
+ PNGDecContext *s = avctx->priv_data;
+
+ if (s->picture1.data[0])
+ avctx->release_buffer(avctx, &s->picture1);
+ if (s->picture2.data[0])
+ avctx->release_buffer(avctx, &s->picture2);
+
+ return 0;
+}
+
AVCodec png_decoder = {
"png",
CODEC_TYPE_VIDEO,
sizeof(PNGDecContext),
png_dec_init,
NULL,
- NULL, //decode_end,
+ png_dec_end,
decode_frame,
CODEC_CAP_DR1 /*| CODEC_CAP_DRAW_HORIZ_BAND*/,
NULL,