* PNG image format
* Copyright (c) 2003 Fabrice Bellard
*
- * This file is part of FFmpeg.
+ * This file is part of Libav.
*
- * FFmpeg is free software; you can redistribute it and/or
+ * Libav is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
- * FFmpeg is distributed in the hope that it will be useful,
+ * Libav is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
- * License along with FFmpeg; if not, write to the Free Software
+ * License along with Libav; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
+#include "libavutil/imgutils.h"
#include "avcodec.h"
#include "bytestream.h"
#include "png.h"
AVFrame *p;
uint8_t *crow_buf_base = NULL;
uint32_t tag, length;
- int ret, crc;
+ int ret;
FFSWAP(AVFrame *, s->current_picture, s->last_picture);
avctx->coded_frame= s->current_picture;
goto fail;
tag32 = bytestream_get_be32(&s->bytestream);
tag = av_bswap32(tag32);
- dprintf(avctx, "png: tag=%c%c%c%c length=%u\n",
+ av_dlog(avctx, "png: tag=%c%c%c%c length=%u\n",
(tag & 0xff),
((tag >> 8) & 0xff),
((tag >> 16) & 0xff),
goto fail;
s->width = bytestream_get_be32(&s->bytestream);
s->height = bytestream_get_be32(&s->bytestream);
- if(avcodec_check_dimensions(avctx, s->width, s->height)){
+ if(av_image_check_size(s->width, s->height, 0, avctx)){
s->width= s->height= 0;
goto fail;
}
s->compression_type = *s->bytestream++;
s->filter_type = *s->bytestream++;
s->interlace_type = *s->bytestream++;
- crc = bytestream_get_be32(&s->bytestream);
+ s->bytestream += 4; /* crc */
s->state |= PNG_IHDR;
- dprintf(avctx, "width=%d height=%d depth=%d color_type=%d compression_type=%d filter_type=%d interlace_type=%d\n",
+ av_dlog(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;
av_log(avctx, AV_LOG_ERROR, "get_buffer() failed\n");
goto fail;
}
- p->pict_type= FF_I_TYPE;
+ p->pict_type= AV_PICTURE_TYPE_I;
p->key_frame= 1;
p->interlaced_frame = !!s->interlace_type;
s->width);
s->crow_size = s->pass_row_size + 1;
}
- dprintf(avctx, "row_size=%d crow_size =%d\n",
+ av_dlog(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];
s->state |= PNG_IDAT;
if (png_decode_idat(s, length) < 0)
goto fail;
- /* skip crc */
- crc = bytestream_get_be32(&s->bytestream);
+ s->bytestream += 4; /* crc */
break;
case MKTAG('P', 'L', 'T', 'E'):
{
s->palette[i] = (0xff << 24);
}
s->state |= PNG_PLTE;
- crc = bytestream_get_be32(&s->bytestream);
+ s->bytestream += 4; /* crc */
}
break;
case MKTAG('t', 'R', 'N', 'S'):
v = *s->bytestream++;
s->palette[i] = (s->palette[i] & 0x00ffffff) | (v << 24);
}
- crc = bytestream_get_be32(&s->bytestream);
+ s->bytestream += 4; /* crc */
}
break;
case MKTAG('I', 'E', 'N', 'D'):
if (!(s->state & PNG_ALLIMAGE))
goto fail;
- crc = bytestream_get_be32(&s->bytestream);
+ s->bytestream += 4; /* crc */
goto exit_loop;
default:
/* skip tag */
return 0;
}
-AVCodec png_decoder = {
- "png",
- AVMEDIA_TYPE_VIDEO,
- CODEC_ID_PNG,
- sizeof(PNGDecContext),
- png_dec_init,
- NULL,
- png_dec_end,
- decode_frame,
- CODEC_CAP_DR1 /*| CODEC_CAP_DRAW_HORIZ_BAND*/,
- NULL,
- .max_lowres = 5,
+AVCodec ff_png_decoder = {
+ .name = "png",
+ .type = AVMEDIA_TYPE_VIDEO,
+ .id = CODEC_ID_PNG,
+ .priv_data_size = sizeof(PNGDecContext),
+ .init = png_dec_init,
+ .close = png_dec_end,
+ .decode = decode_frame,
+ .capabilities = CODEC_CAP_DR1 /*| CODEC_CAP_DRAW_HORIZ_BAND*/,
.long_name = NULL_IF_CONFIG_SMALL("PNG image"),
};