Merge commit '86bfcfcf2364bc837b7bb582c66a8a15a332414f'
[ffmpeg.git] / libavcodec / png_parser.c
index ddd1be8..6f153d9 100644 (file)
  */
 
 /**
- * @file libavcodec/png_parser.c
+ * @file
  * PNG parser
  */
 
-#include "libavutil/intreadwrite.h"
 #include "parser.h"
-
-#define PNGSIG 0x89504e470d0a1a0a
-#define MNGSIG 0x8a4d4e470d0a1a0a
+#include "png.h"
 
 typedef struct PNGParseContext
 {
@@ -46,6 +43,8 @@ static int png_parse(AVCodecParserContext *s, AVCodecContext *avctx,
     int next = END_NOT_FOUND;
     int i = 0;
 
+    s->pict_type = AV_PICTURE_TYPE_NONE;
+
     *poutbuf_size = 0;
     if (buf_size == 0)
         return 0;
@@ -76,7 +75,7 @@ static int png_parse(AVCodecParserContext *s, AVCodecContext *avctx,
     for (;ppc->pc.frame_start_found && i < buf_size; i++) {
         ppc->pc.state = (ppc->pc.state<<8) | buf[i];
         if (ppc->index == 3) {
-            ppc->chunk_length = AV_RL32(&ppc->pc.state);
+            ppc->chunk_length = ppc->pc.state;
             if (ppc->chunk_length > 0x7fffffff) {
                 ppc->index = ppc->pc.frame_start_found = 0;
                 goto flush;
@@ -85,7 +84,7 @@ static int png_parse(AVCodecParserContext *s, AVCodecContext *avctx,
         } else if (ppc->index == 7) {
             if (ppc->chunk_length >= buf_size - i)
                     ppc->remaining_size = ppc->chunk_length - buf_size + i + 1;
-            if (AV_RB32(&ppc->pc.state) == MKTAG('I', 'E', 'N', 'D')) {
+            if (ppc->pc.state == MKBETAG('I', 'E', 'N', 'D')) {
                 if (ppc->remaining_size)
                     ppc->index = -1;
                 else
@@ -114,9 +113,8 @@ flush:
 }
 
 AVCodecParser ff_png_parser = {
-    { CODEC_ID_PNG },
-    sizeof(PNGParseContext),
-    NULL,
-    png_parse,
-    ff_parse_close,
+    .codec_ids      = { AV_CODEC_ID_PNG },
+    .priv_data_size = sizeof(PNGParseContext),
+    .parser_parse   = png_parse,
+    .parser_close   = ff_parse_close,
 };