diff --git a/libavcodec/png.c b/libavcodec/png.c index 332701c68a0911c2bbf16cadbf1a220e217ab600..a4287bd7e2e6ca3f386fc76819406cb77098ed35 100644 --- a/libavcodec/png.c +++ b/libavcodec/png.c @@ -21,9 +21,6 @@ #include "avcodec.h" #include "png.h" -const uint8_t ff_pngsig[8] = {137, 80, 78, 71, 13, 10, 26, 10}; -const uint8_t ff_mngsig[8] = {138, 77, 78, 71, 13, 10, 26, 10}; - /* Mask to determine which y pixels are valid in a pass */ const uint8_t ff_png_pass_ymask[NB_PASSES] = { 0x80, 0x80, 0x08, 0x88, 0x22, 0xaa, 0x55, diff --git a/libavcodec/png.h b/libavcodec/png.h index 4b30ba37355d3161c8fa1eb13efe8c5c66aaa188..948c2f714f33f2e4a418cbcb893955cb2fe6837f 100644 --- a/libavcodec/png.h +++ b/libavcodec/png.h @@ -49,8 +49,8 @@ #define NB_PASSES 7 -extern const uint8_t ff_pngsig[8]; -extern const uint8_t ff_mngsig[8]; +#define PNGSIG 0x89504e470d0a1a0a +#define MNGSIG 0x8a4d4e470d0a1a0a /* Mask to determine which y pixels are valid in a pass */ extern const uint8_t ff_png_pass_ymask[NB_PASSES]; diff --git a/libavcodec/png_parser.c b/libavcodec/png_parser.c index 722889bdeb4d0d44708d6fa954913d7c97ea2b1c..877b894e4d2c746ac12e3c98715509171b319c63 100644 --- a/libavcodec/png_parser.c +++ b/libavcodec/png_parser.c @@ -25,9 +25,7 @@ */ #include "parser.h" - -#define PNGSIG 0x89504e470d0a1a0a -#define MNGSIG 0x8a4d4e470d0a1a0a +#include "png.h" typedef struct PNGParseContext { diff --git a/libavcodec/pngdec.c b/libavcodec/pngdec.c index e55a3823c076fd88e860ebce38184410924412d6..5bfe07ba5ded76787f9238cb93fc797058e1e445 100644 --- a/libavcodec/pngdec.c +++ b/libavcodec/pngdec.c @@ -395,21 +395,23 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *p; uint8_t *crow_buf_base = NULL; uint32_t tag, length; + int64_t sig; int ret; FFSWAP(AVFrame *, s->current_picture, s->last_picture); avctx->coded_frame= s->current_picture; p = s->current_picture; + bytestream2_init(&s->gb, buf, buf_size); + /* check signature */ - if (buf_size < 8 || - memcmp(buf, ff_pngsig, 8) != 0 && - memcmp(buf, ff_mngsig, 8) != 0) { + sig = bytestream2_get_be64(&s->gb); + if (sig != PNGSIG && + sig != MNGSIG) { av_log(avctx, AV_LOG_ERROR, "Missing png signature\n"); return -1; } - bytestream2_init(&s->gb, buf + 8, buf_size - 8); s->y= s->state=0; // memset(s, 0, sizeof(PNGDecContext)); diff --git a/libavcodec/pngenc.c b/libavcodec/pngenc.c index 1d362b577e916e021dbd6eb38f5dbe39fe470c94..a29d3c95cfa0f111fafb657764a5b04e1e5e2462 100644 --- a/libavcodec/pngenc.c +++ b/libavcodec/pngenc.c @@ -322,7 +322,7 @@ static int encode_frame(AVCodecContext *avctx, AVPacket *pkt, } /* write png header */ - memcpy(s->bytestream, ff_pngsig, 8); + AV_WB64(s->bytestream, PNGSIG); s->bytestream += 8; AV_WB32(s->buf, avctx->width);