]> git.sesse.net Git - ffmpeg/blobdiff - libavcodec/pnm.c
Add expected const qualifier on 'buf' to match AVCodec.decode's declaration.
[ffmpeg] / libavcodec / pnm.c
index 1f28aced690369e1be309f8b776de343ca3c9377..a3b4919261e9d2dfe2c090a06745b563f61d00fe 100644 (file)
@@ -23,7 +23,7 @@
 
 static inline int pnm_space(int c)
 {
-    return (c == ' ' || c == '\n' || c == '\r' || c == '\t');
+    return c == ' ' || c == '\n' || c == '\r' || c == '\t';
 }
 
 static void pnm_get(PNMContext *sc, char *str, int buf_size)
@@ -106,7 +106,13 @@ int ff_pnm_decode_header(AVCodecContext *avctx, PNMContext * const s){
             else
                 avctx->pix_fmt = PIX_FMT_GRAY8;
         } else if (depth == 3) {
+            if (maxval < 256) {
             avctx->pix_fmt = PIX_FMT_RGB24;
+            } else {
+                av_log(avctx, AV_LOG_ERROR, "16-bit components are only supported for grayscale\n");
+                avctx->pix_fmt = PIX_FMT_NONE;
+                return -1;
+            }
         } else if (depth == 4) {
             avctx->pix_fmt = PIX_FMT_RGB32;
         } else {
@@ -127,10 +133,16 @@ int ff_pnm_decode_header(AVCodecContext *avctx, PNMContext * const s){
     if (avctx->pix_fmt != PIX_FMT_MONOWHITE) {
         pnm_get(s, buf1, sizeof(buf1));
         s->maxval = atoi(buf1);
-        if(s->maxval >= 256 && avctx->pix_fmt == PIX_FMT_GRAY8) {
-            avctx->pix_fmt = PIX_FMT_GRAY16BE;
-            if (s->maxval != 65535)
-                avctx->pix_fmt = PIX_FMT_GRAY16;
+        if (s->maxval >= 256) {
+            if (avctx->pix_fmt == PIX_FMT_GRAY8) {
+                avctx->pix_fmt = PIX_FMT_GRAY16BE;
+                if (s->maxval != 65535)
+                    avctx->pix_fmt = PIX_FMT_GRAY16;
+            } else {
+                av_log(avctx, AV_LOG_ERROR, "16-bit components are only supported for grayscale\n");
+                avctx->pix_fmt = PIX_FMT_NONE;
+                return -1;
+            }
         }
     }
     /* more check if YUV420 */