]> git.sesse.net Git - ffmpeg/blobdiff - libavcodec/png_parser.c
Merge commit 'a5e8c41c28f907d98d2a739db08f7aef4cbfcf3a'
[ffmpeg] / libavcodec / png_parser.c
index ddd1be8c1a91228d4040a5d4a968d4da25bcff1f..877b894e4d2c746ac12e3c98715509171b319c63 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      = { CODEC_ID_PNG },
+    .priv_data_size = sizeof(PNGParseContext),
+    .parser_parse   = png_parse,
+    .parser_close   = ff_parse_close,
 };