avcodec/dca: remove unused float quant table
[ffmpeg.git] / libavcodec / png_parser.c
index ddd1be8..74f2964 100644 (file)
  */
 
 /**
- * @file libavcodec/png_parser.c
+ * @file
  * PNG parser
  */
 
-#include "libavutil/intreadwrite.h"
 #include "parser.h"
+#include "png.h"
 
-#define PNGSIG 0x89504e470d0a1a0a
-#define MNGSIG 0x8a4d4e470d0a1a0a
-
-typedef struct PNGParseContext
-{
+typedef struct PNGParseContext {
     ParseContext pc;
-    uint32_t index;
-    uint32_t chunk_length;
-    uint32_t remaining_size;
+    uint32_t chunk_pos;           ///< position inside current chunk
+    uint32_t chunk_length;        ///< length of the current chunk
+    uint32_t remaining_size;      ///< remaining size of the current chunk
 } PNGParseContext;
 
 static int png_parse(AVCodecParserContext *s, AVCodecContext *avctx,
@@ -46,9 +42,9 @@ 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;
 
     if (!ppc->pc.frame_start_found) {
         uint64_t state64 = ppc->pc.state64;
@@ -61,38 +57,37 @@ static int png_parse(AVCodecParserContext *s, AVCodecContext *avctx,
             }
         }
         ppc->pc.state64 = state64;
-    } else
-        if (ppc->remaining_size) {
-            i = FFMIN(ppc->remaining_size, buf_size);
-            ppc->remaining_size -= i;
-            if (ppc->remaining_size)
-                goto flush;
-            if (ppc->index == -1) {
-                next = i;
-                goto flush;
-            }
+    } else if (ppc->remaining_size) {
+        i = FFMIN(ppc->remaining_size, buf_size);
+        ppc->remaining_size -= i;
+        if (ppc->remaining_size)
+            goto flush;
+        if (ppc->chunk_pos == -1) {
+            next = i;
+            goto flush;
         }
+    }
 
-    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);
+    for (; ppc->pc.frame_start_found && i < buf_size; i++) {
+        ppc->pc.state = (ppc->pc.state << 8) | buf[i];
+        if (ppc->chunk_pos == 3) {
+            ppc->chunk_length = ppc->pc.state;
             if (ppc->chunk_length > 0x7fffffff) {
-                ppc->index = ppc->pc.frame_start_found = 0;
+                ppc->chunk_pos = ppc->pc.frame_start_found = 0;
                 goto flush;
             }
             ppc->chunk_length += 4;
-        } else if (ppc->index == 7) {
+        } else if (ppc->chunk_pos == 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')) {
+                ppc->remaining_size = ppc->chunk_length - buf_size + i + 1;
+            if (ppc->pc.state == MKBETAG('I', 'E', 'N', 'D')) {
                 if (ppc->remaining_size)
-                    ppc->index = -1;
+                    ppc->chunk_pos = -1;
                 else
                     next = ppc->chunk_length + i + 1;
                 break;
             } else {
-                ppc->index = 0;
+                ppc->chunk_pos = 0;
                 if (ppc->remaining_size)
                     break;
                 else
@@ -100,13 +95,14 @@ static int png_parse(AVCodecParserContext *s, AVCodecContext *avctx,
                 continue;
             }
         }
-        ppc->index++;
+        ppc->chunk_pos++;
     }
+
 flush:
     if (ff_combine_frame(&ppc->pc, next, &buf, &buf_size) < 0)
         return buf_size;
 
-    ppc->index = ppc->pc.frame_start_found = 0;
+    ppc->chunk_pos = ppc->pc.frame_start_found = 0;
 
     *poutbuf      = buf;
     *poutbuf_size = buf_size;
@@ -114,9 +110,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,
 };