Reviewed-by: Michael Niedermayer <michaelni@gmx.at> Signed-off-by: Paul B Mahol <onemda@gmail.com>tags/n1.0
| @@ -21,9 +21,6 @@ | |||||
| #include "avcodec.h" | #include "avcodec.h" | ||||
| #include "png.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 */ | /* Mask to determine which y pixels are valid in a pass */ | ||||
| const uint8_t ff_png_pass_ymask[NB_PASSES] = { | const uint8_t ff_png_pass_ymask[NB_PASSES] = { | ||||
| 0x80, 0x80, 0x08, 0x88, 0x22, 0xaa, 0x55, | 0x80, 0x80, 0x08, 0x88, 0x22, 0xaa, 0x55, | ||||
| @@ -49,8 +49,8 @@ | |||||
| #define NB_PASSES 7 | #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 */ | /* Mask to determine which y pixels are valid in a pass */ | ||||
| extern const uint8_t ff_png_pass_ymask[NB_PASSES]; | extern const uint8_t ff_png_pass_ymask[NB_PASSES]; | ||||
| @@ -25,9 +25,7 @@ | |||||
| */ | */ | ||||
| #include "parser.h" | #include "parser.h" | ||||
| #define PNGSIG 0x89504e470d0a1a0a | |||||
| #define MNGSIG 0x8a4d4e470d0a1a0a | |||||
| #include "png.h" | |||||
| typedef struct PNGParseContext | typedef struct PNGParseContext | ||||
| { | { | ||||
| @@ -395,21 +395,23 @@ static int decode_frame(AVCodecContext *avctx, | |||||
| AVFrame *p; | AVFrame *p; | ||||
| uint8_t *crow_buf_base = NULL; | uint8_t *crow_buf_base = NULL; | ||||
| uint32_t tag, length; | uint32_t tag, length; | ||||
| int64_t sig; | |||||
| int ret; | int ret; | ||||
| FFSWAP(AVFrame *, s->current_picture, s->last_picture); | FFSWAP(AVFrame *, s->current_picture, s->last_picture); | ||||
| avctx->coded_frame= s->current_picture; | avctx->coded_frame= s->current_picture; | ||||
| p = s->current_picture; | p = s->current_picture; | ||||
| bytestream2_init(&s->gb, buf, buf_size); | |||||
| /* check signature */ | /* 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"); | av_log(avctx, AV_LOG_ERROR, "Missing png signature\n"); | ||||
| return -1; | return -1; | ||||
| } | } | ||||
| bytestream2_init(&s->gb, buf + 8, buf_size - 8); | |||||
| s->y= | s->y= | ||||
| s->state=0; | s->state=0; | ||||
| // memset(s, 0, sizeof(PNGDecContext)); | // memset(s, 0, sizeof(PNGDecContext)); | ||||
| @@ -322,7 +322,7 @@ static int encode_frame(AVCodecContext *avctx, AVPacket *pkt, | |||||
| } | } | ||||
| /* write png header */ | /* write png header */ | ||||
| memcpy(s->bytestream, ff_pngsig, 8); | |||||
| AV_WB64(s->bytestream, PNGSIG); | |||||
| s->bytestream += 8; | s->bytestream += 8; | ||||
| AV_WB32(s->buf, avctx->width); | AV_WB32(s->buf, avctx->width); | ||||